⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 formmain.pas

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 PAS
📖 第 1 页 / 共 2 页
字号:
          2 : optAsyncEnable2.Enabled := True;
          3 : optAsyncEnable3.Enabled := True;
          4 : optAsyncEnable4.Enabled := True;
          5 : optAsyncEnable5.Enabled := True;
          6 : optAsyncEnable6.Enabled := True;
          7 : optAsyncEnable7.Enabled := True;
        End
      Else
	Case i of
          0 : optAsyncEnable0.Enabled := False;
          1 : optAsyncEnable1.Enabled := False;
          2 : optAsyncEnable2.Enabled := False;
          3 : optAsyncEnable3.Enabled := False;
          4 : optAsyncEnable4.Enabled := False;
          5 : optAsyncEnable5.Enabled := False;
          6 : optAsyncEnable6.Enabled := False;
          7 : optAsyncEnable7.Enabled := False;
        End;
    End;
  End;
end;

procedure TfrmMain.cmdStartClick(Sender: TObject);
Var
  ptDevGetPar : PT_DeviceGetParam;
  aosetting : array of AOSET;
  size : Integer;
  errmsg1720 : string[100];
  errtitle1720 : string[20];
  errmsg1720_PChar : PChar;
  errtitle1720_PChar : PChar;
  i : Integer;
  s : Boolean;
begin
  errmsg1720_PChar := @(errmsg1720[1]);
  errmsg1720 := 'For PCI-1720, the precondition of current out is that voltage range is set to 0~5V'+char(0);
  errtitle1720_PChar := @(errtitle1720[1]);

  If optVoltageOut.Checked Then
  begin
    OutputValue[0] := 0.0;
    OutputValue[1] := 1.25;
    OutputValue[2] := 2.5;
    OutputValue[3] := 5.0;
  End;
  If optCurrentOut0.Checked Then
  begin
    OutputValue[0] := 1.0;
    OutputValue[1] := 5.0;
    OutputValue[2] := 10.0;
    OutputValue[3] := 20.0;
  End;
  If optCurrentOut4.Checked Then
  begin
    OutputValue[0] := 4.0;
    OutputValue[1] := 10.0;
    OutputValue[2] := 15.0;
    OutputValue[3] := 20.0;
  End;

  lErrCde := DRV_DeviceOpen( lDeviceNum, lDeviceHandle);
  If ( DoesErr(lErrCde) = 1 ) Then
    Exit;

  { for PCI-1720, the precondition of current out is voltage range is set to 0 ~ 5V }
  If (optVoltageOut.Checked <> True) And (Pos('PCI-1720', labDeviceName.Caption) <> 0) Then
  Begin
    { get device AO settings }
    ptDevGetPar.nID := AO_RANGE_SETTING;
    SetLength(aosetting, MaxAOChannel);
    ptDevGetPar.pData := @aosetting[0];
    ptDevGetPar.Length := Longint(@size);
    lErrCde := DRV_DeviceGetParam(lDeviceHandle, ptDevGetPar);
    If (lErrCde <> 0) Then
    Begin
      DRV_DeviceClose (lDeviceHandle);
      Exit;
    End;
    { check device AO settings }
    If (chkSyncAOEnable.Checked) Then
    Begin
      For i := 0 To MaxAOChannel - 1 Do
      Begin
        If ((aosetting[i].fAOMaxVol <> 5) Or (aosetting[i].fAOMinVol <> 0)) Then
        Begin
          s := False;
          Case i of
            0 : If chkSyncEnable0.Checked Then s := True;
            1 : If chkSyncEnable1.Checked Then s := True;
            2 : If chkSyncEnable2.Checked Then s := True;
            3 : If chkSyncEnable3.Checked Then s := True;
            4 : If chkSyncEnable4.Checked Then s := True;
            5 : If chkSyncEnable5.Checked Then s := True;
            6 : If chkSyncEnable6.Checked Then s := True;
            7 : If chkSyncEnable7.Checked Then s := True;
          End;
          if (s) Then
          Begin
            DRV_DeviceClose (lDeviceHandle);
            errtitle1720 := 'Error: Channel ' + IntToStr(i);
            Application.MessageBox(errmsg1720_PChar, errtitle1720_PChar, MB_OK);
            Exit;
          End;
        End;
      End;
    End
    Else
    Begin
      For i := 0 To MaxAOChannel - 1 Do
      Begin
        If ((aosetting[i].fAOMaxVol <> 5) Or (aosetting[i].fAOMinVol <> 0)) Then
        Begin
          s := False;
          Case i of
            0 : If optAsyncEnable0.Checked Then s := True;
            1 : If optAsyncEnable1.Checked Then s := True;
            2 : If optAsyncEnable2.Checked Then s := True;
            3 : If optAsyncEnable3.Checked Then s := True;
            4 : If optAsyncEnable4.Checked Then s := True;
            5 : If optAsyncEnable5.Checked Then s := True;
            6 : If optAsyncEnable6.Checked Then s := True;
            7 : If optAsyncEnable7.Checked Then s := True;
          End;
          if (s) Then
          Begin
            DRV_DeviceClose (lDeviceHandle);
            errtitle1720 := 'Error: Channel ' + IntToStr(i) + char(0);
            Application.MessageBox(errmsg1720_PChar, errtitle1720_PChar, MB_OK);
            Exit;
          End;
        End;
      End;
    End;
  End;

  // Enable Sync. output feature
  If chkSyncAOEnable.Checked Then
    lErrCde := DRV_EnableSyncAO(lDeviceHandle, 1)
  Else
    lErrCde := DRV_EnableSyncAO(lDeviceHandle, 0);
  If ( DoesErr(lErrCde) = 1 ) Then
  Begin
    DRV_DeviceClose(lDeviceHandle);
    Exit;
  End;

  OutputIndex := 0;

  cmdStart.Enabled  := False;
  cmdStop.Enabled   := True;
  btnClose.Enabled  := False;

  ScanTimer.Enabled := True;
