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

📄 formstar.pas

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 PAS
字号:
unit Formstar;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Driver, Global;

type
  Tfrmstart = class(TForm)
    labSelDev: TLabel;
    lstDevice: TListBox;
    labModule: TLabel;
    lstModule: TListBox;
    cmdRun: TButton;
    labChannel: TLabel;
    lstChannel: TListBox;
    lstGateMode: TListBox;
    labGateMode: TLabel;
    cmdExit: TButton;
    procedure cmdExitClick(Sender: TObject);
    procedure cmdRunClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure lstDeviceClick(Sender: TObject);
    procedure lstModuleClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmstart: Tfrmstart;

implementation

uses formrun;

var
   lpDevFeatures      : DEVFEATURES;
   gnNumOfSubdevices  : Smallint;
   Response           : Integer;

{$R *.DFM}
procedure Tfrmstart.cmdExitClick(Sender: TObject);
begin
     if bRun then
        DRV_DeviceClose(DeviceHandle);
     close;
end;

procedure Tfrmstart.cmdRunClick(Sender: TObject);
begin

  ptCounterPulseStart.counter := lstChannel.ItemIndex;
  ptCounterPulseStart.period := 0.001;      { Gate period = 1 ms }
  ptCounterPulseStart.UpCycle := 0.0005;
  {ptCounterPulseStart.GateMode := lstGateMode.ItemIndex;}  { Gate mode no use here}
  ErrCde := DRV_CounterPulseStart(DeviceHandle, ptCounterPulseStart);
  If (ErrCde <> 0) Then
  begin
       DRV_GetErrorMessage(ErrCde, pszErrMsg);
       Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
       Exit;
  end;
  FormRun.frmRun.ShowModal();

end;

procedure Tfrmstart.FormCreate(Sender: TObject);
var
  MaxEntries, OutEntries : Smallint;
  i, j                   : Integer;
  tempStr                : String;

begin
  bRun := False;

  { Add type of PC Laboratory Card }
  ErrCde := DRV_DeviceGetList(DeviceList[0], MaxEntries, OutEntries);
  If (ErrCde <> 0) Then
  begin
       DRV_GetErrorMessage(ErrCde, pszErrMsg);
       Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
       Exit;
  end;

  { Here MaxEntries = OutEntries }
  ErrCde := DRV_DeviceGetNumOfList(MaxEntries);
  If (ErrCde <> 0) Then
  begin
       DRV_GetErrorMessage(ErrCde, pszErrMsg);
       Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
       Exit;
  end;

  If (MaxEntries > 0) then
  begin
     For i := 0 To (MaxEntries - 1) do
     begin
          tempStr := '';
          For j := 0 To MaxDevNameLen do
              tempStr := tempStr + DeviceList[i].szDeviceName[j];
          lstDevice.Items.Add(tempStr);
     end;
  end;

  labChannel.Enabled := False;
  lstChannel.Enabled := False;
  labGateMode.Enabled := False;
  lstGateMode.Enabled := False;

  cmdRun.Enabled := False;
end;

procedure Tfrmstart.lstDeviceClick(Sender: TObject);
var
  tempNum, i, ii         : Integer;
  nOutEntries            : Smallint;
  TestRes                : Boolean;
  TempStr                : String;
  dwDeviceNum            : Longint;

