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

📄 checkitem.c

📁 工业组态软件modbus驱动源代码, 包括帮助文件.共享.
💻 C
字号:
#include <windowsx.h>
#include <windows.h>
#include <string.h>
#include <stdlib.h>

#include "hmemcpy.h"
#include "chainmgr.h"
#include "config.h"
#include "protypes.h"
#include "udprot.h"
#include "NTSrvr.h"
#include "CheckItem.h"
#include "debug.h"
 
//16位CRC校验表
static unsigned char auchCRCHi[]={
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40
};
static unsigned char auchCRCLo[]={
0x00,0xc0,0xc1,0x01,0xc3,0x03,0x02,0xc2,0xc6,0x06,0x07,0xc7,0x05,0xc5,0xc4,0x04,
0xcc,0x0c,0x0d,0xcd,0x0f,0xcf,0xce,0x0e,0x0a,0xca,0xcb,0x0b,0xc9,0x09,0x08,0xc8,
0xd8,0x18,0x19,0xd9,0x1b,0xdb,0xda,0x1a,0x1e,0xde,0xdf,0x1f,0xdd,0x1d,0x1c,0xdc,
0x14,0xd4,0xd5,0x15,0xd7,0x17,0x16,0xd6,0xd2,0x12,0x13,0xd3,0x11,0xd1,0xd0,0x10,
0xf0,0x30,0x31,0xf1,0x33,0xf3,0xf2,0x32,0x36,0xf6,0xf7,0x37,0xf5,0x35,0x34,0xf4,
0x3c,0xfc,0xfd,0x3d,0xff,0x3f,0x3e,0xfe,0xfa,0x3a,0x3b,0xfb,0x39,0xf9,0xf8,0x38,
0x28,0xe8,0xe9,0x29,0xeb,0x2b,0x2a,0xea,0xee,0x2e,0x2f,0xef,0x2d,0xed,0xec,0x2c,
0xe4,0x24,0x25,0xe5,0x27,0xe7,0xe6,0x26,0x22,0xe2,0xe3,0x23,0xe1,0x21,0x20,0xe0,
0xa0,0x60,0x61,0xa1,0x63,0xa3,0xa2,0x62,0x66,0xa6,0xa7,0x67,0xa5,0x65,0x64,0xa4,
0x6c,0xac,0xad,0x6d,0xaf,0x6f,0x6e,0xae,0xaa,0x6a,0x6b,0xab,0x69,0xa9,0xa8,0x68,
0x78,0xb8,0xb9,0x79,0xbb,0x7b,0x7a,0xba,0xbe,0x7e,0x7f,0xbf,0x7d,0xbd,0xbc,0x7c,
0xb4,0x74,0x75,0xb5,0x77,0xb7,0xb6,0x76,0x72,0xb2,0xb3,0x73,0xb1,0x71,0x70,0xb0,
0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,
0x9c,0x5c,0x5d,0x9d,0x5f,0x9f,0x9e,0x5e,0x5a,0x9a,0x9b,0x5b,0x99,0x59,0x58,0x98,
0x88,0x48,0x49,0x89,0x4b,0x8b,0x8a,0x4a,0x4e,0x8e,0x8f,0x4f,0x8d,0x4d,0x4c,0x8c,
0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40
};

