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

📄 unit1.cpp

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
        char  DeviceName[ 50 ];
        ULONG ulSize;
        LONG* pBuffer;
        
        m_ulDevNum = 0;
        DRV_SelectDevice( Handle, FALSE, &m_ulDevNum, DeviceName );
	editDevName->Text = DeviceName;

        // open device
        m_ErrCde = DRV_DeviceOpen( m_ulDevNum, &m_DriverHandle );
	if ( m_ErrCde != SUCCESS )
        {
           DRV_GetErrorMessage(m_ErrCde, m_szErrMsg);
           MessageBox(Handle, m_szErrMsg, "Device Open", MB_OK);
        }

        cmbCounter->ItemIndex = 0;
        m_CompType = 1; // Compare Table
        m_CompIndex = 0;

        // Get Indicator Property
        m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, NULL, &ulSize);
        if (m_ErrCde == SUCCESS)
        {
                pBuffer = new LONG[ulSize / sizeof(LONG)];
                m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, pBuffer, &ulSize);
                if (pBuffer[0] & OVERCOMPLEVEL)
                {
                        chkDOIndicate->Checked = TRUE;
                        chkBigComp->Checked = TRUE;
                        rdoLevel->Checked = TRUE;
                }
                if (pBuffer[0] & OVERCOMPPULSE)
                {
                        chkDOIndicate->Checked = TRUE;
                        chkBigComp->Checked = TRUE;
                        rdoPulse->Checked = TRUE;
                }
                if (pBuffer[0] & UNDERCOMPLEVEL)
                {
                        chkDOIndicate->Checked = TRUE;
                        chkSmallComp->Checked = TRUE;
                        rdoLevel->Checked = TRUE;
                }
                if (pBuffer[0] & UNDERCOMPPULSE)
                {
                        chkDOIndicate->Checked = TRUE;
                        chkSmallComp->Checked = TRUE;
                        rdoPulse->Checked = TRUE;
                }
                delete[] pBuffer;
        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnSelDevClick(TObject *Sender)
{
        char DeviceName[50];

        if ( m_DriverHandle != NULL )
           DRV_DeviceClose( &m_DriverHandle );

	DRV_SelectDevice( Handle, FALSE, &m_ulDevNum, DeviceName );
	editDevName->Text = DeviceName;
	m_ErrCde = DRV_DeviceOpen( m_ulDevNum, &m_DriverHandle);
        if ( m_ErrCde != SUCCESS )
        {
           DRV_GetErrorMessage(m_ErrCde, m_szErrMsg);
           MessageBox(Handle, m_szErrMsg, "Device Open", MB_OK);
        }        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
        m_bContinue = FALSE;

        // Terminate thread
        KillThread();

        // Close device
        Sleep(50L);
	if ( m_DriverHandle != NULL )
           DRV_DeviceClose( &m_DriverHandle );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnCloseClick(TObject *Sender)
{
        Close();        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::cmbCounterChange(TObject *Sender)
{
        ULONG ulSize;
        LONG* pBuffer;
        USHORT usCounter;

        usCounter = cmbCounter->ItemIndex;

        // Get Indicator Property
        m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, NULL, &ulSize);
        if (m_ErrCde == SUCCESS)
        {
                chkDOIndicate->Checked = FALSE;
                chkBigComp->Checked = FALSE;
                chkSmallComp->Checked = FALSE;
                rdoPulse->Checked = FALSE;
                rdoLevel->Checked = FALSE;

                pBuffer = new LONG[ulSize / sizeof(LONG)];
                m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, pBuffer, &ulSize);
                if (pBuffer[usCounter] & OVERCOMPLEVEL)
                {
                                chkDOIndicate->Checked = TRUE;
                                chkBigComp->Checked = TRUE;
                                rdoLevel->Checked = TRUE;
                }
                if (pBuffer[usCounter] & OVERCOMPPULSE)
                {
                                chkDOIndicate->Checked = TRUE;
                                chkBigComp->Checked = TRUE;
                                rdoPulse->Checked = TRUE;
                }
                if (pBuffer[usCounter] & UNDERCOMPLEVEL)
                {
                                chkDOIndicate->Checked = TRUE;
                                chkSmallComp->Checked = TRUE;
                                rdoLevel->Checked = TRUE;
                 }
                 if (pBuffer[usCounter] & UNDERCOMPPULSE)
                 {
                                chkDOIndicate->Checked = TRUE;
                                chkSmallComp->Checked = TRUE;
                                rdoPulse->Checked = TRUE;
                 }
                 delete[] pBuffer;
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnStartClick(TObject *Sender)
{
        LONG* pBuffer;
        ULONG ulSize;
        PT_EnableEvent ptEnableEvent;
        PT_CounterEventStart ptCounterEventStart;

        m_CurCounter = cmbCounter->ItemIndex;
        if (chkOverComp->Checked)
                m_OverComp = 1;
        else
                m_OverComp = 0;
        if (chkUnderComp->Checked)
                m_UnderComp = 1;
        else
                m_UnderComp = 0;

        if (m_CompType == 1)
                btnSetTableClick(Sender);

        // Set Indicator
        m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, NULL, &ulSize);
        pBuffer = new LONG[ulSize / sizeof(LONG)];
        m_ErrCde = DRV_DeviceGetProperty(m_DriverHandle, CFG_CntrIndicatorControl, pBuffer, &ulSize);
        pBuffer[m_CurCounter] = 0;
        if (chkDOIndicate->Checked)
        {
                if (chkBigComp->Checked)
                {
                        if (rdoPulse->Checked)
                                pBuffer[m_CurCounter] |= OVERCOMPPULSE;
                        if (rdoLevel->Checked)
                                pBuffer[m_CurCounter] |= OVERCOMPLEVEL;
                }
                if (chkSmallComp->Checked)
                {
                        if (rdoPulse->Checked)
                                pBuffer[m_CurCounter] |= UNDERCOMPPULSE;
                        if (rdoLevel->Checked)
                                pBuffer[m_CurCounter] |= UNDERCOMPLEVEL;
                }
        }
        m_ErrCde = DRV_DeviceSetProperty(m_DriverHandle, CFG_CntrIndicatorControl, pBuffer, ulSize);

        // Enable Event
        ptEnableEvent.Count = 1;
        ptEnableEvent.Enabled = TRUE;
        if (m_OverComp)
        {
                ptEnableEvent.EventType = ADS_EVT_OVERCOMPARE_CNT0 + m_CurCounter;
                m_ErrCde = DRV_EnableEvent(m_DriverHandle, &ptEnableEvent);
                if (m_ErrCde != SUCCESS)
                {
                        DRV_GetErrorMessage(m_ErrCde, m_szErrMsg);
                        MessageBox(Handle, m_szErrMsg, "Driver Message", MB_OK);
                }
        }
        if (m_UnderComp)
        {
                ptEnableEvent.EventType = ADS_EVT_UNDERCOMPARE_CNT0 + m_CurCounter;
                m_ErrCde = DRV_EnableEvent(m_DriverHandle, &ptEnableEvent);
                if (m_ErrCde != SUCCESS)
                {
                        DRV_GetErrorMessage(m_ErrCde, m_szErrMsg);
                        MessageBox(Handle, m_szErrMsg, "Driver Message", MB_OK);
                }
        }

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

        btnSelDev->Enabled = FALSE;
        btnStart->Enabled = FALSE;
        btnStop->Enabled = TRUE;

⌨️ 快捷键说明

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