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

📄 dipattn.cpp

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 CPP
字号:
/*
 ****************************************************************************************
 * Program        : DIPATTN.CPP                                                         * 
 * Description    : Demo program for digital input function with pattern match          *
 * Boards Supp.   : PCI-1760/1753                                                       *
 * APIs used      : DRV_DeviceOpen,DRV_DeviceClose, DRV_GetErrorMessage,                *
 *                  DRV_EnableEventEx, DRV_CheckEvent, DRV_FDITransfer                  *
 * Revision       : 1.00                                                                *
 * Date           : 7/8/1999                   Advantech Co., Ltd.                      *
 ****************************************************************************************
 */
#include <windows.h>
#include <windef.h>
#include <stdio.h>
#include <conio.h>

#include "..\..\..\include\driver.h"

/******************************
 * Local function declaration *
 ******************************/
void ErrorHandler(DWORD dwErrCde);
void ErrorStop(long*, DWORD);

void main()
{
    DWORD  dwErrCde;
    ULONG  lDevNum;
    long   lDriverHandle;

	USHORT usChan;
	USHORT usPattern;
	USHORT usEventType;
	ULONG  retValue = 0L;
	USHORT usCardflag;
	PT_EnableEventEx tEnableEventEx;
	PT_CheckEvent  tCheckEvent;
	PT_FDITransfer tFDITransfer;

    //Step 1: Display hardware and software settings for running this example
    printf("Before running this example, please\n");
    printf("use the device installation utility to add the device.\n");

    //Step 2: Input parameters
    printf("\nPlease input parameters:");
    printf("\nDevice Number (check the device installation utility): ");
    scanf("%d", &lDevNum);
	printf("\nCard Flag (to distinguish card 0:PCI-1760, 1:PCI-1753): ");
	scanf("%d", &usCardflag);
    
	//masked by yingsong.huang, not used in this function-08/86/02
	//printf("\nInput DI port: ");
    //scanf("%d", &usChan);
	//mask end

    printf("\nOnly connect bit 0 pattern is 0x01 for PCI-1760.");
    printf("\nOnly connect bit 0 pattern is 0xfe for PCI-1753 input mode.");
    printf("\nTarget Pattern (HEX): ");
    scanf("%X", &usPattern);
    

    //Step 3: Open device
    dwErrCde = DRV_DeviceOpen(lDevNum, &lDriverHandle);   
    if (dwErrCde != SUCCESS)
    {
        ErrorHandler(dwErrCde);
        printf("Program terminated!\n");

        printf("Press any key to exit....");
        getch();
        exit(1);
    }

    // Step 4: Enable event extension for pattern match
    tEnableEventEx.Pattern.usEventType = ADS_EVT_PATTERNMATCH;
    tEnableEventEx.Pattern.usEventEnable = true;  // enable event extension
    tEnableEventEx.Pattern.usCount   = 1;         // event count
    tEnableEventEx.Pattern.usEnable = 0xff;       // enable bit 0 to bit 7
    tEnableEventEx.Pattern.usValue = usPattern;   // target pattern
    dwErrCde = DRV_EnableEventEx(lDriverHandle, &tEnableEventEx);
    if (dwErrCde != SUCCESS)
    {
        ErrorStop(&lDriverHandle, dwErrCde);
        return;
    }

    // Step 5: Check event by DRV_CheckEvent in while loop and exit
    //         at pattern match or pressing any key
	tCheckEvent.EventType = &usEventType;
    tCheckEvent.Milliseconds = 300;
    printf("\nWaiting the pattern match value %xh.", usPattern);
    printf("\nPress any key to exit the waiting loop....");

    while(!kbhit())
    {
        //Step 5.1: Check event type
        dwErrCde = DRV_CheckEvent(lDriverHandle, &tCheckEvent);
        if( (dwErrCde == SUCCESS) && (usEventType == ADS_EVT_PATTERNMATCH) )
        {
		  if(usCardflag == 0)
			{
				// Step 5.1.1: Check the event type and returned data 
				//         by DRV_FDITransfer when some event is happened
				tFDITransfer.usEventType = ADS_EVT_PATTERNMATCH;
				tFDITransfer.ulRetData = &retValue; 

				dwErrCde = DRV_FDITransfer(lDriverHandle, &tFDITransfer);
				if (dwErrCde != SUCCESS)
				{
					ErrorStop(&lDriverHandle, dwErrCde);
					return;
				}

				printf("\nDesired pattern=%2xh. Matched pattern = %2xh",
                     usPattern, retValue);
		  }
		  else if(usCardflag == 1)
				printf("\nDesired pattern=%2xh. Matched pattern = %ld",
                     usPattern, ++retValue);

        }
    }
    if (kbhit()) getch();

    // Step 6: Disable event by DRV_EnableEventEx
	tEnableEventEx.Pattern.usEventType = ADS_EVT_PATTERNMATCH;
    tEnableEventEx.Pattern.usEventEnable = false;  // enable event extension
    tEnableEventEx.Pattern.usCount   = 1;         // event count
    tEnableEventEx.Pattern.usEnable = 0xff;       // enable bit 0 to bit 7
    tEnableEventEx.Pattern.usValue = usPattern;   // target pattern
    dwErrCde = DRV_EnableEventEx(lDriverHandle, &tEnableEventEx);
    if (dwErrCde != SUCCESS)
    {
        ErrorStop(&lDriverHandle, dwErrCde);
        return;
    }

    // Step 7: Close device
    dwErrCde = DRV_DeviceClose(&lDriverHandle);

    printf("\nPress any key to exit....");
    getch();

}//main

/**********************************************************************
 * Function: ErrorHandler
 *           Show the error message for the corresponding error code
 * input:    dwErrCde, IN, Error code
 * return:   none
 **********************************************************************/
void ErrorHandler(DWORD dwErrCde)
{
    char szErrMsg[180];

    DRV_GetErrorMessage(dwErrCde, szErrMsg);
    printf("\nError(%d): %s\n", dwErrCde & 0xffff, szErrMsg);
}//ErrorHandler

/**********************************************************************
 * Function:   ErrorStop
 *             Release all resource and terminate program if error occurs 
 * Paramaters: pDrvHandle, IN/OUT, pointer to Driver handle
 *             dwErrCde, IN, Error code.
 * return:     none             
 **********************************************************************/
void ErrorStop(long *pDrvHandle, DWORD dwErrCde)
{
    //Error message 
    ErrorHandler(dwErrCde);
    printf("Program terminated!\n");
    
    //Close device
    DRV_DeviceClose(pDrvHandle);
    
    printf("Press any key to exit....");
    getch();
    exit(1);
}//ErrorStop

⌨️ 快捷键说明

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