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

📄 unit1.pas

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 PAS
📖 第 1 页 / 共 2 页
字号:
        end;

        // start counter
        ptCounterEventStart.counter := m_CurCounter;
        m_ErrCde := DRV_CounterEventStart(m_DriverHandle, ptCounterEventStart);

        btnSelDev.Enabled := FALSE;
        btnStart.Enabled := FALSE;
        btnStop.Enabled := TRUE;
        btnClose.Enabled := FALSE;

        m_bContinue := TRUE;
        Thread := TCheckThread.Create(False);
end;

procedure TForm1.btnStopClick(Sender: TObject);
var
        ptEnableEvent: PT_EnableEvent;
begin
        btnSelDev.Enabled := TRUE;
        btnStart.Enabled := TRUE;
        btnStop.Enabled := FALSE;
        btnClose.Enabled := TRUE;

        //disable event
        ptEnableEvent.Count := 1;
        ptEnableEvent.Enabled := 0;
        if (m_OverComp = 1) then
        begin
                ptEnableEvent.EventType := ADS_EVT_OVERCOMPARE_CNT0 + m_CurCounter;
                m_ErrCde := DRV_EnableEvent(m_DriverHandle, ptEnableEvent);
        end;
        if (m_UnderComp = 1) then
        begin
                ptEnableEvent.EventType := ADS_EVT_UNDERCOMPARE_CNT0 + m_CurCounter;
                m_ErrCde := DRV_EnableEvent(m_DriverHandle, ptEnableEvent);
        end;

        // Reset counter
        m_ErrCde := DRV_CounterReset(m_DriverHandle, m_CurCounter);
        
        m_bContinue := FALSE;
        if (Thread <> Nil) then
                Thread.Terminate;
end;

procedure TForm1.CheckEvent();
var
        ptCheckEvent: PT_CheckEvent;
        usEventType: SHORT;
        dwEvtCountOver: Longint;
        dwEvtCountUnder: Longint;
        ptCounterEventRead: PT_CounterEventRead;
        ulCount: Longint;
        usOverflow: SHORT;
        CompareData: array of Longint;
        ulSize: Longint;
        iSize: Integer;

begin
        ptCheckEvent.EventType := @usEventType;
        ptCheckEvent.Milliseconds := 1000;

        ptCounterEventRead.counter := m_CurCounter;
        ptCounterEventRead.overflow := @usOverflow;
        ptCounterEventRead.count := @ulCount;

        dwEvtCountOver := 0;
        dwEvtCountUnder := 0;
        while(m_bContinue) do
        begin
                if (DRV_CheckEvent(m_DriverHandle, ptCheckEvent) = SUCCESS) then
                begin
                        if ((usEventType = ADS_EVT_OVERCOMPARE_CNT0 + m_CurCounter) or
                                (usEventType = ADS_EVT_UNDERCOMPARE_CNT0 + m_CurCounter)) then
                        begin
                                if (usEventType = ADS_EVT_OVERCOMPARE_CNT0 + m_CurCounter) then
                                begin
                                        dwEvtCountOver := dwEvtCountOver + 1;
                                        editEvtCountOver.Text := IntToStr(dwEvtCountOver);
                                end;
                                if (usEventType = ADS_EVT_UNDERCOMPARE_CNT0 + m_CurCounter) then
                                begin
                                        dwEvtCountUnder := dwEvtCountUnder + 1;
                                        editEvtCountUnder.Text := IntToStr(dwEvtCountUnder);
                                end;

                                if ((m_CompType = 1) and (m_CompIndex < 7)) then
                                begin
                                        m_CompIndex := m_CompIndex + 1;

                                        m_ErrCde := DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, NIL, ulSize);
                                        iSize := ulSize div SizeOf(ulSize);
                                        SetLength(CompareData, iSize);
                                        m_ErrCde := DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, @CompareData[0], ulSize);
                                        case (m_CompIndex) of
                                                0: CompareData[m_CurCounter] := StrToInt(editD0.Text);
                                                1: CompareData[m_CurCounter] := StrToInt(editD1.Text);
                                                2: CompareData[m_CurCounter] := StrToInt(editD2.Text);
                                                3: CompareData[m_CurCounter] := StrToInt(editD3.Text);
                                                4: CompareData[m_CurCounter] := StrToInt(editD4.Text);
                                                5: CompareData[m_CurCounter] := StrToInt(editD5.Text);
                                                6: CompareData[m_CurCounter] := StrToInt(editD6.Text);
                                                7: CompareData[m_CurCounter] := StrToInt(editD7.Text);
                                        end;
                                        m_ErrCde := DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrCompareData, @CompareData[0], ulSize);
                                        editCompData.Text := IntToStr(CompareData[m_CurCounter]);
                                end;
                        end;
                end;
                DRV_CounterEventRead(m_DriverHandle, ptCounterEventRead);
                editCntrCount.Text := IntToStr(ulCount);
        end;
