MODBUS通过Arduino板实现主备设备RS485通信
本示例展示了如何使用Simulink®Arduino®硬件支持包来实现MODBUS®RS485异步,MODBUS主设备和从设备之间的串行通信。它还显示了四种操作模式:主读、主写、从读和从写。
支持的Arduino单板:
Arduino MKR Zero
Arduino Mega 2560
Arduino Mega ADK
Arduino MKR 1000
Arduino MKR WIFI 1010
Arduino达芬奇
Arduino微
Arduino Nano 3.0
Arduino Nano 33 IoT
Arduino Uno
Arduino机器人控制板
Arduino机器人马达板
简介
简单,高效的通信,精简和快速的数据通信使MODBUS RTU RS485成为电子和仪器仪表行业中应用最广泛的串行通信协议之一。在这种客户端/服务器架构中,主设备作为客户端,从设备作为服务器。RS485网络上的每个设备都由一个唯一的8位地址或标识符引用。
本示例展示了使用两块Arduino®板作为主和从板的MODBUS RS485协议的功能Arduino MODBUS Master模型部署在前者和Arduino MODBUS Slave模型部署在后者上。
该示例还讨论了如何为主设备和从设备使用不同的操作模式。
掌握阅读:主设备通过RS485网络从从设备寄存器读取数据
大师写:主设备通过RS485网络将数据写入从设备寄存器
奴隶读:从机通过RS485网络从从机寄存器读取数据
奴隶写:从机通过RS485网络向从机寄存器写入数据
该表将MODBUS主设备和从设备引用的不同从设备寄存器分类。
注册类型|注册|允许主操作寄存器大小 ----------------------------------------------------------------------------------- 线圈| |出读写离散输入| |出阅读保持寄存器| 16位|读和写输入注册| 16位|阅读
先决条件
我们建议您填写Arduino硬件入门而且与Arduino硬件通信的例子。
所需的硬件
两块Arduino板
本例使用一块Arduino MKR 1000板作为主板,另一块Arduino MKR 1000板作为从板。您可以使用建议板列表中的任何Arduino板。
两根微型USB线
2个RS485屏蔽
依赖关系
实现此示例需要您在每个受支持的Arduino板上成功部署这些Simulink®模型:
仿真软件模型名称| |部署硬件的目的 ------------------------------------------------------------------------------------------------ 1。arduino_modbus_slave |两个Arduino板中的第一个|作为从设备2。arduino_modbus_master | Arduino两块板中的第二块|主用设备
任务1:建立连接
MODBUS主备设备必须连接在同一RS485网络上,才能正常通信。
任务2:配置主模型和校准参数
这个支持包为MODBUS主机提供了一个预配置的模型。
要打开这个模型,在MATLAB®命令窗口中运行以下命令:
open_system (“arduino_modbus_master”)
master的Simulink模型可以分为两部分,写到Slave而且从Slave读取,基于主设备可以在从设备寄存器上执行的操作类型。在本例中,根据从寄存器大小和允许的主操作,预先配置了Simulink主模型的默认值。
MODBUS主配置的写从操作模式
主写操作对线圈和保持寄存器有效。本例使用两个MODBUS RS485主写块分别在线圈寄存器和保持寄存器上实现写操作。
要对线圈寄存器执行1位写操作,请更改滑块开关的位置。的在
位置描述了数据1
都写在这些寄存器上,而从
位置描述了数据0
都写在寄存器上。在该模型中使用了两个滑块开关,其输出是多路复用的,并作为输入馈送到MODBUS RS485主写块之一。
您可以配置以下参数来将数据从滑块开关写入线圈寄存器:
中输入标识符的唯一8位从地址从设备地址参数。在这个模型中,它被配置为
1
.选择写多个线圈选项中的函数参数。
中指定第一个线圈寄存器的地址,以通知主机向两个线圈寄存器写入数据线圈的地址参数。默认值为
0
.输入
2
在线圈数参数。
类似地,要在保持寄存器上执行16位主写操作,本例使用一个计数器,从0到255进行计数。自由运行计数器的输出作为输入馈送到第二个MODBUS RS485主写块。
您可以配置以下参数将数据从空闲运行计数器写入保持寄存器:
中输入标识符的唯一8位从地址从设备地址参数。在这个模型中,它被配置为
1
.选择写入多个保持寄存器选项中的函数参数。
命令中第一个线圈寄存器的地址,可以通知主控制器向保持寄存器写入数据持有登记册地址参数。默认值为
0
.输入
1
在贮存登记册数目参数。
MODBUS主配置从读操作模式
主读操作对所有从设备寄存器(线圈、保持、离散输入和输入)都有效。采用两个MODBUS RS485 Master Read块分别对输入寄存器和离散输入寄存器进行读操作。
1位脉冲发生器用于将数据写入离散输入寄存器。从离散输入寄存器读取的数据可在MODBUS主读块的数据端口上用于离散输入寄存器。只有当status port值为时,此数据才有效1
,表示读取操作成功,并且其数据端口上存在有效数据。灯指示器用于表示从离散输入寄存器读取的1位数据。
您可以配置以下参数从离散输入寄存器读取1位脉冲发生器数据:
中输入标识符的唯一8位从地址从设备地址参数。在这个模型中,它被配置为
1
.确保配置相同从设备地址用于MODBUS RS485从写块的离散输入寄存器。选择离散输入选项中的函数参数。
要通知主程序从一个离散输入寄存器读取数据,请在离散输入地址参数。确保为离散输入寄存器配置与MODBUS RS485从写块中使用的相同的离散输入寄存器地址。默认值为
0
.设置样品时间参数。
类似地,本例使用一个自由运行的计数器将数据写入输入寄存器。从输入寄存器读取的数据在输入寄存器的MODBUS RS485主读块的数据端口上可用。只有当status port值为时,此数据才有效1
,表示读取操作成功,并且其数据端口上存在有效数据。显示块用于显示从输入寄存器读取的16位数据。
您可以配置以下参数从输入寄存器读取计数器数据:
中输入标识符的唯一8位从地址从设备地址参数。在这个模型中,它被配置为
1
.确保配置相同从设备地址用于MODBUS RS485从写块的输入寄存器。选择读输入寄存器选项中的函数参数。
要通知主机从一个输入寄存器读取数据,请在输入寄存器地址参数。确保输入寄存器的输入寄存器地址与MODBUS RS485从写块中使用的相同。默认值为
0
.设置样品时间参数。
任务3:配置从机模型和校准参数
这个支持包为MODBUS从站提供了一个预配置的模型。
要打开这个模型,在MATLAB®命令窗口中运行以下命令:
open_system (“arduino_modbus_slave”)
从机的Simulink模型可以分为两部分,写信给主人而且大师朗读,基于从设备可以对其寄存器执行的操作类型。本例中预先配置了Simulink从模型的默认值。
MODBUS Slave Configuration for Write to Master操作模式
本例使用两个MODBUS RS485从写块分别在输入寄存器和离散输入寄存器上实现写操作。
为了在输入寄存器上执行16位从写操作,这个例子使用了一个计数器,从0到255进行计数。自由运行计数器的输出作为输入馈送到MODBUS RS485从写块,用于输入寄存器。
您可以配置以下参数将数据从空闲计数器写入输入寄存器:
选择写入输入寄存器选项中的函数参数。
要通知主机从一个输入寄存器读取数据,请在输入寄存器地址参数。确保为输入寄存器配置与MDOBUS RS485主读块中使用的相同的输入寄存器地址。默认值为
0
.
类似地,本例使用1位脉冲发生器将数据写入离散输入寄存器。
您可以配置以下参数将1位数据从脉冲发生器写入离散输入寄存器:
选择写入离散输入选项中的函数参数。
要通知主机从一个输入寄存器读取数据,请在离散输入地址参数。确保为输入寄存器配置与MDOBUS RS485主读块中使用的相同的离散输入寄存器地址。默认值为
0
.
MODBUS从配置从主模式的操作
本例使用两个MODBUS RS485从读块分别在线圈和保持寄存器上实现读操作。
从设备通过两个滑块开关读取主设备写入的数据。从线圈寄存器读取的1位数据可在MODBUS RS485 Slave read块的数据端口上用于线圈寄存器。只有当status port值为时,此数据才有效1
,表示读取操作成功,并且其数据端口上存在有效数据。灯指示器用于表示从线圈寄存器读取的1位数据。
您可以配置以下参数从线圈寄存器读取1位滑块开关数据:
选择读盘选项中的函数参数。
要通知从机从线圈寄存器读取数据,请在线圈的地址参数。确保线圈寄存器的线圈寄存器地址与MDOBUS RS485主写块中使用的线圈寄存器地址相同。默认值为
0
.设置样品时间参数。
类似地,从设备读取作为输入馈送给主设备的自由运行计数器数据。从保持寄存器读取的16位数据可在MODBUS RS485从读块的数据端口上用于保持寄存器。只有当status port值为时,此数据才有效1
,表示读取操作成功,并且其数据端口上存在有效数据。显示块用于显示从保持寄存器读取的16位数据。
您可以配置以下参数从保持寄存器读取16位计数器数据:
选择读保持寄存器选项中的函数参数。
要通知从服务器从持有寄存器读取数据,请在持有登记册地址参数。确保为保持寄存器配置与MDOBUS RS485主写块中使用的相同的保持寄存器地址。默认值为
0
.设置样品时间参数。
任务4:在主备设备上运行Simulink模型
1.将作为从设备和主设备的Arduino板连接到主机。
2.在硬件的标签。Arduino MODBUS MasterSimulink模型,在模式部分中,选择在船上跑然后点击监视和调优.
3.在硬件的标签。Arduino MODBUS SlaveSimulink模型,在模式部分中,选择在船上跑然后点击监视和调优.
4.线圈寄存器:
MODBUS RS485主读块:改变滑块开关的位置,将数据写入线圈寄存器。
MODBUS RS485从读块:检查线圈寄存器上的读操作状态。观察指示灯显示从线圈寄存器获得的相应数据。验证灯的状态是否显示了写在线圈寄存器上的正确数据。
5.保持寄存器:
MODBUS RS485主写块:计数器开始向保持寄存器写入0 ~ 255之间的数据。
MODBUS RS485从读块:检查保持寄存器上读操作的状态。观察从持有寄存器获得的数据对应的计数器值,并验证在显示块上是否显示相同的值。
6.输入注册:
MODBUS RS485从写块:从0 ~ 255开始计数。
MODBUS RS485主读块:检查输入寄存器的读操作状态。观察从输入寄存器获得的数据对应的计数器值,并验证在Display块上是否显示相同的值。
7.离散输入寄存器:
MODBUS RS485从写块:1位脉冲发生器开始在0 ~ 1之间切换。
MODBUS RS485主读块:检查离散输入寄存器上的读操作状态。观察显示从离散输入寄存器获得的相应数据的灯。验证灯的状态是否显示了写入离散输入寄存器的正确数据。
其他可以尝试的事情
实现MODBUS主用和从用模型,对所有寄存器类型的多个从设备寄存器进行读写。
使用MODBUS从设备,如温度传感器、湿度传感器等,将实时数据传递给Arduino板作为主设备。
以PID控制器为从设备,Arduino板为主控设备,实现监控系统。