好文档 - 专业文书写作范文服务资料分享网站

MODBUS通讯+C语言源代码 - 图文 

天下 分享 时间: 加入收藏 我要投稿 点赞

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 };

unsigned char auchCRCLo[256] = {

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 };

unsigned char uchCRCHi = 0xFF ; /* 高CRC字节初始化 */ unsigned char uchCRCLo = 0xFF ; /* 低CRC 字节初始化 */ unsigned uIndex = 0; /* CRC循环中的索引 */

while (usDataLen--) /* 传输消息缓冲区 */

{

uIndex = uchCRCHi ^ *puchMsg++ ; /* 计算CRC */ uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ; uchCRCLo = auchCRCLo[uIndex] ; }

return (unsigned short)((unsigned short)uchCRCHi << 8 | uchCRCLo) ; }

/*****************************************************************************/

/*********************************************************************************/ /*函数名称: SendRtuCmdToModBus() *输入参数: 共 个参数; *输出参数: 共 个参数; *返回值: 无

*需储存的参数: 共 个参数; *功能介绍:

(1)发送ModBus RTU 指令到 Modbus Slave,加上CRC16校验码; *修改日志:

*[2005-11-28 16:40] Ver. 1.00 开始编写; 完成; *[2006-3-1 9:02] 返回类型改为void; /* */ /*********************************************************************************/ void SendRtuCmdToModBus(int ModPort, unsigned char cmd[], unsigned short len) {

unsigned short CRC16;

CRC16=GetCRC16(cmd,len); ToComBufn(ModPort,cmd,len); ToCom(ModPort, (unsigned char)(CRC16 >> 8 & 0x00FF)); /* send CRC16 high */

ToCom(ModPort, (unsigned char)(CRC16 & 0x00FF)); /* send

CRC16 low */ }

/*****************************************************************************/

/*********************************************************************************/ /*函数名称: ReadModBusRtuSlave() *输入参数: 共 8 个参数; *输出参数: 共 5 个参数;

*返回值: 成功与否 1:成功, 2:失败; *需储存的参数: 共 0 个参数; *功能介绍:

(1)读取ModBusRtuSlave,并解码输出反馈字符串相关内容; ReadModBusRtuSlave(COMPORT1, ModAddr, ModFunction, ModByteNum,

ModData, &ModDataLen, ModTimeout=10, waitTime=30) *修改日志:

*[2005-11-28 16:40] Ver. 1.00 开始编写; 完成; *[2006-3-1 9:23]

增加了int counter = 0;

unsigned char ModBusMessage[MOD_STR_MAX_LEN]; *[2006-3-1 13:46]

增加了 strmcpy(ModData, ModBusMessage + 3, ModBusIdx - 5);

/* */ /*********************************************************************************/

int ReadModBusRtuSlave(int ModPort, unsigned char *ModAddr, unsigned char *ModFunction, unsigned char *ModByteNum,

unsigned char ModData[], unsigned char *ModDataLen, unsigned ModTimeout, unsigned waitTime) {

unsigned char data; unsigned long t; int i;

unsigned short CRC16; int ModBusIdx = 0;

int counter = 0;

unsigned char ModBusMessage[MOD_STR_MAX_LEN] = {'\\0'};

while((!(IsCom(ModPort)) && (counter < waitTime))) {

DelayMs(1); counter ++; }

StopWatchStart(MODBUS_STOP_WATCH); do {

while(IsCom(ModPort) && (ModBusIdx < MOD_STR_MAX_LEN - 1)) {

data = ReadCom(ModPort);

ModBusMessage[ModBusIdx ++]=data; StopWatchStart(MODBUS_STOP_WATCH); /* Print(\ }

StopWatchReadValue(MODBUS_STOP_WATCH, &t); }

while(t <= ModTimeout);

if (ModBusIdx == 0) return 0; ModBusMessage[ModBusIdx] = '\\0'; StopWatchStop(MODBUS_STOP_WATCH);

CRC16 = GetCRC16(ModBusMessage,ModBusIdx - 2);

/* for(i=0; i> 8 & 0x00FF) == ModBusMessage[ModBusIdx - 2] && (unsigned char)(CRC16 & 0x00FF) == ModBusMessage[ModBusIdx - 1]) {

*ModAddr = ModBusMessage[0]; *ModFunction = ModBusMessage[1]; *ModByteNum = ModBusMessage[2];

strmcpy(ModData, ModBusMessage + 3, ModBusIdx - 5); /* Print(\ \ /*test*/ /* for(i = 3; i < ModBusIdx - 2; i++) {

ModData[i - 3] = ModBusMessage[i]; }

ModData[i] = '\\0'; */

*ModDataLen = ModBusIdx - 5;

/* Print(\ return 1; }

else {

*ModDataLen = 0; return 0;

/* CRC16 error */

/* Print(\ } }

/*-------------------------------------------------------------------------------*/

/*********************************************************************************/ /*函数名称: ResponseFromModBusRtuSlave()

*输入参数: 共 8 个参数; *输出参数: 共 5 个参数;

*返回值: 成功与否 1:成功, 2:失败; *需储存的参数: 共 0 个参数; *功能介绍:

(1)写参数到ModBusRtuSlave后,ModbusRtuSlave反馈字符串; *修改日志:

*[2006-3-1 12:34] Ver. 1.00 开始编写; *[2006-3-1 12:48] 完成; *[2006-3-6 16:32]

strcpy(totalStr, ModBusMessage);

改为 strmcpy(totalStr, ModBusMessage, ModBusIdx); /* */ /*********************************************************************************/ int ResponseFromModBusRtuSlave(int ModPort, unsigned char totalStr[],

MODBUS通讯+C语言源代码 - 图文 

0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0
推荐度:
点击下载文档文档为doc格式
80bt478kp07b3ef97wu606i7k4ff8500zdy
领取福利

微信扫码领取福利

微信扫码分享