dasync.c
来自「16 relay output channels and 16 isolated」· C语言 代码 · 共 1,096 行 · 第 1/3 页
C
1,096 行
DRV_DeviceClose((LONG far *)&DriverHandle);
DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
MessageBox(hMainWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
return 0;
}
MaxAOChanNum = devf.usMaxAOChl;
//mining add because this example only support 8 channels
if ( MaxAOChanNum > 8 ) {
MaxAOChanNum = 8;
}
//mining end
DRV_DeviceClose((LONG far *)&DriverHandle);
//
// Initialize Output Channel
//
itoa(gwChannel, szBuffer, 10);
SendDlgItemMessage(hDlg, IDC_ECHANNEL, EM_REPLACESEL, 0,
(LPARAM)((LPSTR)szBuffer));
if(gwSyncEnable)
{
CheckDlgButton(hDlg,IDC_SYNCENABLE,TRUE);
for(i=0;i<8;i++)
{
EnableWindow(GetDlgItem(hDlg,(IDC_ASYNCCH0+i)),FALSE);
if (i < MaxAOChanNum)
EnableWindow(GetDlgItem(hDlg,(IDC_CH0ENABLE+i)),TRUE);
else
EnableWindow(GetDlgItem(hDlg,(IDC_CH0ENABLE+i)),FALSE);
}
}
else
{
CheckDlgButton(hDlg,IDC_SYNCENABLE,FALSE);
for(i=0;i<8;i++)
{
if (i < MaxAOChanNum)
EnableWindow(GetDlgItem(hDlg,(IDC_ASYNCCH0+i)),TRUE);
else
EnableWindow(GetDlgItem(hDlg,(IDC_ASYNCCH0+i)),FALSE);
EnableWindow(GetDlgItem(hDlg,(IDC_CH0ENABLE+i)),FALSE);
}
CheckDlgButton(hDlg,(IDC_ASYNCCH0+gwAsyncEnableCh),TRUE);
}
for(i=0;i<MaxAOChanNum;i++)
if(gwSyncEnableCh[i])
CheckDlgButton(hDlg,(IDC_CH0ENABLE + i),TRUE);
else
CheckDlgButton(hDlg,(IDC_CH0ENABLE + i),FALSE);
CheckDlgButton(hDlg,(IDC_KIND0+OutputKind),TRUE);
return TRUE;
case WM_COMMAND :
switch (LOWORD(wParam))
{
case IDOK :
//
// get device selection
//
if ((dwIndex = SendDlgItemMessage(hDlg, IDC_DEVICE,
CB_GETCURSEL, 0, 0)) != CB_ERR)
gwDevice = (WORD)dwIndex;
//
// get sub-device selection
//
if ((dwIndex = SendDlgItemMessage(hDlg, IDC_MODULE,
CB_GETCURSEL, 0, 0)) != CB_ERR)
gwSubDevice = (WORD)dwIndex;
//
// get channel number
//
if (SendDlgItemMessage(hDlg, IDC_ECHANNEL,
EM_GETMODIFY, 0, 0))
{
SendDlgItemMessage(hDlg, IDC_ECHANNEL,
WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
gwChannel = atoi(szBuffer);
SendDlgItemMessage(hDlg, IDC_ECHANNEL,
EM_SETMODIFY, FALSE, 0) ;
}
if(IsDlgButtonChecked(hDlg,IDC_SYNCENABLE))
gwSyncEnable = 1;
else
gwSyncEnable = 0;
//for(i=0;i<MaxAOChanNum;i++)
for(i=0;i<8;i++)
if(IsDlgButtonChecked(hDlg,(IDC_CH0ENABLE + i)))
gwSyncEnableCh[i] = 1;
else
gwSyncEnableCh[i] = 0;
//for(i=0;i<MaxAOChanNum;i++)
for(i=0;i<8;i++)
if(IsDlgButtonChecked(hDlg,(IDC_ASYNCCH0+i)))
gwAsyncEnableCh = i;
for(i=0;i<3;i++)
if(IsDlgButtonChecked(hDlg,(IDC_KIND0+i)))
{
OutputKind = i;
break;
}
// for PCI-1720, the precondition of current out is voltage range
// is set to 0 ~ 5V
if((OutputKind != 0) &&
(strstr(DeviceList[gwDevice].szDeviceName, "PCI-1720") != NULL))
{
// Open Device
if (gnNumOfSubdevices == 0)
ErrCde = DRV_DeviceOpen(
DeviceList[gwDevice].dwDeviceNum,
(LONG far *)&DriverHandle);
else
ErrCde = DRV_DeviceOpen(
SubDeviceList[gwSubDevice].dwDeviceNum,
(LONG far *)&DriverHandle);
if (ErrCde != SUCCESS)
{
strcpy(szErrMsg,"Device open error !");
MessageBox(hMainWnd,(LPCSTR)szErrMsg,"Device Open",MB_OK);
return 0;
}
// get device AO settings
size = MaxAOChanNum * sizeof (AOSET);
ptDevGetPar.nID = AO_RANGE_SETTING;
ptDevGetPar.pData = malloc(size);
ptDevGetPar.Length = & size;
if((ErrCde = DRV_DeviceGetParam(DriverHandle, &ptDevGetPar)) != SUCCESS)
{
DRV_DeviceClose((LONG far *)&DriverHandle);
free(ptDevGetPar.pData);
DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
MessageBox(hMainWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
return 0;
}
// Close Device
DRV_DeviceClose((LONG far *)&DriverHandle);
// check device AO settings
lpAosetting = (LPAOSET) ptDevGetPar.pData;
if(gwSyncEnable)
{
for(i = 0; i < MaxAOChanNum; i++)
{
if(gwSyncEnableCh[i] &&
((lpAosetting[i].fAOMaxVol != 5) || (lpAosetting[i].fAOMinVol != 0)))
{
free(ptDevGetPar.pData);
sprintf(errtitle1720, "Error: Channel %d", i);
MessageBox(hMainWnd, errmsg1720, errtitle1720, MB_OK);
return 0;
}
}
}
else
{
if((lpAosetting[gwAsyncEnableCh].fAOMaxVol != 5) ||
(lpAosetting[gwAsyncEnableCh].fAOMinVol != 0))
{
free(ptDevGetPar.pData);
sprintf(errtitle1720, "Error: Channel %d", gwAsyncEnableCh);
MessageBox(hMainWnd, errmsg1720, errtitle1720, MB_OK);
return 0;
}
}
free(ptDevGetPar.pData);
}
EndDialog(hDlg, 0);
return TRUE;
case IDC_SYNCENABLE :
if(IsDlgButtonChecked(hDlg,IDC_SYNCENABLE))
for(i=0;i<8;i++)//changping
{
EnableWindow(GetDlgItem(hDlg,(IDC_ASYNCCH0+i)),FALSE);
if (i < MaxAOChanNum)
EnableWindow(GetDlgItem(hDlg,(IDC_CH0ENABLE+i)),TRUE);
else
EnableWindow(GetDlgItem(hDlg,(IDC_CH0ENABLE+i)),FALSE);
}
else
{
for(i=0;i<8;i++)
{
if (i < MaxAOChanNum)
EnableWindow(GetDlgItem(hDlg,(IDC_ASYNCCH0+i)),TRUE);
else
EnableWindow(GetDlgItem(hDlg,(IDC_ASYNCCH0+i)),FALSE);
EnableWindow(GetDlgItem(hDlg,(IDC_CH0ENABLE+i)),FALSE);
}
gwAsyncEnableCh = 0;
}
break;
case IDCANCEL :
EndDialog(hDlg, 0);
return TRUE;
case IDC_DEVICE :
//
// When device selection is changed, it needs to
// re-initialize sub-device combobox and input range
// combobox.
//
if (HIWORD(wParam) == CBN_SELCHANGE)
{
if ((dwIndex = SendDlgItemMessage(hDlg, IDC_DEVICE,
CB_GETCURSEL, 0, 0)) != CB_ERR)
gwDevice = (WORD)dwIndex;
else
return TRUE;
// ------------------------------------------------------
// Initialize Module Combobox for COM port or CAN devices
// ------------------------------------------------------
// check any device attached on this COM port or CAN
gnNumOfSubdevices = DeviceList[gwDevice].nNumOfSubdevices;
if (gnNumOfSubdevices > MAX_DEVICES)
gnNumOfSubdevices = MAX_DEVICES;
// retrieve the information of all installed devices
if (gnNumOfSubdevices != 0)
{
if ((ErrCde = DRV_DeviceGetSubList(
(DWORD)DeviceList[gwDevice].dwDeviceNum,
(DEVLIST far *)&SubDeviceList[0],
(SHORT)gnNumOfSubdevices,
(SHORT far *)&nOutEntries)) != (LONG)SUCCESS)
{
DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
MessageBox(hMainWnd, (LPCSTR)szErrMsg,
"Driver Message", MB_OK);
return TRUE;
}
// initialize the Module List Combobox with the
// retrieved information
EnableWindow(GetDlgItem(hDlg, IDC_MODULE), TRUE);
SendDlgItemMessage(hDlg, IDC_MODULE, CB_RESETCONTENT,
0, (LPARAM)((LPSTR)0));
for (i = 0; i < gnNumOfSubdevices; i++)
SendDlgItemMessage(hDlg, IDC_MODULE, CB_ADDSTRING, 0,
(LPARAM)((LPSTR)SubDeviceList[i].szDeviceName));
gwSubDevice = 0;
SendDlgItemMessage(hDlg, IDC_MODULE, CB_SETCURSEL,
(WPARAM)gwSubDevice, (LPARAM)0);
}
else
{
EnableWindow(GetDlgItem(hDlg, IDC_MODULE), FALSE);
SendDlgItemMessage(hDlg, IDC_MODULE, CB_RESETCONTENT,
0, (LPARAM)((LPSTR)0));
}
// Open Device
if (gnNumOfSubdevices == 0)
ErrCde = DRV_DeviceOpen(
DeviceList[gwDevice].dwDeviceNum,
(LONG far *)&DriverHandle);
else
ErrCde = DRV_DeviceOpen(
SubDeviceList[gwSubDevice].dwDeviceNum,
(LONG far *)&DriverHandle);
if (ErrCde != SUCCESS)
{
strcpy(szErrMsg,"Device open error !");
MessageBox(hMainWnd,(LPCSTR)szErrMsg,"Device Open",MB_OK);
return 0;
}
// get device features
ptDevGetFeat.buffer = &devf;
ptDevGetFeat.size = sizeof (DEVFEATURES);
if((ErrCde = DRV_DeviceGetFeatures(DriverHandle, &ptDevGetFeat)) != SUCCESS)
{
DRV_DeviceClose((LONG far *)&DriverHandle);
DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
MessageBox(hMainWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
return 0;
}
MaxAOChanNum = devf.usMaxAOChl;
//mining add because this example only support 8 channels
if ( MaxAOChanNum > 8 ) {
MaxAOChanNum = 8;
}
//mining end
DRV_DeviceClose((LONG far *)&DriverHandle);
//
// Initialize Output Channel
//
itoa(gwChannel, szBuffer, 10);
SendDlgItemMessage(hDlg, IDC_ECHANNEL, EM_REPLACESEL, 0,
(LPARAM)((LPSTR)szBuffer));
if(IsDlgButtonChecked(hDlg,IDC_SYNCENABLE))
{
CheckDlgButton(hDlg,IDC_SYNCENABLE,TRUE);
for(i=0;i<8;i++)
{
EnableWindow(GetDlgItem(hDlg,(IDC_ASYNCCH0+i)),FALSE);
if (i < MaxAOChanNum)
EnableWindow(GetDlgItem(hDlg,(IDC_CH0ENABLE+i)),TRUE);
else
EnableWindow(GetDlgItem(hDlg,(IDC_CH0ENABLE+i)),FALSE);
}
}
else
{
CheckDlgButton(hDlg,IDC_SYNCENABLE,FALSE);
for(i=0;i<8;i++)
{
if (i < MaxAOChanNum)
EnableWindow(GetDlgItem(hDlg,(IDC_ASYNCCH0+i)),TRUE);
else
EnableWindow(GetDlgItem(hDlg,(IDC_ASYNCCH0+i)),FALSE);
EnableWindow(GetDlgItem(hDlg,(IDC_CH0ENABLE+i)),FALSE);
}
}
}
return TRUE;
}
break;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?