1、MODBUS通讯+C语言源代码盛年不重来,一日难再晨。及时宜自勉,岁月不待人。/*/ /*函数名称: strmcpy() *输入参数: 共 个参数; *输出参数: 共 个参数; *返回值: *需储存的参数: 共 个参数; *功能介绍: (1)字符数组拷贝; *修改日志: *2006-3-6 17:07 Ver. 1.00 开始编写; 完成; /* */ /*/ void strmcpy(unsigned char dest, unsigned char src, int count) int i; for(i = 0; i count; i +) desti = srci; desti = 0
2、; /*/ /*/ /*函数名称: bitmcpy() *输入参数: 共 个参数; *输出参数: 共 个参数; *返回值: *需储存的参数: 共 个参数; *功能介绍: (1)开关量数组拷贝; *修改日志: *2006-3-7 14:59 Ver. 1.00 开始编写; 完成; /* */ /*/ void bitmcpy(int dest, int src, int count) int i; for(i = 0; i count; i +) desti = srci; /*/ /*/ /*函数名称: strmcmp() *输入参数: 共 个参数; *输出参数: 共 个参数; *返回值: *
3、需储存的参数: 共 个参数; *功能介绍: (1)字符数组比较;相同则返回0,不相同则返回1; *修改日志: *2006-3-6 17:41 Ver. 1.00 开始编写; 完成; /* */ /*/ int strmcmp(unsigned char str1, unsigned char str2, int count) int i; for(i = 0; i count; i +) if(str1i != str2i) return 1; return 0; /*/ /*/ /*函数名称: Datamcmp() *输入参数: 共 个参数; *输出参数: 共 个参数; *返回值: *需储存
4、的参数: 共 个参数; *功能介绍: (1)浮点数组比较;相同则返回0,不相同则返回1; *修改日志: *2006-3-6 18:05 Ver. 1.00 开始编写; 完成; *2006-3-9 13:52 加了一层括号,以前是错误的 if(!(data1i - data2i -0.0001) /* */ /*/ int Datamcmp(float data1, float data2, int count) int i; for(i = 0; i count; i +) if(!(data1i - data2i -0.0001) return 1; return 0; /*/ /*/ /*
5、函数名称: Bitmcmp() *输入参数: 共 个参数; *输出参数: 共 个参数; *返回值: *需储存的参数: 共 个参数; *功能介绍: (1)开关量数组比较;相同则返回0,不相同则返回1; *修改日志: *2006-3-6 18:10 Ver. 1.00 开始编写; 完成; /* */ /*/ int Bitmcmp(int data1, int data2, int count) int i; for(i = 0; i count; i +) if(data1i != data2i) return 1; return 0; /*/ /*/ /*函数名称: GetCRC16() *输
6、入参数: 共 个参数; *输出参数: 共 个参数; *返回值: *需储存的参数: 共 个参数; *功能介绍: (1)CRC16校验; 返回校验码; *修改日志: *2005-11-28 16:40 Ver. 1.00 开始编写; 完成; /* */ /*/ unsigned short GetCRC16(unsigned char *puchMsg, unsigned short usDataLen) /* CRC 高位字节值表 */ unsigned char auchCRCHi256 = 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x0
7、1, 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, 0x8
8、0, 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, 0x0
9、0, 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, 0x8
10、1, 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, 0x0
11、1, 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
12、auchCRCLo256 = 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, 0xD
13、C, 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, 0xE
14、8, 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, 0x6
15、D, 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, 0x5
16、3, 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, 0x8
17、6, 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 auchCRCHiuIndex ; u
18、chCRCLo = auchCRCLouIndex ; 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); ToCom
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1