end;

procedure TfrmMain.cmdStopClick(Sender: TObject);
begin
  ScanTimer.Enabled := False;

  lErrCde := DRV_DeviceClose(lDeviceHandle);
  If ( DoesErr(lErrCde) = 1 ) Then
    Exit;

  cmdStart.Enabled  := True;
  cmdStop.Enabled   := False;
  btnClose.Enabled  := True;
end;

procedure TfrmMain.ScanTimerTimer(Sender: TObject);
Var
  i : Integer;
  s : Boolean;
begin
  If chkSyncAOEnable.Checked Then
  Begin
    For i := 0 To MaxAOChannel DO
    Begin
      s := False;
      Case i of
        0 : If chkSyncEnable0.Checked Then s := True;
        1 : If chkSyncEnable1.Checked Then s := True;
        2 : If chkSyncEnable2.Checked Then s := True;
        3 : If chkSyncEnable3.Checked Then s := True;
        4 : If chkSyncEnable4.Checked Then s := True;
        5 : If chkSyncEnable5.Checked Then s := True;
        6 : If chkSyncEnable6.Checked Then s := True;
        7 : If chkSyncEnable7.Checked Then s := True;
      End;
      If s Then
      Begin
	If optVoltageOut.Checked Then
        Begin
	  ptAOVoltageOut.Chan := i;
	  ptAOVoltageOut.OutputValue := OutputValue[OutputIndex];
	  lErrCde := DRV_AOVoltageOut(lDeviceHandle, ptAOVoltageOut);
	End
        Else
        Begin
	  ptAOCurrentOut.Chan := i;
	  ptAOCurrentOut.OutputValue := OutputValue[OutputIndex];
	  lErrCde := DRV_AOCurrentOut(lDeviceHandle, ptAOCurrentOut);
        End;
        If (lErrCde <> 0) Then
        Begin
            ScanTimer.Enabled := false;
            pszErrMsg := @szErrMsg;
            DRV_GetErrorMessage(lErrCde, pszErrMsg);
            Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
            cmdStopClick(nil);
            exit;
        End;
      End;
    end;
    lErrCde := DRV_WriteSyncAO(lDeviceHandle);
    If (lErrCde <> 0) Then
    Begin
        ScanTimer.Enabled := false;
        pszErrMsg := @szErrMsg;
        DRV_GetErrorMessage(lErrCde, pszErrMsg);
        Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
        cmdStopClick(nil);
        exit;
    End;
  End
  Else
  Begin
    For i := 0 To MaxAOChannel Do
    Begin
      s := False;
      Case i of
        0 : If optAsyncEnable0.Checked Then s := True;
        1 : If optAsyncEnable1.Checked Then s := True;
        2 : If optAsyncEnable2.Checked Then s := True;
      	3 : If optAsyncEnable3.Checked Then s := True;
        4 : If optAsyncEnable4.Checked Then s := True;
        5 : If optAsyncEnable5.Checked Then s := True;
        6 : If optAsyncEnable6.Checked Then s := True;
        7 : If optAsyncEnable7.Checked Then s := True;
      End;
      If s Then
      Begin
	If optVoltageOut.Checked Then
        Begin
	  ptAOVoltageOut.Chan := i;
	  ptAOVoltageOut.OutputValue := OutputValue[OutputIndex];
	  lErrCde := DRV_AOVoltageOut(lDeviceHandle, ptAOVoltageOut);
        End
        Else
        Begin
	  ptAOCurrentOut.Chan := i;
	  ptAOCurrentOut.OutputValue := OutputValue[OutputIndex];
	  lErrCde := DRV_AOCurrentOut(lDeviceHandle, ptAOCurrentOut);
        End;
        If (lErrCde <> 0) Then
        Begin
            ScanTimer.Enabled := false;
            pszErrMsg := @szErrMsg;
            DRV_GetErrorMessage(lErrCde, pszErrMsg);
            Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
            cmdStopClick(nil);
            exit;
        End;
      End;
    End;
  End;
  editOutput.Text := Format('%.3f', [OutputValue[OutputIndex]]);
  OutputIndex := OutputIndex + 1;
  If OutputIndex > 3 Then
    OutputIndex := 0;
end;

End.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -