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

📄 init.pas

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  {2. Config event feature}
  ptEnableEvent.EventType := ADS_EVT_INTERRUPT or
                             ADS_EVT_BUFCHANGE or
                             ADS_EVT_TERMINATED or
                             ADS_EVT_OVERRUN;
  ptEnableEvent.Enabled := Word(chkEventEnable.Checked);
{ 4/23/1999 Eric lin}
  if chkFifo.Checked And (StrToInt(editFifo.Text) > 0) then
     ptEnableEvent.Count   := StrToInt(editFifo.Text)
  else
     ptEnableEvent.Count   := 1;
{Done}

  lErrCde := DRV_EnableEvent(ghDev,ptEnableEvent);
  if DoesErr(lErrCde) = 1  then
  begin
     GlobalUnlock(hBuf);
    GlobalFree(hBuf);
    GlobalUnlock(hUserbuf);
    GlobalFree(hUserbuf);

    DRV_DeviceClose(ghDev);
    Exit;
  end;

    ptAIConfig.buffer := @lpDevConfig_AI;
    ptAIConfig.size := SizeOf(DEVCONFIG_AI);
    lErrCde := DRV_AIGetConfig(ghDev, ptAIConfig);
    if ( DoesErr(lErrCde) = 1 ) then
    begin
        DRV_DeviceClose(ghDev);
        Exit;
    end;

   {3. Set gain list}
   usStartChan := cmbStartChl.ItemIndex;
   usChanNum := StrToInt(cmbChlCount.Text);
   logChan := PhyChanToLogChan(lpDevConfig_AI,usStartChan);
   for i:=0 to usChanNum-1 do
   begin
      usGainCode[i] :=
         lpDevFeatures.glGainList[usGainIndx[(i + logChan) mod gwMaxLogChanNum]].usGainCde;
   end;

  {4. Start AI interrupt funciton}
  {4.1 Fill element of PT_FAIIntScanStart}
  with ptAiStart do
  begin
    TrigSrc     := Word(radExtTrig.Checked);
    SampleRate  := StrToInt(editSpeed.Text);
    NumChans    := cmbChlCount.itemIndex + 1;
    StartChan   := cmbStartChl.itemIndex;
    GainList    := @usGainCode[0];
    count       := giConvCount;
    cyclic      := Word(chkCyclic.Checked);
    if chkFifo.Checked And (StrToInt(editFifo.Text) > 0) then
      IntrCount   := StrToInt(editFifo.Text)
    else
      IntrCount   := 1;
    buffer      := Pointer(GlobalLock(hBuf));
  end;

  {4.2 Call advantech API function DRV_FAIIntScanStart}
  lErrCde := DRV_FAIIntScanStart( ghDev, ptAiStart);
  if DoesErr(lErrCde) = 1 Then
  begin
    GlobalUnlock(hBuf);
    GlobalFree(hBuf);
    GlobalUnlock(hUserbuf);
    GlobalFree(hUserbuf);

    lErrCde := DRV_DeviceClose(ghDev);
    Exit;
  end;

  {5. Enable Thread for getting message.}
  if chkEventEnable.Checked = True then
  begin
    with TGetEvent.Create( DeviceList[lstDevice.ItemIndex].dwDeviceNum,
                           ptAiStart.count * 1000 div ptAiStart.SampleRate + 100,
                           chkCyclic.Checked) do
        frmConverting.ghThreadGetEvent := Handle;
  end;
  Sleep(0);

  {6. Enter converting form}
  frmConverting.gbCyclic := chkCyclic.Checked;
  frmConverting.gbConverting := True;
  frmConverting.txtInt.Text :=IntToStr(0);
  frmConverting.txtBuffChange.text := IntToStr(0);

  frmConverting.prgsDataCounts.Max := giConvCount;
  frmConverting.prgsDataCounts.Position := 0;
  frmConverting.prgsDataCounts.Min := 0;

  frmInit.Enabled := False;
  frmConverting.Show;
end;

procedure TfrmInit.lstDeviceClick(Sender: TObject);
var
    lErrCde          : Longint;
    i                : integer;
    szTmp            : string;

