资源描述:
《Modbus-RTU和Modbus-TCP协议模板(C语言).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Modbus-RTU和Modbus-TCP协议模板(C语言)目录简介:2Modbus-RTU简介:2Modbus-TCP简介:3System.h:4CRC_Check.h5CRC_Check.c5Modbus_RTU.h8Modbus_RTU.c10Modbus_TCP.h27Modbus_TCP.c27简介:在单片机内部实现modbus协议,可以简单地将变量的值映射到modbus寄存器地址,这种方法是高效的,但是有以下缺点:1、通常不支持一条指令操作多个变量(寄存器);2、可移植性较差。本模板使用8位数组模拟modbus寄存器。06,10指令均
2、对数组进行写操作,同时记录寄存器的写入操作,在其他地方定时判断“写入标志”,将“写入标志”置位的“模拟寄存器”的值转移到相关变量,或进行其他操作。03指令读取最新数据,要求定时将变量的值写入“模拟寄存器”。本模板缺点是占用资源较多、效率较低,优点是完整支持了modbus的03,06,10指令。Modbus-RTU简介:1、Modbus读寄存器指令(0x03)地址(1B)+功能码(1B)+起始地址(2B)+寄存器数量(2B)+CRC(2B)返回:地址(1B)+功能码(1B)+字节数(1B)+数据值(2*“寄存器数量”Bytes或者“字节数”)+CR
3、C(2B)2、Modbus写单个寄存器指令(0x06)地址(1B)+功能码(1B)+寄存器地址(2B)+数据值(2B)+CRC(2B)返回:地址(1B)+功能码(1B)+寄存器地址(2B)+数据值(2B)+CRC(2B)(返回与发送的指令相同)3、Modbus写多个寄存器指令(0x10)地址(1B)+功能码(1B)+起始地址(2B)+写寄存器数量(2Bn)+字节计数(1Bn*2)+数据(n*2B)+CRC(2B)返回:地址(1B)+功能码(1B)+起始地址(2B)+写寄存器数量(2B)+CRC(2B)Modbus-TCP简介:在MODBUS-RT
4、U前添加6个字节,并删除MODBUS-RTU的CRC校验。示例指令:0051000000090110000100010200006个字节部分称为“MBAP报文头”示例:0051000000090051是客户端发出的校验信息,服务端原内容返回即可0000表示modbus-tcp协议0009表示后面还有9个字节后面部分:01100001000102000001设备地址10表示10指令0001起始地址0001写寄存器数量02字节计数0000数据响应指令:005100000006011000010001System.h:#ifndef_SYSTEM_H_
5、#define_SYSTEM_H_#include"stm32f10x.h"//=======================不常改动项==========================================/******stm32f10x.h第505、506、507行已经定义了u32,u16和u8******///typedefunsignedcharu8;//typedefunsignedshortintu16;//typedefunsignedintu32;//typedefunsignedcharINT8U;//typedef
6、unsignedshortintINT16U;//typedefunsignedintINT32U;//typedefsignedcharint8_t;//typedefsignedshortintint16_t;//typedefsignedintint32_t;//typedefsignedlonglongintint64_ttypedefunsignedlonglongintu64;typedefunsignedcharbool_t;#defineFALSE0#defineTRUE!FALSE#defineNULL0#endifCRC_Ch
7、eck.h#ifndef_CRC_CHECK_H_#define_CRC_CHECK_H_#include"system.h"u16CRC16_Verify(u8*puchMsg,u16usDataLen);#endifCRC_Check.c#include"CRC_Check.h"/**高位表*/staticconstu8auchCRCHi[]={0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
8、0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC