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

📄 diintform.cpp

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "DiintForm.h"
#include "..\..\..\..\include\driver.h"
#include "EventThread.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TDiintfrm *Diintfrm;
//---------------------------------------------------------------------------
LONG lDriverHandle;                     //Driver handle
char        szErrMsg[80];               // Use for MESSAGEBOX function
LRESULT     ErrCde;                     // Return error code

static ULONG lDeviceNum;                    //Advantech Device Number in your system
static char szDescription[80];              //description for Select Device
static      DEVFEATURES     DevFeatures;    // structure for device features
static      PT_DeviceGetFeatures  ptDevGetFeatures;

TEventThread*  myEventThread;
BOOL bThreadStop;

extern  char	szStatus[10];
extern  char	szBuf[20];
extern  DWORD   dwCount;

//---------------------------------------------------------------------------
__fastcall TDiintfrm::TDiintfrm(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TDiintfrm::FormCreate(TObject *Sender)
{
     //This function is for getting the device number
    if(1 == DRV_SelectDevice(Handle, True, (ULONG*)&lDeviceNum, szDescription)){
        Application->MessageBoxA("Can not Open Select Device Dialog", "Error");
        btnCloseClick(Sender);
    }
    labDeviceName->Caption = AnsiString(szDescription);
    bThreadStop = True;
    txtInterruptCount->Text = "1";
    rdgPriority->ItemIndex = 0;

}
//---------------------------------------------------------------------------

void __fastcall TDiintfrm::btnCloseClick(TObject *Sender)
{
  Application->Terminate();
}
//---------------------------------------------------------------------------

void __fastcall TDiintfrm::btnSelectDeviceClick(TObject *Sender)
{
    //This function is for getting the device number
    DRV_SelectDevice(Handle, True, (ULONG*)&lDeviceNum, szDescription);
    labDeviceName->Caption = AnsiString(szDescription);

}
//---------------------------------------------------------------------------


void __fastcall TDiintfrm::btnEnableClick(TObject *Sender)
{
    PT_EnableEvent ptEnableEvent;

    stFrequency->Caption = "";
    stCounts->Caption = "";
    //Open device
    ErrCde = DRV_DeviceOpen(lDeviceNum, (LONG far*)&lDriverHandle);
    if(ErrCde != SUCCESS){
        strcpy(szErrMsg,"Device open error !");
        Application->MessageBoxA((char*)szErrMsg,"Device Open");
        return;
    }

    //set event parameters and enable event
    ptEnableEvent.Enabled   = True;
    ptEnableEvent.Count     = txtInterruptCount->Text.ToInt();
    if (DI0->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI0;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI0->Enabled = False;
    }
    if (DI1->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI1;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI1->Enabled = False;
    }
    if (DI2->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI2;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI2->Enabled = False;
    }
    if (DI3->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI3;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI3->Enabled = False;
    }
    if (DI4->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI4;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI4->Enabled = False;
    }
    if (DI5->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI5;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI5->Enabled = False;
    }
    if (DI6->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI6;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI6->Enabled = False;
    }
    if (DI7->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI7;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI7->Enabled = False;
    }

    if(ErrCde != SUCCESS){
        DRV_GetErrorMessage(ErrCde, (LPSTR)szErrMsg);
        Application->MessageBoxA((char*)szErrMsg, "Driver Message");
        return;
    }

    //create thread and suspend it
    myEventThread = new TEventThread(True);

    //set the thread priority
    if(rdgPriority->ItemIndex == 0){
        myEventThread->Priority = tpNormal;
    }else if(rdgPriority->ItemIndex == 1){
        myEventThread->Priority = tpTimeCritical;
    }
    //start the thread
    myEventThread->Resume();
    tmrShow->Enabled = True;
    
    btnEnable->Enabled = False;
    btnDisable->Enabled = True;
    btnClose->Enabled = False;
    grpDeviceSelection->Enabled = False;
    rdgPriority->Enabled = False;
    txtInterruptCount->Enabled = False;
    bThreadStop = False;
}
//---------------------------------------------------------------------------

void __fastcall TDiintfrm::btnDisableClick(TObject *Sender)
{
     PT_EnableEvent ptEnableEvent;
     USHORT         eventtype;
     USHORT         i;
    //terminate the thread
     myEventThread->Terminate();
     myEventThread->WaitFor();
     tmrShow->Enabled = False;
     //disable event

    ptEnableEvent.Enabled   = false;
    ptEnableEvent.Count     = txtInterruptCount->Text.ToInt();
    if (DI0->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI0;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI0->Enabled = true;
    }
    if (DI1->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI1;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI1->Enabled = true;
    }
    if (DI2->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI2;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI2->Enabled = true;
    }
    if (DI3->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI3;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI3->Enabled = true;
    }
    if (DI4->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI4;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI4->Enabled = true;
    }
    if (DI5->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI5;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI5->Enabled = true;
    }
    if (DI6->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI6;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI6->Enabled = true;
    }
    if (DI7->Checked)
    {
       ptEnableEvent.EventType = ADS_EVT_INTERRUPT_DI7;
       ErrCde = DRV_EnableEvent(lDriverHandle, (LPT_EnableEvent)&ptEnableEvent);
       DI7->Enabled = true;
    }

    if(ErrCde != SUCCESS){
         DRV_GetErrorMessage(ErrCde, (LPSTR)szErrMsg);
         Application->MessageBoxA((char*)szErrMsg, "Driver Message");
         return;
    }
    

   //close devie
    DRV_DeviceClose((LONG far *)&lDriverHandle);

    btnEnable->Enabled = True;
    btnDisable->Enabled = False;
    btnClose->Enabled = True;
    grpDeviceSelection->Enabled = True;
    rdgPriority->Enabled = True;
    txtInterruptCount->Enabled = True;
    //clear the information
    stCounts->Caption = "";
    stFrequency->Caption ="";
    dwCount = 0;
    //destory thread object
    delete myEventThread;
}
//---------------------------------------------------------------------------

void __fastcall TDiintfrm::FormClose(TObject *Sender, TCloseAction &Action)
{
    if(!bThreadStop){
        btnDisableClick(Sender);
    }
}
//---------------------------------------------------------------------------

void __fastcall TDiintfrm::tmrShowTimer(TObject *Sender)
{
    stFrequency->Caption = AnsiString(szBuf);
    stCounts->Caption = AnsiString(dwCount);

}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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