diff --git a/.hgignore b/.hgignore index 4b380c4..39594d2 100644 --- a/.hgignore +++ b/.hgignore @@ -25,7 +25,6 @@ PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/LITE/Utility_Lite/Release *.log *.txt *.db -*.lib PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Release/ PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/ PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/ReleaseSO7/ @@ -39,3 +38,5 @@ PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/MachineInterfaceDll/Debug PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/MachineInterfaceDll/Release PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Win32TestDll/Debug PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Win32TestDll/Release +PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/V6.0 +PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/V7.5 diff --git a/PcDmis/Base/Interfac/Msi/Hsi/ART/ART_PCI8622.cpp b/PcDmis/Base/Interfac/Msi/Hsi/ART/ART_PCI8622.cpp new file mode 100644 index 0000000..b13f479 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/ART/ART_PCI8622.cpp @@ -0,0 +1,162 @@ +#include "StdAfx.h" +#include +#include +#include "ART_PCI8622.h" + +#define MAX_AD_CHANNELS 4 +#define SEGMENT_COUNT 32 +#define HALF_SIZE_WORDS 4096 + + +CART_PCI8622::CART_PCI8622() +{ + +} + +CART_PCI8622::~CART_PCI8622() +{ + +} +//======================================== +BOOL CART_PCI8622::Init() +{ + return TRUE; +} +//======================================== +BOOL CART_PCI8622::Exit() +{ + return TRUE; +} +//======================================== +BOOL CART_PCI8622::GetData() +{ + BOOL rStatus(TRUE); +#ifdef _RELEASE_FULL_VERSION + int InputRange(0); + int SelectInputRange(void); + WORD ADBuffer[SEGMENT_COUNT][HALF_SIZE_WORDS]; // 分配缓冲区(存储原始数据) + ULONG SegmentID = 0; + + HANDLE hDevice; + int DeviceLgcID; + + PCI8622_PARA_AD ADPara; // 硬件参数 + PCI8622_STATUS_DMA DMAStatus; // DMA状态参数 + + int Index(0); + + int nADChannel = 0; + WORD ADData(0); + float fVolt(0); + + DeviceLgcID = 0; + hDevice = PCI8622_CreateDevice(DeviceLgcID); // 创建设备对象 + if(hDevice == INVALID_HANDLE_VALUE) + { + rStatus=FALSE; + return rStatus; // 如果创建设备对象失败,则返回 + } + + memset(&ADPara, 0x00, sizeof(ADPara)); // 将各项参数复位至确定值0(强烈建议) + + // 预置硬件参数 + ADPara.ADMode = PCI8622_ADMODE_SEQUENCE; // AD模式为连续模式 + ADPara.FirstChannel = 1; // 首通道 + ADPara.LastChannel = 2; // 末通道 + ADPara.Frequency = 10000; // 采样频率(Hz) + ADPara.GroupInterval = 50; // 组间间隔(uS) + ADPara.LoopsOfGroup = 1; // 组内各通道点数 + ADPara.Gains = PCI8622_GAINS_1MULT; + ADPara.InputRange = InputRange; // 模拟量输入量程范围 + + ADPara.TriggerMode = PCI8622_TRIGMODE_SOFT; // 触发模式为软件触发 + ADPara.TriggerType = PCI8622_TRIGTYPE_EDGE; // 触发类型为边沿触发 + ADPara.TriggerDir = PCI8622_TRIGDIR_NEGATIVE; // 触发方向为负向 + ADPara.TrigWindow = 40; // 触发灵敏度 + + ADPara.ClockSource = PCI8622_CLOCKSRC_IN; // 时钟源选用板内时钟源 + ADPara.bClockOutput = FALSE; // 禁止时钟输出 + ADPara.GroundingMode = PCI8622_GNDMODE_SE; // 单端方式(SE:Single end) + ADPara.TimeoutForNpt = 10; // 在非空方式下,设置超时时间为10秒钟(只在非空查询方式下有效) + + HANDLE hDmaEvent = PCI8622_CreateSystemEvent(); + if(!PCI8622_InitDeviceDmaAD( hDevice, hDmaEvent, &ADBuffer[0][0], 4096, SEGMENT_COUNT, HALF_SIZE_WORDS, &ADPara)) // 初始化硬件 + { + rStatus=FALSE; + goto ExitRead0; + } + + PCI8622_StartDeviceDmaAD(hDevice); // 启动设备 + bool bWait(true); + while(bWait) // 查询当前物理缓冲区数据是否已准备就绪 + { + if(WaitForSingleObject (hDmaEvent, 100)==WAIT_OBJECT_0) + bWait=false; // 等待DMA事件 + } + + if(!PCI8622_GetDevStatusDmaAD(hDevice, &DMAStatus)) + { + rStatus=FALSE; + goto ExitRead0; + } + + if(DMAStatus.bBufferOverflow) + { + rStatus=FALSE; + } + + for(SegmentID=0; SegmentID ADPara.LastChannel) + { + nADChannel = ADPara.FirstChannel; + } + } + } + + if(!PCI8622_SetDevStatusDmaAD(hDevice, SegmentID)) + { + rStatus=FALSE; + goto ExitRead0; + } + } // end of for(SegmentID=0; SegmentID 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include "PCI8622.h" +//====================================================================================== +class CART_PCI8622 +{ +protected: + +public: + CART_PCI8622(); + ~CART_PCI8622(); + + BOOL Init(); + BOOL Exit(); + BOOL GetData(); + +}; +#endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/ART/PCI8622.h b/PcDmis/Base/Interfac/Msi/Hsi/ART/PCI8622.h new file mode 100644 index 0000000..78cea71 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/ART/PCI8622.h @@ -0,0 +1,336 @@ +#ifndef _PCI8622_DEVICE_ +#define _PCI8622_DEVICE_ +//#################### AD硬件参数PCI8622_PARA_AD定义 ##################### +// 用于AD采样的实际硬件参数 +typedef struct _PCI8622_PARA_AD +{ + LONG ADMode; // AD模式选择(连续/分组方式) + LONG FirstChannel; // 首通道[0,31] + LONG LastChannel; // 末通道[0,31],要求末通道必须大于或等于首通道 + LONG Frequency; // 采集频率,单位为Hz, [1, 250000] + LONG GroupInterval; // 分组时的组间间隔(单位:微秒)[1, 419430] + LONG LoopsOfGroup; // 组内循环次数[1, 255] + LONG Gains; // 增益设置 + LONG InputRange; // 模拟量输入量程范围 + LONG TriggerMode; // 触发模式选择 + LONG TriggerType; // 触发类型选择(边沿触发/脉冲触发) + LONG TriggerDir; // 触发方向选择(正向/负向触发) + LONG TrigWindow; // 触发灵敏窗[1, 65535], 单位25纳秒 + LONG ClockSource; // 时钟源选择(内/外时钟源) + LONG bClockOutput; // 允许时钟输出到CLKOUT,=TRUE:允许时钟输出, =FALSE:禁止时钟输出 + LONG GroundingMode; // 接地方式(单端或双端选择) + LONG TimeoutForNpt; // 非空查询方式下的超时时间,单位秒,取值范围为[0, 3600] +} PCI8622_PARA_AD, *PPCI8622_PARA_AD; + +//*********************************************************** +// AD硬件参数PCI8622_PARA_AD中的ADMode所使用工作模式选项 +const long PCI8622_ADMODE_SEQUENCE = 0x00; // 连续采样 +const long PCI8622_ADMODE_GROUP = 0x01; // 分组采样 + +//*********************************************************** +// AD硬件参数PCI8622_PARA_AD中的InputRange模拟量输入范围所使用的选项 +const long PCI8622_INPUT_N10000_P10000mV= 0x00; // ±10000mV +const long PCI8622_INPUT_N5000_P5000mV = 0x01; // ±5000mV +const long PCI8622_INPUT_N2500_P2500mV = 0x02; // ±2500mV +const long PCI8622_INPUT_0_P10000mV = 0x03; // 0~10000mV +const long PCI8622_INPUT_0_P5000mV = 0x04; // 0~5000mV + +//*********************************************************** +// AD参数PCI8622_PARA_AD中的Gains使用的硬件增益选项(使用AD8250放大器) +const long PCI8622_GAINS_1MULT = 0x00; // 1倍增益 +const long PCI8622_GAINS_2MULT = 0x01; // 2倍增益 +const long PCI8622_GAINS_5MULT = 0x02; // 5倍增益 +const long PCI8622_GAINS_10MULT = 0x03; // 10倍增益 + +//*********************************************************** +// AD硬件参数PCI8622_PARA_AD中的TriggerMode成员变量所使用触发模式选项 +const long PCI8622_TRIGMODE_SOFT = 0x00; // 软件触发(属于内触发) +const long PCI8622_TRIGMODE_POST = 0x01; // 硬件后触发(属于外触发) + +// AD硬件参数PCI8622_PARA_AD中的TriggerType触发类型所使用的选项 +const long PCI8622_TRIGTYPE_EDGE = 0x00; // 边沿触发 +const long PCI8622_TRIGTYPE_PULSE = 0x01; // 脉冲触发(电平) + +//*********************************************************** +// AD硬件参数PCI8622_PARA_AD中的TriggerDir触发方向所使用的选项 +const long PCI8622_TRIGDIR_NEGATIVE = 0x00; // 负向触发(低脉冲/下降沿触发) +const long PCI8622_TRIGDIR_POSITIVE = 0x01; // 正向触发(高脉冲/上升沿触发) +const long PCI8622_TRIGDIR_POSIT_NEGAT = 0x02; // 正负向触发(高/低脉冲或上升/下降沿触发) + +//*********************************************************** +// AD硬件参数PCI8622_PARA_AD中的ClockSource时钟源所使用的选项 +const long PCI8622_CLOCKSRC_IN = 0x00; // 内部时钟 +const long PCI8622_CLOCKSRC_OUT = 0x01; // 外部时钟(CLKIN) + +//*********************************************************** +// AD参数(PCI8622_PARA_AD)中的GroundingMode使用的模拟信号接地方式选项 +const long PCI8622_GNDMODE_SE = 0x00; // 单端方式(SE:Single end) +const long PCI8622_GNDMODE_DI = 0x01; // 双端方式(DI:Differential) + +//************************************************************************************* +// 用于AD采样的实际硬件参数 +typedef struct _PCI8622_STATUS_AD +{ + LONG bNotEmpty; // 板载FIFO存储器的非空标志,=TRUE非空, = FALSE 空 + LONG bHalf; // 板载FIFO存储器的半满标志,=TRUE半满以上, = FALSE 半满以下 + LONG bDynamic_Overflow; // 板载FIFO存储器的动态溢出标志,= TRUE已发生溢出, = FALSE 未发生溢出 + LONG bStatic_Overflow; // 板载FIFO存储器的静态溢出标志,= TRUE已发生溢出, = FALSE 未发生溢出 + LONG bConverting; // AD是否正在转换, =TRUE:表示正在转换, =FALS表示转换完成 + LONG bTriggerFlag; // 触发标志, =TRUE表示触发事件发生, =FALSE表示触发事件未发生 + LONG nRemainWords; // 在FIFO中乘余的数据点数 +} PCI8622_STATUS_AD, *PPCI8622_STATUS_AD; + +const int PCI8622_MAX_SEGMENT_COUNT = 64; +typedef struct _PCI8622_STATUS_DMA +{ + LONG iCurSegmentID; // 当前段缓冲ID,表示DMA正在传输的缓冲区段 + LONG bSegmentSts[PCI8622_MAX_SEGMENT_COUNT]; // 各个缓冲区的新旧状态,=1表示该相应缓冲区数据为新,否则为旧 + LONG bBufferOverflow; // 返回溢出状态 +} PCI8622_STATUS_DMA, *PPCI8622_STATUS_DMA; + +//*********************************************************** +// 用于计数器的参数结构 +typedef struct _PCI8622_PARA_CNT +{ + LONG FunctionMode; // 功能模式, 0:计数器模式COUNTER, 2:脉冲发生器模式 + LONG ClockSource; // 时钟源选择 + LONG GateMode; // 门控模式 + LONG bEnableBuffer; // 缓冲计数使能, 0: 禁止缓冲计数,1: 允许缓冲计数 + LONG OutputDir; // 计数输出电平方向 + LONG bCoutinue; // 溢出后是否继续计数 + LONG OutputType; // 定时器脉冲发生方式下有效,输出波形类型。 +} PCI8622_PARA_CNT, *PPCI8622_PARA_CNT; + +//*********************************************************** +// 硬件参数PCI8622_PARA_CNT中的FunctionMode功能模式选项 +const long PCI8622_FUNCMODE_COUNTER = 0x00; // 计数器模式 +const long PCI8622_FUNCMODE_TIMER = 0x01; // 脉冲发生器模式 + +//*********************************************************** +// 硬件参数PCI8622_PARA_CNT中的ClockSource功能模式选项 +const long PCI8622_CLOCKSRC_LOCAL_CLK = 0x00; // 板卡局部分频时钟(对40M晶振分频而得,由SetLocalCLKFreq设定) +const long PCI8622_CLOCKSRC_CLOCK_IN = 0x01; // 外部时钟信号源输入 + +//*********************************************************** +// 硬件参数PCI8622_PARA_CNT中的ClockDir时钟方向选项 +const long PCI8622_CLOCKDIR_POSTIVE = 0x00; // 上升沿计数 +const long PCI8622_CLOCKDIR_NEGATIVE = 0x01; // 下降沿计数 + +//*********************************************************** +// 硬件参数PCI8622_PARA_CNT中的GateMode在门控模式选项 +const long PCI8622_GATEMODE_UNUSE_0 = 0x00; // COUNTER:不使用门控信号(适用于简单事件计数) +// TIMER:不使用GATE的单次脉冲发生(适用于单次脉冲发生器) +const long PCI8622_GATEMODE_RISING_1 = 0x01; // COUNTER:GATE上边沿触发计数,后续边沿无效 +// TIMER:GATE上边沿单次触发脉冲发生(适用于单次触发单脉冲发生器) +const long PCI8622_GATEMODE_FALLING_2 = 0x02; // COUNTER:GATE下边沿触发,后续边沿无效 +// TIMER:GATE下边沿单次触发脉冲发生(适用于单次触发单脉冲发生器) +const long PCI8622_GATEMODE_POSITIVE_3 = 0x03; // COUNTER:高电平有效(适用于门控事件计数) +// TIMER:GATE上边沿重复触发脉冲发生(适用于重复触发单脉冲发生器) +const long PCI8622_GATEMODE_NEGATIVE_4 = 0x04; // COUNTER:低电平有效(适用于门控事件计数) +// TIMER:GATE下边沿重复触发脉冲发生(适用于重复触发单脉冲发生器) +const long PCI8622_GATEMODE_RSTART_FSTOP_5 = 0x05; // COUNTER:上边沿触发计数、下边沿停止计数(适用于单脉冲宽度测量) +// TIMER:GATE上边沿单次触发连续脉冲串发生器 +const long PCI8622_GATEMODE_FSTART_RSTOP_6 = 0x06; // COUNTER:下边沿触发计数、上边沿停止计数(适用于单脉冲宽度测量) +// TIMER:GATE下边沿单次触发连续脉冲串发生器 +const long PCI8622_GATEMODE_PSTART_PSTOP_7 = 0x07; // COUNTER:上边沿触发计数、下一个上边沿停止计数(适用于单周期测量) +// TIMER:GATE高电平允许连续脉冲串发生器 +const long PCI8622_GATEMODE_NSTART_NSTOP_8 = 0x08; // COUNTER:下边沿触发计数、下一个下边沿停止计数(适用于单周期测量) +// TIMER:GATE低电平允许连续脉冲串发生器 + +// 硬件参数PCI8622_PARA_CNT中的OutputDir在输出方向选项 +const long PCI8622_OUTPUTDIR_NEGATIVE = 0x00; // 禁止计数情况下,输出低电平有效 +const long PCI8622_OUTPUTDIR_POSITIVE = 0x01; // 禁止计数情况下,输出高电平有效 + +//*********************************************************** +// 用户函数接口 +#ifndef _PCI8622_DRIVER_ +#define DEVAPI __declspec(dllimport) +#else +#define DEVAPI __declspec(dllexport) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + //######################## 常规通用函数 ################################# + // 适用于本设备的最基本操作 + HANDLE DEVAPI FAR PASCAL PCI8622_CreateDevice(int DeviceID = 0); // 创建设备对象 + int DEVAPI FAR PASCAL PCI8622_GetDeviceCount(HANDLE hDevice); // 取得设备总台数 + BOOL DEVAPI FAR PASCAL PCI8622_GetDeviceCurrentID(HANDLE hDevice, PLONG DeviceLgcID, PLONG DevicePhysID); + BOOL DEVAPI FAR PASCAL PCI8622_ListDeviceDlg(HANDLE hDevice); // 列表系统当中的所有的该PCI设备 + BOOL DEVAPI FAR PASCAL PCI8622_ReleaseDevice(HANDLE hDevice); // 关闭设备,禁止传输,且释放资源 + + //####################### AD数据读取函数 ################################# + // 适于大多数普通用户,这些接口最简单、最快捷、最可靠,让用户不必知道设备 + // 低层复杂的硬件控制协议和繁多的软件控制编程,仅用下面的初始化设备和读取 + // AD数据两个函数便能轻松高效地实现高速、连续的数据采集 + BOOL DEVAPI FAR PASCAL PCI8622_GetDevTriggerPos( // 取得触发位置 + HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 + PULONG nTriggerPos); // 取得触发位置值 + // AD程序查询方式函数 + BOOL DEVAPI FAR PASCAL PCI8622_InitDeviceProAD( // 初始化设备,当返回TRUE后,设备即准备就绪. + HANDLE hDevice, // 设备对象,它由CreateDevice函数创建 + PPCI8622_PARA_AD pADPara); // 硬件参数, 它仅在此函数中决定硬件状态 + + BOOL DEVAPI FAR PASCAL PCI8622_StartDeviceProAD( // 在初始化之后,启动设备 + HANDLE hDevice); // 设备对象句柄,它由CreateDevice函数创建 + + BOOL DEVAPI FAR PASCAL PCI8622_ReadDeviceProAD_Npt( // 当AD标志有效时,用此函数读取设备上的AD数据(程序非空方式) + HANDLE hDevice, // 设备句柄,它由CreateDevice函数创建 + WORD ADBuffer[], // 接受原始AD数据的用户缓冲区 + LONG nReadSizeWords, // 相对于偏位点后读入的数据长度(字) + PLONG nRetSizeWords); // 返回实际读取的长度(字) + + BOOL DEVAPI FAR PASCAL PCI8622_GetDevStatusProAD( // 在AD采样过程中取得设备的各种状态,返回值表示函数是否成功 + HANDLE hDevice, // 设备句柄,它由CreateDevice函数创建 + PPCI8622_STATUS_AD pADStatus); // AD的各种信息结构体 + + BOOL DEVAPI FAR PASCAL PCI8622_ReadDeviceProAD_Half( // 当AD标志有效时,用此函数读取设备上的AD数据(程序半满方式) + HANDLE hDevice, // 设备句柄,它由CreateDevice函数创建 + WORD ADBuffer[], // 接受原始AD数据的用户缓冲区 + LONG nReadSizeWords, // 相对于偏位点后读入的数据长度(字) + PLONG nRetSizeWords); // 返回实际读取的长度(字) + + BOOL DEVAPI FAR PASCAL PCI8622_StopDeviceProAD( // 在启动设备之后,暂停设备 + HANDLE hDevice); // 设备对象句柄,它由CreateDevice函数创建 + + BOOL DEVAPI FAR PASCAL PCI8622_ReleaseDeviceProAD( // 关闭AD设备,禁止传输,且释放资源 + HANDLE hDevice); // 设备句柄,它由CreateDevice函数创建 + + //##################### AD数据读取函数(DMA方式)(上层用户函数) ########################### + // AD直接内存(DMA)方式函数 + BOOL DEVAPI FAR PASCAL PCI8622_InitDeviceDmaAD( // 初始化设备,当返回TRUE后,设备即准备就绪. + HANDLE hDevice, // 设备对象,它由CreateDevice函数创建 + HANDLE hDmaEvent, // DMA事件句柄,它由CreateSystemEvent创建 + WORD ADBuffer[], // 用户缓冲区,最好为两维数组 + LONG nReadSizeWords, // 每次DMA时,用户从指定缓冲应读取的实际长度(要小于或等于nSegmentSizeWords) + LONG nSegmentCount, // 缓冲分段的数量,取值范围为2-64 + LONG nSegmentSizeWords, // 缓冲区分段的段长(必须等于FIFO半满长度) + PPCI8622_PARA_AD pADPara); // 硬件参数, 它仅在此函数中决定硬件状态 + + BOOL DEVAPI FAR PASCAL PCI8622_StartDeviceDmaAD( // 在初始化之后,启动设备 + HANDLE hDevice); // 设备对象句柄,它由CreateDevice函数创建 + + BOOL DEVAPI FAR PASCAL PCI8622_GetDevStatusDmaAD( // 在AD采样过程中取得DMA的有关状态,返回值表示函数是否成功 + HANDLE hDevice, // 设备句柄,它由CreateDevice函数创建 + PPCI8622_STATUS_DMA pDMAStatus); // 获得的DMA工作状态 + + BOOL DEVAPI FAR PASCAL PCI8622_SetDevStatusDmaAD( // 在AD采样过程中设置DMA的有关状态,返回值表示函数是否成功 + HANDLE hDevice, // 设备句柄,它由CreateDevice函数创建 + LONG iClrBufferID); // 要清除的缓冲区ID,将其置为0 + + BOOL DEVAPI FAR PASCAL PCI8622_StopDeviceDmaAD( // 在启动设备之后,暂停设备 + HANDLE hDevice); // 设备对象句柄,它由CreateDevice函数创建 + + BOOL DEVAPI FAR PASCAL PCI8622_ReleaseDeviceDmaAD( // 关闭AD设备,禁止传输,且释放资源 + HANDLE hDevice); // 设备句柄,它由CreateDevice函数创建 + + //##################### AD的硬件参数操作函数 ########################### + BOOL DEVAPI FAR PASCAL PCI8622_SaveParaAD(HANDLE hDevice, PPCI8622_PARA_AD pADPara); // 将当前的AD采样参数保存至系统中 + BOOL DEVAPI FAR PASCAL PCI8622_LoadParaAD(HANDLE hDevice, PPCI8622_PARA_AD pADPara); // 将AD采样参数从系统中读出 + BOOL DEVAPI FAR PASCAL PCI8622_ResetParaAD(HANDLE hDevice, PPCI8622_PARA_AD pADPara); // 将AD采样参数恢复至出厂默认值 + + //####################### 计数器与定时器操作函数 ######################### + BOOL DEVAPI FAR PASCAL PCI8622_InitDeviceCNT( // 初始化各路计数/定时器 + HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 + PPCI8622_PARA_CNT pCNTPara); + + ULONG DEVAPI FAR PASCAL PCI8622_SetLCLKFreqCNT( // 设置本地时钟频率(LCLK=Local Clock),返回实际的分频数 + HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 + double Frequency); // 时钟频率值 + + BOOL DEVAPI FAR PASCAL PCI8622_SetDeviceCNT( // 设置计数器的初值 + HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 + ULONG CNTVal, // 计数初值, COUNTER: 计数初值,TIMER:延时初始脉冲宽度(16位) + ULONG WidthVal); // 宽度初值, COUNTER: 无效, TIMER:输出脉冲宽度(16位) + + BOOL DEVAPI FAR PASCAL PCI8622_GetDeviceCNT( // 取得各路计数器的当前计数值 + HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 + PULONG pCNTVal, // 返回计数值 + PULONG pWidthVal); // 返回宽度值 + + BOOL DEVAPI FAR PASCAL PCI8622_GetDevStatusCNT( // 获得计数器状态 + HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 + PBOOL bOverflow, // 获得的计数器溢出标志, =TRUE:表示计数器已溢出, =FALSE:表示未溢出 + PBOOL bBufferRefresh, // 获得的计数器缓冲更新标志, =TRUE:表示缓冲已被更新, =FALSE:表示未更新 + PBOOL bBufferLost); // 获得的计数器缓冲丢失标志, =TRUE:表示缓冲已被丢失, =FALSE:表示未丢失 + + BOOL DEVAPI FAR PASCAL PCI8622_ClrDevStatusCNT( // 清除计数器状态 + HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 + BOOL bOverflow, // 是否清除计数器溢出标志, =TRUE:表示清除, =FALSE:表示不清除 + BOOL bBufferRefresh, // 是否清除计数器缓冲更新标志, =TRUE:表示清除, =FALSE:表示不清除 + BOOL bBufferLost); // 是否清除计数器缓冲丢失标志, =TRUE:表示清除, =FALSE:表示不清除 + + BOOL DEVAPI FAR PASCAL PCI8622_ReleaseDeviceCNT( // 释放和停止计数/定时器 + HANDLE hDevice); // 设备对象句柄,它由CreateDevice函数创建 + + //####################### 数字I/O输入输出函数 ################################# + // 用户可以使用WriteRegisterULong和ReadRegisterULong等函数直接控制寄存器进行I/O + // 输入输出,但使用下面两个函数更省事,它不需要您关心寄存器分配和位操作等,而只 + // 需象VB等语言的属性操作那么简单地实现各开关量通道的控制。 + BOOL DEVAPI FAR PASCAL PCI8622_GetDeviceDI( // 取得数字量状态 + HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 + BYTE bDISts[16]); // 开关输入状态(注意: 必须定义为16个字节元素的数组) + + BOOL DEVAPI FAR PASCAL PCI8622_SetDeviceDO( // 输出数字量状态 + HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 + BYTE bDOSts[16]); // 开关输出状态(注意: 必须定义为16个字节元素的数组) + + BOOL DEVAPI FAR PASCAL PCI8622_RetDeviceDO( // 回读数字量输出状态 + HANDLE hDevice, // 设备句柄 + BYTE DISts[16]); // 获得开关输出状态(注意: 必须定义为16个字节元素的数组) + + //################# 内存映射寄存器直接操作及读写函数 ######################## + // 适用于用户对本设备更直接、更特殊、更低层、更复杂的控制。比如根据特殊的 + // 控制对象需要特殊的控制流程和控制效率时,则用户可以使用这些接口予以实现。 + BOOL DEVAPI FAR PASCAL PCI8622_GetDeviceBar( // 取得指定的指定设备寄存器组BAR地址 + HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 + PUCHAR pbPCIBar[6]); // 返回PCI BAR所有地址,具体PCI BAR中有多少可用地址请看硬件说明书 + BOOL DEVAPI FAR PASCAL PCI8622_WriteRegisterByte( // 往设备的映射寄存器空间指定端口写入单节字数据 + HANDLE hDevice, // 设备对象 + PUCHAR pbLinearAddr, // 指定映射寄存器的线性基地址 + ULONG OffsetBytes, // 相对于基地址的偏移位置 + BYTE Value); // 往指定地址写入单字节数据(其地址由线性基地址和偏移位置决定) + BOOL DEVAPI FAR PASCAL PCI8622_WriteRegisterWord( // 写双字节数据(其余同上) + HANDLE hDevice, + PUCHAR pbLinearAddr, // 指定映射寄存器的线性基地址 + ULONG OffsetBytes, + WORD Value); + BOOL DEVAPI FAR PASCAL PCI8622_WriteRegisterULong( // 写四节字数据(其余同上) + HANDLE hDevice, + PUCHAR pbLinearAddr, // 指定映射寄存器的线性基地址 + ULONG OffsetBytes, + ULONG Value); + BYTE DEVAPI FAR PASCAL PCI8622_ReadRegisterByte( // 读入单字节数据(其余同上) + HANDLE hDevice, + PUCHAR pbLinearAddr, // 指定映射寄存器的线性基地址 + ULONG OffsetBytes); + WORD DEVAPI FAR PASCAL PCI8622_ReadRegisterWord( // 读入双字节数据(其余同上) + HANDLE hDevice, + PUCHAR pbLinearAddr, // 指定映射寄存器的线性基地址 + ULONG OffsetBytes); + ULONG DEVAPI FAR PASCAL PCI8622_ReadRegisterULong( // 读入四字节数据(其余同上) + HANDLE hDevice, + PUCHAR pbLinearAddr, // 指定映射寄存器的线性基地址 + ULONG OffsetBytes); + + //################# I/O端口直接操作及读写函数 ######################## + // 适用于用户对本设备更直接、更特殊、更低层、更复杂的控制。比如根据特殊的 + // 控制对象需要特殊的控制流程和控制效率时,则用户可以使用这些接口予以实现。 + // 但这些函数主要适用于传统设备,如ISA总线、并口、串口等设备,不能用于本PCI设备 + BOOL DEVAPI FAR PASCAL PCI8622_WritePortByte(HANDLE hDevice, PUCHAR pbPort, ULONG offserBytes, BYTE Value); + BOOL DEVAPI FAR PASCAL PCI8622_WritePortWord(HANDLE hDevice, PUCHAR pbPort, ULONG offserBytes, WORD Value); + BOOL DEVAPI FAR PASCAL PCI8622_WritePortULong(HANDLE hDevice, PUCHAR pbPort, ULONG offserBytes, ULONG Value); + + BYTE DEVAPI FAR PASCAL PCI8622_ReadPortByte(HANDLE hDevice, PUCHAR pbPort, ULONG offserBytes); + WORD DEVAPI FAR PASCAL PCI8622_ReadPortWord(HANDLE hDevice, PUCHAR pbPort, ULONG offserBytes); + ULONG DEVAPI FAR PASCAL PCI8622_ReadPortULong(HANDLE hDevice, PUCHAR pbPort, ULONG offserBytes); + + //########################### 附加操作函数 ###################################### + HANDLE DEVAPI FAR PASCAL PCI8622_CreateSystemEvent(void); // 创建内核事件对象,供InitDeviceInt和VB子线程等函数使用 + BOOL DEVAPI FAR PASCAL PCI8622_ReleaseSystemEvent(HANDLE hEvent); // 释放内核事件对象 + +#ifdef __cplusplus +} +#endif +#endif // _PCI8622_DEVICE_ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/ART/PCI8622_32.lib b/PcDmis/Base/Interfac/Msi/Hsi/ART/PCI8622_32.lib new file mode 100644 index 0000000..2c5ca8e Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/ART/PCI8622_32.lib differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/ART/PCI8622_64.lib b/PcDmis/Base/Interfac/Msi/Hsi/ART/PCI8622_64.lib new file mode 100644 index 0000000..4473e9a Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/ART/PCI8622_64.lib differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Keyence/LkIF.lib b/PcDmis/Base/Interfac/Msi/Hsi/Keyence/LkIF.lib new file mode 100644 index 0000000..c80ff63 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/Keyence/LkIF.lib differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Release/UtilityDebug.Log b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Release/UtilityDebug.Log index 2bd3a11..db786d1 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Release/UtilityDebug.Log +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Release/UtilityDebug.Log @@ -148,3 +148,4 @@ Init:Open device succeed . _start_machine Exit: Exit_SO7Usb Destruct Cso7_Proto. +Usb Port Initialized. diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc index 1377992..bd1ba4d 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc @@ -395,31 +395,32 @@ BEGIN EDITTEXT IDC_EDIT_ZOOM_TIME,14,159,112,112,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL END -IDD_SO7_OPTION_DIALOG DIALOGEX 0, 0, 278, 198 +IDD_SO7_OPTION_DIALOG DIALOGEX 0, 0, 317, 169 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Utility for SO7" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - CONTROL "SDK3000视频卡",IDC_RADIO_VIDEOCARD_SDK3000,"Button",BS_AUTORADIOBUTTON | WS_GROUP,39,39,69,10 - CONTROL "SV2000E视频卡",IDC_RADIO_VIDEOCARD_SV2000E,"Button",BS_AUTORADIOBUTTON,39,55,69,10 - CONTROL "SV4000E视频卡",IDC_RADIO_VIDEOCARD_SV4000E,"Button",BS_AUTORADIOBUTTON,39,71,68,10 - CONTROL "TC4000视频卡",IDC_RADIO_VIDEOCARD_TC4000,"Button",BS_AUTORADIOBUTTON,39,87,69,10 - CONTROL "IP Camera",IDC_RADIO_SO7_IP_CAMERA,"Button",BS_AUTORADIOBUTTON,39,103,62,10 - CONTROL "USB Camera",IDC_RADIO_SO7_USB_CAMERA,"Button",BS_AUTORADIOBUTTON,39,119,62,10 - CONTROL "控制器(USB)",IDC_RADIO_CONTROLLER,"Button",BS_AUTORADIOBUTTON,166,39,69,10 - CONTROL "控制器(RS232)",IDC_RADIO__SO7_RS232,"Button",BS_AUTORADIOBUTTON,166,71,77,10 - CONTROL "LK_G激光",IDC_RADIO_KEYENCE_LASER,"Button",BS_AUTORADIOBUTTON,166,87,76,10 - CONTROL "LK_H激光(USB)",IDC_RADIO_KEYENCE_LASER_LK_H,"Button",BS_AUTORADIOBUTTON,166,103,76,10 + CONTROL "SDK3000视频卡",IDC_RADIO_VIDEOCARD_SDK3000,"Button",BS_AUTORADIOBUTTON | WS_GROUP,34,39,69,10 + CONTROL "SV2000E视频卡",IDC_RADIO_VIDEOCARD_SV2000E,"Button",BS_AUTORADIOBUTTON,34,55,69,10 + CONTROL "SV4000E视频卡",IDC_RADIO_VIDEOCARD_SV4000E,"Button",BS_AUTORADIOBUTTON,34,71,68,10 + CONTROL "TC4000视频卡",IDC_RADIO_VIDEOCARD_TC4000,"Button",BS_AUTORADIOBUTTON,34,87,69,10 + CONTROL "IP Camera",IDC_RADIO_SO7_IP_CAMERA,"Button",BS_AUTORADIOBUTTON,34,103,62,10 + CONTROL "USB Camera",IDC_RADIO_SO7_USB_CAMERA,"Button",BS_AUTORADIOBUTTON,34,119,62,10 + CONTROL "控制器(USB)",IDC_RADIO_CONTROLLER,"Button",BS_AUTORADIOBUTTON,211,38,69,10 + CONTROL "控制器(RS232)",IDC_RADIO__SO7_RS232,"Button",BS_AUTORADIOBUTTON,211,70,77,10 + CONTROL "LK_G激光",IDC_RADIO_KEYENCE_LASER,"Button",BS_AUTORADIOBUTTON,114,39,76,10 + CONTROL "LK_H激光(USB)",IDC_RADIO_KEYENCE_LASER_LK_H,"Button",BS_AUTORADIOBUTTON,114,55,76,10 CONTROL "LK_H激光(ETHERNET)",IDC_RADIO_KEYENCE_LASER_LKH_ETHERNET, - "Button",BS_AUTORADIOBUTTON,166,119,85,10 - CONTROL "LJ_G激光",IDC_RADIO_KEYENCE_LASER3,"Button",BS_AUTORADIOBUTTON,166,135,76,10 + "Button",BS_AUTORADIOBUTTON,114,71,85,10 + CONTROL "LJ_G激光",IDC_RADIO_KEYENCE_LASER3,"Button",BS_AUTORADIOBUTTON,114,87,76,10 CONTROL "Verifcation algorithm",IDC_RADIO_SO7_VERIFICATION_ALGORITHM, - "Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,39,135,81,10 - CONTROL "Image.dll",IDC_RADIO_TEST_IMAGE_DLL,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,39,151,45,10 - DEFPUSHBUTTON "OK",IDOK,163,177,50,14 - PUSHBUTTON "Cancel",IDCANCEL,221,177,50,14 - GROUPBOX "测试选项",IDC_STATIC,20,15,242,157 - CONTROL "控制器(USB R)",IDC_RADIO_CONTROLLER2,"Button",BS_AUTORADIOBUTTON,166,55,75,10 + "Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,8,152,81,10 + CONTROL "Image.dll",IDC_RADIO_TEST_IMAGE_DLL,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,7,152,45,10 + DEFPUSHBUTTON "OK",IDOK,191,148,50,14 + PUSHBUTTON "Cancel",IDCANCEL,260,148,50,14 + GROUPBOX "测试选项",IDC_STATIC,20,15,280,123 + CONTROL "控制器(USB R)",IDC_RADIO_CONTROLLER2,"Button",BS_AUTORADIOBUTTON,211,54,75,10 + CONTROL "ART PCI8822",IDC_RADIO_ART_PCI8622,"Button",BS_AUTORADIOBUTTON,114,103,76,10 END IDD_SO7_VIDEOCARD_SDK3000 DIALOGEX 0, 0, 488, 316 @@ -941,6 +942,20 @@ BEGIN CONTROL "Abs",IDC_RADIO_R2_ABSOLUTE,"Button",BS_AUTORADIOBUTTON,66,213,28,8 END +IDD_SO7_ART_PCI8622 DIALOGEX 0, 0, 403, 284 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "ART PCI8622" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + PUSHBUTTON "Exit",IDCANCEL,347,264,50,14 + PUSHBUTTON "Start",IDC_BUTTON_ART_PCI8622_START,29,41,50,14 + PUSHBUTTON "Stop",IDC_BUTTON_ART_PCI8622_STOP,98,41,50,14 + EDITTEXT IDC_EDIT_ART_PCI8622_LOG,20,88,326,161,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL + PUSHBUTTON "Clear all",IDC_BUTTON_ART_PCI8622_CLEAR_LOG,351,170,38,14 + PUSHBUTTON "Read",IDC_BUTTON_ART_PCI8622_READ_DATA,167,41,50,14 + GROUPBOX "Machine",-1,20,15,325,65 +END + ///////////////////////////////////////////////////////////////////////////// // @@ -976,9 +991,9 @@ BEGIN IDD_SO7_OPTION_DIALOG, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 271 + RIGHTMARGIN, 310 TOPMARGIN, 6 - BOTTOMMARGIN, 191 + BOTTOMMARGIN, 162 END IDD_SO7_VIDEOCARD_SDK3000, DIALOG @@ -1096,6 +1111,14 @@ BEGIN TOPMARGIN, 7 BOTTOMMARGIN, 244 END + + IDD_SO7_ART_PCI8622, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 396 + TOPMARGIN, 7 + BOTTOMMARGIN, 277 + END END #endif // APSTUDIO_INVOKED diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Art_PCI8622.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Art_PCI8622.cpp new file mode 100644 index 0000000..39fbd4f --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Art_PCI8622.cpp @@ -0,0 +1,56 @@ +// So7_Art_PCI8622.cpp : implementation file +// + +#include "stdafx.h" +#include "resource.h" +#include "..\..\..\ART\ART_PCI8622.h" +#include "So7_Art_PCI8622.h" +#include "afxdialogex.h" + +extern CART_PCI8622* m_pART_PCI8622; +// CSo7_Art_PCI8622 dialog + +IMPLEMENT_DYNAMIC(CSo7_Art_PCI8622, CDialog) + +CSo7_Art_PCI8622::CSo7_Art_PCI8622(CWnd* pParent /*=NULL*/) + : CDialog(CSo7_Art_PCI8622::IDD, pParent) +{ + +} + +CSo7_Art_PCI8622::~CSo7_Art_PCI8622() +{ +} + +void CSo7_Art_PCI8622::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + + +BEGIN_MESSAGE_MAP(CSo7_Art_PCI8622, CDialog) + ON_BN_CLICKED(IDC_BUTTON_ART_PCI8622_READ_DATA, &CSo7_Art_PCI8622::OnBnClickedButtonArtPci8622ReadData) + ON_BN_CLICKED(IDC_BUTTON_ART_PCI8622_CLEAR_LOG, &CSo7_Art_PCI8622::OnBnClickedButtonArtPci8622ClearLog) + ON_BN_CLICKED(IDCANCEL, &CSo7_Art_PCI8622::OnBnClickedCancel) +END_MESSAGE_MAP() + + +// CSo7_Art_PCI8622 message handlers + + +void CSo7_Art_PCI8622::OnBnClickedButtonArtPci8622ReadData() +{ + m_pART_PCI8622->GetData(); +} + + +void CSo7_Art_PCI8622::OnBnClickedButtonArtPci8622ClearLog() +{ + // TODO: Add your control notification handler code here +} + + +void CSo7_Art_PCI8622::OnBnClickedCancel() +{ + CDialog::OnCancel(); +} diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Art_PCI8622.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Art_PCI8622.h new file mode 100644 index 0000000..e85506d --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Art_PCI8622.h @@ -0,0 +1,25 @@ +#pragma once + + +// CSo7_Art_PCI8622 dialog + +class CSo7_Art_PCI8622 : public CDialog +{ + DECLARE_DYNAMIC(CSo7_Art_PCI8622) + +public: + CSo7_Art_PCI8622(CWnd* pParent = NULL); // standard constructor + virtual ~CSo7_Art_PCI8622(); + +// Dialog Data + enum { IDD = IDD_SO7_ART_PCI8622 }; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + + DECLARE_MESSAGE_MAP() +public: + afx_msg void OnBnClickedButtonArtPci8622ReadData(); + afx_msg void OnBnClickedButtonArtPci8622ClearLog(); + afx_msg void OnBnClickedCancel(); +}; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp index 6f2d5e1..668105b 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp @@ -34,6 +34,10 @@ #include "KeyenceLKH_Dlg.h" #include "Keyence_LKG5000_Ethernet.h" +#include "..\..\..\ART\ART_PCI8622.h" +#include "So7_Art_PCI8622.h" + + #include "..\..\..\SevenOcean\dll.h" #include "..\..\..\SevenOcean\So7_Interface.h" #include "So7_Util_ImageDll.h" @@ -61,6 +65,7 @@ CSo7_Interface* m_pSo7_Interface=NULL; CEF8000_Interface* m_pEF8000_Interface=NULL; CXBOXController* XBoxPlayer =NULL; +CART_PCI8622* m_pART_PCI8622=NULL; // CSo7_Option dialog IMPLEMENT_DYNAMIC(CSo7_Option, CDialog) @@ -86,6 +91,7 @@ BEGIN_MESSAGE_MAP(CSo7_Option, CDialog) ON_WM_TIMER() ON_BN_CLICKED(IDOK, &CSo7_Option::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &CSo7_Option::OnBnClickedCancel) + ON_BN_CLICKED(IDC_RADIO_ART_PCI8622, &CSo7_Option::OnBnClickedRadioArtPci8622) END_MESSAGE_MAP() @@ -125,7 +131,8 @@ BOOL CSo7_Option::OnInitDialog() ((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_VERIFICATION_ALGORITHM))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_TEST_IMAGE_DLL))->SetCheck(FALSE); - + ((CButton *)GetDlgItem(IDC_RADIO_ART_PCI8622))->SetCheck(FALSE); + #ifdef _RELEASE_SO7_CONTROLER_ONLY ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SDK3000))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV2000E))->EnableWindow(FALSE); @@ -139,6 +146,7 @@ BOOL CSo7_Option::OnInitDialog() ((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER3))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_VERIFICATION_ALGORITHM))->EnableWindow(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_TEST_IMAGE_DLL))->EnableWindow(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_ART_PCI8622))->EnableWindow(FALSE); #endif #ifdef _RELEASE_ONLY_ONE_FUNCTION @@ -323,6 +331,21 @@ void CSo7_Option::OnBnClickedOk() delete m_pKeyence_Laser_LK_H; m_pKeyence_Laser_LK_H=NULL; } + else if(((CButton *)GetDlgItem(IDC_RADIO_ART_PCI8622))->GetCheck()) + { + if (!m_pART_PCI8622) + { + m_pART_PCI8622=new CART_PCI8622(); + } + + CSo7_Art_PCI8622* pSo7_Art_PCI8622=new CSo7_Art_PCI8622(); + pSo7_Art_PCI8622->DoModal(); + delete pSo7_Art_PCI8622; + pSo7_Art_PCI8622=nullptr; + + delete m_pART_PCI8622; + m_pART_PCI8622=NULL; + } else if (((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SDK3000))->GetCheck()) { #ifdef _RELEASE_FULL_VERSION @@ -402,3 +425,9 @@ void CSo7_Option::OnTimer(UINT_PTR nIDEvent) } CDialog::OnTimer(nIDEvent); } + + +void CSo7_Option::OnBnClickedRadioArtPci8622() +{ + // TODO: Add your control notification handler code here +} diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.h index 7db5a5d..b40304f 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.h @@ -23,4 +23,5 @@ public: afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedCancel(); afx_msg void OnTimer(UINT_PTR nIDEvent); + afx_msg void OnBnClickedRadioArtPci8622(); }; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj index c569da6..8dfb21a 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj @@ -145,7 +145,7 @@ $(IntDir);%(AdditionalIncludeDirectories) - ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;..\..\..\Videocard\SV4000E\dataAcq.lib;..\..\..\Videocard\SV4000E\DXMediaCap.lib;%(AdditionalDependencies) + ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;..\..\..\Videocard\SV4000E\dataAcq.lib;..\..\..\Videocard\SV4000E\DXMediaCap.lib;..\..\..\ART\PCI8622_32.lib;%(AdditionalDependencies) true Windows MachineX86 @@ -206,7 +206,7 @@ true true MachineX86 - ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\SV2000E\dataAcq.lib;..\..\..\Videocard\SV2000E\DXMediaCap.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;%(AdditionalDependencies) + ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\SV2000E\dataAcq.lib;..\..\..\Videocard\SV2000E\DXMediaCap.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;..\..\..\ART\PCI8622_32.lib;%(AdditionalDependencies) @@ -303,6 +303,7 @@ + @@ -351,6 +352,7 @@ + @@ -383,6 +385,8 @@ + + @@ -435,6 +439,7 @@ + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters index 6d0cad1..44414b2 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters @@ -202,6 +202,12 @@ Sources Files + + Sources Files + + + Sources Files + @@ -438,6 +444,15 @@ Header Files + + Header Files + + + Header Files + + + Header Files + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h index 26f423e..675709d 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h @@ -718,6 +718,7 @@ #define IDC_EDIT_TEST_KEYENCE_MESSAGE 1591 #define IDC_RADIO_KEYENCE_LASER3 1591 #define IDC_RADIO_MACHINE_KEYENCE_TM3000 1592 +#define IDC_RADIO_ART_PCI8622 1592 #define IDC_BUTTON_GET_SCAN_DATA_KEYENCE_LK_HLASER 1593 #define IDC_RADIO_KEYENCE_LASER_LK_H 1594 #define IDC_RADIO_TEST_IMAGE_DLL 1595 @@ -850,6 +851,7 @@ #define IDD_SO7_VIDEOCARD_TC4000 1718 #define IDD_DIALOG_KEYENCE_LKG5000 1719 #define IDD_SO7_UTIL_SETUP_SO7_CONFIG_MOTION 1720 +#define IDD_SO7_ART_PCI8622 1721 #define IDC_RADIO_SPEED_SLOW 1770 #define IDC_RADIO_SCALE 1772 #define IDC_EDIT_SPEED_X 1773 @@ -962,11 +964,15 @@ #define IDC_STATIC_IO_ADDR5 1841 #define IDC_STATIC_IO_ADDR6 1842 #define IDC_BUTTON_START_SO7_R_MACHINE 1843 +#define IDC_BUTTON_ART_PCI8622_START 1843 #define IDC_BUTTON_STOP_SO7_R_MACHINE 1844 +#define IDC_BUTTON_ART_PCI8622_STOP 1844 #define IDC_BUTTON_R1_HOME 1845 +#define IDC_BUTTON_ART_PCI8622_READ_DATA 1845 #define IDC_CHECK_SO7_R1_ENABLE 1846 +#define IDC_EDIT_ART_PCI8622_LOG 1846 #define IDC_EDIT_R1_CURRENT_POSITION 1847 - +#define IDC_BUTTON_ART_PCI8622_CLEAR_LOG 1847 #define IDC_BUTTON_DIY_EXIT_BUTTON 32740 #define ID_EDIT_SO7_CONFIG_MOTION 32741 @@ -976,7 +982,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 191 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1843 +#define _APS_NEXT_CONTROL_VALUE 1848 #define _APS_NEXT_SYMED_VALUE 104 #endif #endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo index 5cbc5f8..a42d939 100644 Binary files a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo and b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/DXMediaCap.lib b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/DXMediaCap.lib new file mode 100644 index 0000000..18a296b Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/DXMediaCap.lib differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/dataAcq.lib b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/dataAcq.lib new file mode 100644 index 0000000..a45ff99 Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV4000E/dataAcq.lib differ