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 + -
显示快捷键?