第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/5/18 18:16:04 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

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语言源代码 - 图文  的文档
MODBUS通讯+C语言源代码 - 图文 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c80bt478kp07b3ef97wu606i7k4ff8500zdy_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top