读书人

经过VC++6.0的MFC界面根据modbus RTU通

发布时间: 2013-06-25 23:45:41 作者: rapoo

通过VC++6.0的MFC界面根据modbus RTU通信协议和三菱FX-2N通信协议编写串口程序
9.2MODBUS通信协议通信流程
通讯方式为主从式通讯方式,由主机向从机发送一命令,从机接收到命令后,给出一个应答信号即完成一次通讯。
主机向从机发送一个读数据命令,从机收到该命令后,返回一个数据应答命令。
主机向从机发送一个写数据命令,从机收到该命令后,将该命令原样返回。
如果主机发送的命令中字节校验出错或者命令校验位出错或命令非法,从机不作响应。

9.2.1通讯代码
十六进制(HEX) 8位码

9.2.2数据格式
起始位:1位
数据位:8位
校验位:无
停止位:1位

9.2.3波特通讯率(bps)
9600





9.2.4帧格式
功能码执行操作帧格式
01读数据命令帧帧头 通讯地址 功能码 寄存器1地址高8位 寄存器1地址低8位 寄存器2地址高8位 寄存器2地址低8位 CRC校验码低8位 CRC校验码高8位 帧尾
返回帧帧头 通讯地址 功能码 返回数据1高8位 返回数据1低8位
返回数据2高8位 返回数据2低8位 CRC校验码低8位
CRC校验码高8位 帧尾
02写数据命令帧帧头 通讯地址 功能码 寄存器地址高8位 寄存器地址低8位
写入数据高8位 写入数据低8位 CRC校验码低8位
CRC校验码高8位 帧尾
返回帧成功则按原样返回


1、读取数据
1)上位机下传信息:
定义 帧头通讯地址功能码 寄存器1地址寄存器2地址CRC校验码帧尾
数据4AADDR 01Adderss1Address2CRC1606
字节数11 12222
注:a)帧头:一帧数据的起始标志位;
b)通讯地址:监控设备地址。范围:01—99;
c)功能码:只能为1(读数据)、2(写数据);
d)寄存器地址:即为表1-1的寄存器地址;
e)CRC校验码:低字节在前,高字节在后,帧头帧尾不参与计算CRC校验码;
f)帧尾:一帧数据的结束标志位;
2)下位机返回信息:
定义帧头通讯地址功能码数据1数据2CRC校验码帧尾
数据4AADDR 01 Data1Data2CRC1606
字节数1112222
注:成功则按上述格式返回,失败则不响应。
例1:主机要读出通讯地址为02号控制器的一个左张力值(寄存器地址为003C)和右张力值(寄存器地址为003D)
其命令帧为
帧头通讯地址功能码寄存器1地址高8位寄存器1地址低8位寄存器2地址高8位寄存器2地址低8位CRC校验码低8位CRC校验码高8位帧尾帧尾
4A020100 3C003D3DD70006

其返回帧为:
帧头通讯地址功能码返回数据1高8位返回数据1低8位返回数据2高8位返回数据2低8位CRC校验码低8位CRC校验码高8位帧尾帧尾
4A0201002E00359C140006
注:若通信成功,将返回值转化成十进制,并保留该参数对应的小数点位数,所得值即为该参数的实际值。如:读取左张力值为002E,转化成十进制为46,由表1-1知,其参数范围为0.0~Fmax,保留了一位小数,故实际左张力值为4.6。

1、上位机向仪表写数据命令帧格式
1)上位机下传信息:
定义帧头通讯地址功能码寄存器地址写入数据CRC校验码帧尾
数据4AADDR02AddressDATACRC1606
字节数1112222
注:a)帧头:一帧数据的起始标志位;
b)通讯地址:监控设备地址,范围:01—99;
c)功能码:只能为1(读数据)、2(写数据);
d)寄存器地址:即为表1-1的寄存器地址;
e)写入数据:一次只能写入一个数据;
f)CRC校验码:低字节在前,高字节在后,帧头帧尾不参与计算CRC校验码;
g)帧尾:一帧数据的结束标志位;
2)下位机返回信息:
定义帧头通讯地址功能码寄存器地址写入数据CRC校验码帧尾
数据4AADDR02AddressDATACRC1606
字节数1112222
注:成功则按上述格式返回,失败这不响应。

例2:上位机要将通讯地址为02号控制器的自动张力设定值(寄存器地址为0039)设置为10.0kg,则上位机向控制器发送写数据命令帧:

其命令帧为
帧头通讯地址功能码寄存器地址高8位寄存器地址低8位写数据高8位写数据低8位CRC校验码低8位CRC校验码高8位帧尾帧尾

4A020200390064A9EC0006


其返回帧为:
帧头通讯地址功能码寄存器地址高8位寄存器地址低8位写数据高8位写数据低8位CRC校验码低8位CRC校验码高8位帧尾帧尾

4A020200390064A9EC0006
注:若通信成功,自动张力设定值会被更改为10.0kg;
老师给了这样的任务,之前从来没学,C++也是才学习,麻烦大神们帮忙编写
[解决办法]
先去搜下 MFC 串口通信,把串口实现了,网上有手把手教程的,然后添加你的通讯协议代码啊。可以先用串口调试助手试试通讯啊
[解决办法]
先把自己电脑上的两个串口连起来,用串口调试助手试试自己给自己发数据
然后学会自己编程,自己给自己发送并接受数据
然后研究ModbugRTU协议,确定要发送的数据的格式
最后研究三菱通信协议,确定要发送的数据的内容

一口吃个胖子是不可能的,你这零基础就只能一步一步学,而且别想当然的“我想学啥学啥”,有啥学啥,你还不到知道自己该学啥的水平
至于求大神帮忙编写,祝你好运吧,反正我没用过三菱的设备,也没兴趣替人写代码

读书人网 >C++

热点推荐