?? checkitem.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 + -