begin
    butConvert.Enabled := FALSE;

    {1. Reset all controls because of changing different device}
    {Clear the previous selection list & combo boxes}
    cmbStartChl.Clear;            {clear start channel}
    cmbChlCount.Clear;            {Clear stop channel}
    cmbOverallGain.Clear;                {Clear the voltage range list}

    {2. Open sellected device for reading its informations}
    lErrCde := DRV_DeviceOpen( DeviceList[lstDevice.ItemIndex].dwDeviceNum,
                               ghDev);
    if( DoesErr(lErrCde) = 1 ) then
        Exit;

    {3. Get device's features}
    ptDevFeatures.buffer := @lpDevFeatures;
    ptDevFeatures.size := SizeOf(DEVFEATURES);
    lErrCde := DRV_DeviceGetFeatures(ghDev, ptDevFeatures);
    if( DoesErr(lErrCde) = 1 ) then
    begin
        DRV_DeviceClose(ghDev);
        Exit;
    end;

    {4. Get device's AI configuration}
    ptAIConfig.buffer := @lpDevConfig_AI;
    ptAIConfig.size := SizeOf(DEVCONFIG_AI);
    lErrCde := DRV_AIGetConfig(ghDev, ptAIConfig);
    if ( DoesErr(lErrCde) = 1 ) then
    begin
        DRV_DeviceClose(ghDev);
        Exit;
    end;

    {5. Setting channel number combo box}
    if(lpDevConfig_AI.ulChanConfig = 1) then
        iMaxChl := lpDevFeatures.usMaxAIDiffChl
    else If (lpDevFeatures.usMaxAISiglChl>lpDevFeatures.usMaxAIDiffChl) Then
        iMaxChl := lpDevFeatures.usMaxAISiglChl
    else
        iMaxChl := lpDevFeatures.usMaxAIDiffChl;

    gwMaxLogChanNum := GetMaxLogChanNum(lpDevConfig_AI,lpDevFeatures);
    {done}
    for i := 0 to (iMaxChl - 1) do
    begin
        szTmp := IntToStr(i);
        cmbStartChl.items.Add(szTmp);
    end;
    cmbStartChl.ItemIndex := 0;

    for i := 1 to (gwMaxLogChanNum ) do
    begin
        szTmp := IntToStr(i);
        cmbChlCount.items.Add(szTmp);
    end;
    cmbChlCount.ItemIndex := 0;

    {6. Setting gain code selection}
    if (lpDevFeatures.usNumGain > 0) then
        For i := 0 To (lpDevFeatures.usNumGain - 1) do
            cmbOverallGain.Items.Add(lpDevFeatures.glGainList[i].szGainStr);
    cmbOverallGain.ItemIndex := 0;

    {7. Give the initialize Gain code list value}
    for i := 0 to iMaxChl - 1 do
        wGainCode[i] := lpDevFeatures.glGainList[0].usGainCde;
    for i := 0 to 15 do
        iGainIndex[i] := 0;

    {8. Close the device}
    lErrCde := DRV_DeviceClose(ghDev);
    if DoesErr(lErrCde) = 1 then
        Exit;

    butConvert.Enabled := TRUE;
end;

procedure TfrmInit.butGainListClick(Sender: TObject);
begin
    usStartChan := cmbStartChl.ItemIndex;
    usChanNum := StrToInt(cmbChlCount.Text);

    frmGainList.ShowModal();

end;

procedure TfrmInit.cmbOverallGainClick(Sender: TObject);
var
    i : Smallint;
begin
    for i := 0 to 15 do
        iGainIndex[i] := cmbOverallGain.ItemIndex;
end;

procedure TfrmInit.radExtTrigClick(Sender: TObject);
begin
    labSpeed.Enabled  := False;
    labHz.Enabled     := False;
    editSpeed.Enabled := False;
end;

procedure TfrmInit.radInterTrigClick(Sender: TObject);
begin
    labSpeed.Enabled  := True;
    labHz.Enabled     := True;
    editSpeed.Enabled := True;
end;

procedure TfrmInit.ThreadDone(Sender: TObject);
begin
    frmConverting.close;
end;

procedure TfrmInit.chkFifoClick(Sender: TObject);
var
    lFifoSize : Longint;
    lErrCde : Longint;
begin
    if (chkFifo.Checked) then
    begin
        { Step 1: Open device }
        lErrCde := DRV_DeviceOpen(DeviceList[lstDevice.ItemIndex].dwDeviceNum, ghDev);
        if DoesErr(lErrCde) = 1 then
            Exit;

        { Step 2: Get FIFO size }
        lErrCde := DRV_GetFIFOSize(ghDev, lFifoSize);
        if DoesErr(lErrCde) = 1 then
            Exit;

        { Step 3: Close device }
        DRV_DeviceClose(ghDev);

        { divide by 2 for conversion from byte to word }
        editFifo.Text := IntToStr(lFifoSize div 2);
        editDataCounts.Text := IntToStr(lFifoSize );
        editFifo.Enabled := true;
    end
    else
        editFifo.Enabled := false;
end;

procedure TfrmInit.radOverallClick(Sender: TObject);
var
   i  : integer;
begin
    for i := 0 to 63 do
          usGainIndx[i] := cmbOverallGain.ItemIndex;
      cmbOverallGain.Enabled := True;
      cmbOverallGainClick(Sender);
      butGainList.Enabled := False



end;

procedure TfrmInit.radGainListClick(Sender: TObject);
begin
        cmbOverallGain.Enabled := False;
        butGainList.Enabled := True
end;

procedure TfrmInit.cmbOverallGainChange(Sender: TObject);
var
   i : integer;
begin
    for i := 0 to 63 do
          usGainIndx[i] := cmbOverallGain.ItemIndex;
end;

end.

⌨️ 快捷键说明

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