begin
  lstChannel.Items.Clear;
  lstGateMode.Items.Clear;

  tempNum := Pos('DEMO', lstDevice.Items[lstDevice.ItemIndex]);
  if (tempNum <> 0) then
     TestRes := True
  else
     TestRes := False;

  { Avoid to open Advantech Demo Card }
  If (TestRes) Then
  begin
    labModule.Enabled := False;
    lstModule.Enabled := False;
    labChannel.Enabled := False;
    lstChannel.Enabled := False;
    lstChannel.Items.Add('No Use');
    cmdRun.Enabled := False;
  end;

  If (Not TestRes) Then
  begin
    { Check if there is any device attached on this COM or CAN }
    gnNumOfSubdevices := DeviceList[lstDevice.ItemIndex].nNumOfSubdevices;
    if (gnNumOfSubdevices > MaxDev) then
       gnNumOfSubdevices := MaxDev;

    dwDeviceNum := DeviceList[lstDevice.ItemIndex].dwDeviceNum;

    { COM and CAN bus }
    if (gnNumOfSubdevices <> 0) then
    begin
       ErrCde := DRV_DeviceGetSubList(dwDeviceNum, SubDeviceList[0], gnNumOfSubdevices, nOutEntries);
       If (ErrCde <> 0) Then
       begin
            DRV_GetErrorMessage(ErrCde, pszErrMsg);
            Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
            Exit;
       end;
       For i := 0 To (gnNumOfSubdevices - 1) do
       begin
           tempStr := '';
           For ii := 0 To MaxDevNameLen do
               tempStr := tempStr + SubDevicelist[i].szDeviceName[ii];
           lstModule.Items.Add(tempStr);
       end;
       lstModule.Enabled := True;
       labModule.Enabled := True;
       labChannel.Enabled := True;
       lstChannel.Enabled := True;
       lstChannel.ItemIndex := 0;
       cmdRun.Enabled := True;
    end;

    { PCL DAS & DIO card }
    if (gnNumOfSubdevices = 0) then
    begin
         If (Not TestRes) Then
         begin
              dwDeviceNum := DeviceList[lstDevice.ItemIndex].dwDeviceNum;
              ErrCde := DRV_DeviceOpen(dwDeviceNum, DeviceHandle);
              If (ErrCde <> 0) Then
              begin
                   DRV_GetErrorMessage(ErrCde, pszErrMsg);
                   Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
                   Application.Terminate;
              end
              Else
                  bRun := True;

              ptDevGetFeatures.buffer := @lpDevFeatures;
              ErrCde := DRV_DeviceGetFeatures(DeviceHandle, ptDevGetFeatures);
              If (ErrCde <> 0) Then
              begin
                   DRV_GetErrorMessage(ErrCde, pszErrMsg);
                   Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
                   Exit;
              end;

              { Add Event Timer channel list }
              tempNum := lpDevFeatures.usMaxTimerChl;
              If (tempNum > 0) then
              begin
                   For i := 0 To (tempNum - 1) do
                   begin
                        tempStr := 'Chan#' + IntToStr(i);
                        lstChannel.Items.Add(tempStr);
                   end;

                   { Since you have selected a PC-Lab Card, you can choose the channel ans you want}
                   { Add the selected Items for Gate mode }
                   lstGateMode.Items.Add('No gating');
                   lstGateMode.Items.Add('Active high level');
                   lstGateMode.Items.Add('Active low level');
                   lstGateMode.Items.Add('Active high edge');
                   lstGateMode.Items.Add('Active low edge');

                   labChannel.Enabled := True;
                   lstChannel.Enabled := True;
                   lstChannel.ItemIndex := 0;
                   { The hardware dones not support those function at the present time. }
                   { The gating mode is used for AMD Am9513A only }
                   {labGateMode.Enabled := True;}
                   {lstGateMode.Enabled := True;}
                   cmdRun.Enabled := True;
              end;
         end;
    end;
  end;
end;

procedure Tfrmstart.lstModuleClick(Sender: TObject);
var
    tempNum, i             : Integer;
    dwDeviceNum            : Longint;
    TempStr                : String;
begin
     lstChannel.Items.Clear;
     lstGateMode.Items.Clear;
     {lstVoltageRange.Items.Clear;}
     {lstExpChl.Clear;}
     { open COM device or CAN device }
     dwDeviceNum := SubDevicelist[lstModule.ItemIndex].dwDeviceNum;
     ErrCde := DRV_DeviceOpen(dwDeviceNum, DeviceHandle);
     If (ErrCde <> 0) Then
     begin
          DRV_GetErrorMessage(ErrCde, pszErrMsg);
          Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
          Exit;
     end
     Else
       bRun := True;

     ptDevGetFeatures.buffer := @lpDevFeatures;
     ErrCde := DRV_DeviceGetFeatures(DeviceHandle, ptDevGetFeatures);
     If (ErrCde <> 0) Then
     begin
          DRV_GetErrorMessage(ErrCde, pszErrMsg);
          Response := Application.MessageBox(pszErrMsg, 'Error!!', MB_OK);
          Exit;
     end;

     { Add Event Timer channel list }
     tempNum := lpDevFeatures.usMaxTimerChl;
     If (tempNum > 0) then
     begin
          For i := 0 To (tempNum - 1) do
          begin
               tempStr := 'Chan#' + IntToStr(i);
               lstChannel.Items.Add(tempStr);
          end;

          { Since you have selected a PC-Lab Card, you can choose the channel ans you want}
          { Add the selected Items for Gate mode. No use in present products.}
          lstGateMode.Items.Add('No gating');
          lstGateMode.Items.Add('Active high level');
          lstGateMode.Items.Add('Active low level');
          lstGateMode.Items.Add('Active high edge');
          lstGateMode.Items.Add('Active low edge');

          labChannel.Enabled := True;
          lstChannel.Enabled := True;
          lstChannel.ItemIndex := 0;
          { The hardware dones not support those function at the present time. }
          {labGateMode.Enabled := True;}
          {lstGateMode.Enabled := True;}
          cmdRun.Enabled := True;
     end;

     { WARNING : No gain code list for ADAM series}
end;

end.

⌨️ 快捷键说明

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