主要内容

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主写块之一。

您可以配置以下参数来将数据从滑块开关写入线圈寄存器:

  1. 中输入标识符的唯一8位从地址从设备地址参数。在这个模型中,它被配置为1

  2. 选择写多个线圈选项中的函数参数。

  3. 中指定第一个线圈寄存器的地址,以通知主机向两个线圈寄存器写入数据线圈的地址参数。默认值为0

  4. 输入2线圈数参数。

类似地,要在保持寄存器上执行16位主写操作,本例使用一个计数器,从0到255进行计数。自由运行计数器的输出作为输入馈送到第二个MODBUS RS485主写块。

您可以配置以下参数将数据从空闲运行计数器写入保持寄存器:

  1. 中输入标识符的唯一8位从地址从设备地址参数。在这个模型中,它被配置为1

  2. 选择写入多个保持寄存器选项中的函数参数。

  3. 命令中第一个线圈寄存器的地址,可以通知主控制器向保持寄存器写入数据持有登记册地址参数。默认值为0

  4. 输入1贮存登记册数目参数。

MODBUS主配置从读操作模式

主读操作对所有从设备寄存器(线圈、保持、离散输入和输入)都有效。采用两个MODBUS RS485 Master Read块分别对输入寄存器和离散输入寄存器进行读操作。

1位脉冲发生器用于将数据写入离散输入寄存器。从离散输入寄存器读取的数据可在MODBUS主读块的数据端口上用于离散输入寄存器。只有当status port值为时,此数据才有效1,表示读取操作成功,并且其数据端口上存在有效数据。灯指示器用于表示从离散输入寄存器读取的1位数据。

您可以配置以下参数从离散输入寄存器读取1位脉冲发生器数据:

  1. 中输入标识符的唯一8位从地址从设备地址参数。在这个模型中,它被配置为1.确保配置相同从设备地址用于MODBUS RS485从写块的离散输入寄存器。

  2. 选择离散输入选项中的函数参数。

  3. 要通知主程序从一个离散输入寄存器读取数据,请在离散输入地址参数。确保为离散输入寄存器配置与MODBUS RS485从写块中使用的相同的离散输入寄存器地址。默认值为0

  4. 设置样品时间参数。

类似地,本例使用一个自由运行的计数器将数据写入输入寄存器。从输入寄存器读取的数据在输入寄存器的MODBUS RS485主读块的数据端口上可用。只有当status port值为时,此数据才有效1,表示读取操作成功,并且其数据端口上存在有效数据。显示块用于显示从输入寄存器读取的16位数据。

您可以配置以下参数从输入寄存器读取计数器数据:

  1. 中输入标识符的唯一8位从地址从设备地址参数。在这个模型中,它被配置为1.确保配置相同从设备地址用于MODBUS RS485从写块的输入寄存器。

  2. 选择读输入寄存器选项中的函数参数。

  3. 要通知主机从一个输入寄存器读取数据,请在输入寄存器地址参数。确保输入寄存器的输入寄存器地址与MODBUS RS485从写块中使用的相同。默认值为0

  4. 设置样品时间参数。

任务3:配置从机模型和校准参数

这个支持包为MODBUS从站提供了一个预配置的模型。

要打开这个模型,在MATLAB®命令窗口中运行以下命令:

open_system (“arduino_modbus_slave”

从机的Simulink模型可以分为两部分,写信给主人而且大师朗读,基于从设备可以对其寄存器执行的操作类型。本例中预先配置了Simulink从模型的默认值。

MODBUS Slave Configuration for Write to Master操作模式

本例使用两个MODBUS RS485从写块分别在输入寄存器和离散输入寄存器上实现写操作。

为了在输入寄存器上执行16位从写操作,这个例子使用了一个计数器,从0到255进行计数。自由运行计数器的输出作为输入馈送到MODBUS RS485从写块,用于输入寄存器。

您可以配置以下参数将数据从空闲计数器写入输入寄存器:

  1. 选择写入输入寄存器选项中的函数参数。

  2. 要通知主机从一个输入寄存器读取数据,请在输入寄存器地址参数。确保为输入寄存器配置与MDOBUS RS485主读块中使用的相同的输入寄存器地址。默认值为0

类似地,本例使用1位脉冲发生器将数据写入离散输入寄存器。

您可以配置以下参数将1位数据从脉冲发生器写入离散输入寄存器:

  1. 选择写入离散输入选项中的函数参数。

  2. 要通知主机从一个输入寄存器读取数据,请在离散输入地址参数。确保为输入寄存器配置与MDOBUS RS485主读块中使用的相同的离散输入寄存器地址。默认值为0

MODBUS从配置从主模式的操作

本例使用两个MODBUS RS485从读块分别在线圈和保持寄存器上实现读操作。

从设备通过两个滑块开关读取主设备写入的数据。从线圈寄存器读取的1位数据可在MODBUS RS485 Slave read块的数据端口上用于线圈寄存器。只有当status port值为时,此数据才有效1,表示读取操作成功,并且其数据端口上存在有效数据。灯指示器用于表示从线圈寄存器读取的1位数据。

您可以配置以下参数从线圈寄存器读取1位滑块开关数据:

  1. 选择读盘选项中的函数参数。

  2. 要通知从机从线圈寄存器读取数据,请在线圈的地址参数。确保线圈寄存器的线圈寄存器地址与MDOBUS RS485主写块中使用的线圈寄存器地址相同。默认值为0

  3. 设置样品时间参数。

类似地,从设备读取作为输入馈送给主设备的自由运行计数器数据。从保持寄存器读取的16位数据可在MODBUS RS485从读块的数据端口上用于保持寄存器。只有当status port值为时,此数据才有效1,表示读取操作成功,并且其数据端口上存在有效数据。显示块用于显示从保持寄存器读取的16位数据。

您可以配置以下参数从保持寄存器读取16位计数器数据:

  1. 选择读保持寄存器选项中的函数参数。

  2. 要通知从服务器从持有寄存器读取数据,请在持有登记册地址参数。确保为保持寄存器配置与MDOBUS RS485主写块中使用的相同的保持寄存器地址。默认值为0

  3. 设置样品时间参数。

任务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板为主控设备,实现监控系统。

Baidu
map