BOOL
WINAPI
UT_CheckItemName(LPSTR lpszPointName,
              LPPPS ppp)
{
	int	i;
	BOOL bPointOk;
	char szItem[16],szItemSub[16];

#ifdef DEBUG_CALL_TRAFFIC
    if (Verbose)
        debug ("ValidatePoint: %Fs", lpszPointName);
#endif

	bPointOk = FALSE;
	lstrcpy((LPSTR)szItemSub, lpszPointName);
    lstrcpy((LPSTR)szItem, lpszPointName);
	i = atoi(szItem);
	if ( (i >= 1) && (i <= 9999) ) {
		ppp->ppsPlcDataType = ITEM_HOLDING_COIL;
        ppp->ppsDdeType = (PTTYPE)PTT_DISCRETE;
        ppp->ppsAlias = (WORD) i-1;
		ppp->ppsCount = 1;
		bPointOk = TRUE;
	}
	if ((i >= 10001) && (i <= 19999) ) {
		ppp->ppsPlcDataType = ITEM_INPUT_COIL;
		ppp->ppsDdeType = (PTTYPE)PTT_DISCRETE;
        ppp->ppsAlias = (WORD) i-10001;
		ppp->ppsCount = 1;
		bPointOk = TRUE;
	  }
    if ((i >= 30001) && (i <= 39999) ) {
		ppp->ppsPlcDataType = ITEM_INPUT_REG;
		ppp->ppsAlias = (WORD) i-30001;
		ppp->ppsNumBytes = 2;
        switch (szItemSub[6]) {
			case 'F':
				ppp->ppsDdeType = (PTTYPE)PTT_REAL;
				ppp->ppsSubType = PLCS_REAL;
				ppp->ppsCount   = 2;
				break;
			case 'L':
				ppp->ppsDdeType = (PTTYPE)PTT_INTEGER;
                ppp->ppsSubType = PLCS_DWORD;
				ppp->ppsCount       = 2;
				break;
			default:	
				ppp->ppsDdeType = (PTTYPE)PTT_INTEGER;
				ppp->ppsSubType = PLCS_NONE;
				ppp->ppsCount   = 1;
		}
		bPointOk = TRUE;
	  }
    if ((i >= 40001) && (i <= 49999) ) {
		ppp->ppsPlcDataType = ITEM_HOLDING_REG;
        ppp->ppsAlias       = (WORD) i-40001;
		ppp->ppsNumBytes    = 2;
        switch (szItemSub[6]) {
			case 'F':
				ppp->ppsDdeType = (PTTYPE)PTT_REAL;
				ppp->ppsSubType = PLCS_REAL;
				ppp->ppsCount   = 2;
				break;
			case 'L':
				ppp->ppsDdeType = (PTTYPE)PTT_INTEGER;
                ppp->ppsSubType = PLCS_DWORD;
				ppp->ppsCount   = 2;
				break;
			case 'B':
				ppp->ppsDdeType = (PTTYPE)PTT_INTEGER;
                ppp->ppsSubType = PLCS_BCD;
				ppp->ppsCount   = 1;
				break;
			default:	
				ppp->ppsDdeType = (PTTYPE)PTT_INTEGER;
				ppp->ppsSubType = PLCS_NONE;
				ppp->ppsCount   = 1;
		}
		bPointOk = TRUE;
	}
	if (bPointOk) {
		if(szItemSub[5] == ':'){
			ppp->ppsSubType = PLCS_BITP;
			ppp->ppsDdeType = (PTTYPE)PTT_DISCRETE;	
			if( szItemSub[7]>48 && szItemSub[7] < 58)
				ppp->ppsBitPos = szItemSub[7] - 48 
					+ (szItemSub[6]-48)*10;
			else
				ppp->ppsBitPos = szItemSub[6] - 48;
		}
		else
			ppp->ppsBitPos = 0;       
	}

	return bPointOk;
}

WORD 
CRC16(BYTE* pData,WORD iCRClen)
{
	unsigned short polynomial;
	unsigned short result;
	int i,j,k;
	polynomial = 0xA001;
	result = 0xFFFF;
	for(j=0;j<iCRClen;j++)
	{   
		result = result ^ pData[j];
		for(i=1;i<=8;i++)
		{
			if (k=result & 0x1)
			{  
				result = result >> 1;
				result = result ^ polynomial;
			}
			else
				result = result >> 1;
		}
	}

	return result;
}

//CRC查表校验
WORD 
CRC16FromTable(BYTE* puchMsg, int usDataLen)
{
	unsigned char uchCRCHi=0xff;
	unsigned char uchCRCLo=0xff;
	WORD uIndex;
	while(usDataLen--){
		uIndex=uchCRCHi^*(puchMsg++);
		uchCRCHi=uchCRCLo^auchCRCHi[uIndex];
		uchCRCLo=auchCRCLo[uIndex];
	}
	return(	uchCRCHi<<8|uchCRCLo );
}

⌨️ 快捷键说明

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