end;

procedure TForm1.btnCloseClick(Sender: TObject);
begin
        Close;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
        m_bContinue := FALSE;
        if (Thread <> Nil) then
                Thread.Terminate;

        if ( m_DriverHandle <> NULL ) then
                DRV_DeviceClose(m_DriverHandle);
end;

procedure TForm1.cmbCounterChange(Sender: TObject);
var
        ulSize: Longint;
        pBuffer: array of Longint;
        iSize: Integer;
        usCounter: Integer;
begin
        // Get Indicator property
        m_ErrCde := DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, NIL, ulSize);
        if (m_ErrCde = SUCCESS) then
        begin
                chkDOIndicate.Checked := FALSE;
                chkBigComp.Checked := FALSE;
                chkSmallComp.Checked := FALSE;
                rdoPulse.Checked := FALSE;
                rdoLevel.Checked := FALSE;
                usCounter := cmbCounter.ItemIndex;

                iSize := ulSize div SizeOf(ulSize);
                SetLength(pBuffer, iSize);
                m_ErrCde := DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, @pBuffer[0], ulSize);
                if ( pBuffer[usCounter] and OVERCOMPLEVEL <> 0) then
                begin
                        chkDOIndicate.Checked := TRUE;
                        chkBigComp.Checked := TRUE;
                        rdoLevel.Checked := TRUE;
                end;
                if ( pBuffer[usCounter] and OVERCOMPPULSE <> 0 ) then
                begin
                        chkDOIndicate.Checked := TRUE;
                        chkBigComp.Checked := TRUE;
                        rdoPulse.Checked := TRUE;
                end;

                if ( pBuffer[usCounter] and UNDERCOMPLEVEL <> 0) then
                begin
                        chkDOIndicate.Checked := TRUE;
                        chkSmallComp.Checked := TRUE;
                        rdoLevel.Checked := TRUE;
                end;

                if ( pBuffer[usCounter] and UNDERCOMPPULSE <> 0 ) then
                begin
                        chkDOIndicate.Checked := TRUE;
                        chkSmallComp.Checked := TRUE;
                        rdoPulse.Checked := TRUE;
                end;
        end;
end;

procedure TForm1.btnSetCompClick(Sender: TObject);
var
        ulSize: Longint;
        iSize: Integer;
        CompareData: array of Longint;
        usCounter: Integer;
begin
        usCounter := cmbCounter.ItemIndex;

        // Set compare data
        m_ErrCde := DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, NIL, ulSize);
        iSize := ulSize div SizeOf(ulSize);
        SetLength(CompareData, iSize);
        m_ErrCde := DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, @CompareData[0], ulSize);
        CompareData[usCounter] := StrToInt(editSingleData.Text);
        m_ErrCde := DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrCompareData, @CompareData[0], ulSize);
        editCompData.Text := editSingleData.Text;

        // Set compare type to single data compare
        m_CompType := 0;
        m_CompIndex := 0;
end;

procedure TForm1.btnSetTableClick(Sender: TObject);
var
        ulSize: Longint;
        iSize: Integer;
        CompareData: array of Longint;
        usCounter: Integer;
begin
        usCounter := cmbCounter.ItemIndex;

        // Set compare data
        m_ErrCde := DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, NIL, ulSize);
        iSize := ulSize div SizeOf(ulSize);
        SetLength(CompareData, iSize);
        m_ErrCde := DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrCompareData, @CompareData[0], ulSize);
        CompareData[usCounter] := StrToInt(editD0.Text);
        m_ErrCde := DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrCompareData, @CompareData[0], ulSize);
        editCompData.Text := editD0.Text;

        m_CompType := 1;     // Set compare type to compare table
        m_CompIndex := 0;
end;

procedure TForm1.btnResetClick(Sender: TObject);
var
        usCounter: Integer;
begin
        usCounter := cmbCounter.ItemIndex;
        m_ErrCde := DRV_CounterReset(m_DriverHandle, usCounter);
end;

end.

⌨️ 快捷键说明

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