我们用电脑作为Modbus主站来对Modbus从站来进行读写调试。首先需要对设备的工作参数进行配置,下面重点讲解一下如何配置CAN数据ID和寄存器首地址的映射表来具体实现CAN数据和Modbus总线数据相互转换。
1.将设备断电后拆开,将拨码开关2拨到on如下图,之后将模块上电。
2.然后用RS485转CAN线连接设备,如下图所示。
3.进入配置软件,如下图所示。
4.选择正确的com端口,点击“连接”,如下图所示。
5.点击“读参数”,显示“UPload Date Success”,点击确定,如下图。
6.进入“Recieve CAN”进入接收CAN总线数据映射表,点击“添加”按钮添加一条空数据,如下图所示。
7.之后对新添加的数据进行修改,本经验中的设置是:COB-ID 18F00401、扩展帧、数据帧、modbus寄存器首地址01、数据长度8。设置好后点击“设置参数”按钮如下图所示。
设置成功后,将设备拨码开关2拨下来,重新上电后,设置生效。这时设备就可以连接CAN设备和Modbus主站,进行通信了。注意:映射关系可以按需要配置。
在串行链路中,我们(Modbus)使用一种简单的主从协议(客户机/服务器协议)进行通信。客户机作为主站,向服务器发送请求;服务器(从站)接到请求后,对请求进行分析并作出应答。我和小伙伴的通信帧被称为应用数据单元(Application Data Unit,ADU),它包括通信地址段、功能代码段、数据段和校验段,如下图:
其中,功能代码段和数据段组合称为协议数据单元(Protocol Data Unit,PDU)。功能代码段占用一个字节,取值范围为1~255,其中128~255为保留值,用于异常消息应答报文。1~127为功能代码编号,其中65~72和100~110为用户自定义编码,具体请看下面这张图片:
通用功能编码(Public function code)是已经公布的功能代码,有确定的功能,用户不能修改。比如:0x01表示读取线圈,0x02表示读取离散量的输入等等。下图是一些常用的功能代码的描述:
早期在RS485串行通信中规定ADU的最大长度为256个字节,其中:通信地址占用1个字节,校验段占用2个字节,所以协议数据单元(PDU)的最大长度为256-1-2=253 字节。而我三弟(Modbus TCP)因为要增加一个7个字节的MBAP(MODBUS Application Protocol)的报文头,所以他的ADU的长度=253+7=260 字节。