主要内容

通过Arduino板实现主从设备之间的RS485通信

这个例子展示了如何使用Arduino®硬件的Simulink®支持包金宝app实现MOD金宝appBUS®RS485异步,串行通信之间的MODBUS主设备和从设备。它还显示了四种操作模式:主读、主写、从读和从写。

金宝app支持Arduino电路板:

  • Arduino MKR零

  • Arduino Mega 2560.

  • Arduino Mega Adk.

  • Arduino MKR 1000

  • Arduino MKR WiFi 1010

  • arduino leonardo

  • Arduino Micro.

  • Arduino 3.0纳米

  • Arduino Nano 33 IoT

  • Arduino Uno.

  • Arduino机器人控制板

  • Arduino机器人电机板

介绍

简单,高效的通信和简化和快速数据通信使Modbus RTU RS485成为电子和仪器仪表行业中最广泛使用的串行通信协议之一。在此客户端/服务器体系结构中,主设备充当客户端,从设备充当服务器。RS485网络上的每个设备由唯一的8位地址或标识符引用。

此示例显示了Modbus RS485协议的功能,使用两个Arduino®板充当主和奴隶,其中Arduino MODBUS主模型部署在前者和Arduino MODBUS奴隶部署在后者的模型。

该示例还处理了用于主设备和从设备的不同操作模式。

  • 主人读书:主设备从RS485网络中从从设备寄存器读取数据

  • 大师写:主设备通过RS485网络将数据写入从设备寄存器

  • 奴隶读:从设备从RS485网络读取从设备寄存器的数据读取数据

  • 奴隶写:从机通过RS485网络写数据到从机注册

此表类别由Modbus主设备和从设备引用的不同从设备寄存器。

注册类型|注册尺寸|允许在注册时进行主操作------------------------------------------------------------------------卷|1比特|读写离散输入|1比特|读控股寄存器|16位|读写输入寄存器|16位| Read

先决条件

我们建议您完成Arduino®硬件入门与Arduino®硬件进行沟通例子。

需要硬件

  • 两个Arduino电路板

此示例使用一个Arduino MKR 1000板作为主设备,另一个Arduino MKR 1000板作为从站。您可以使用建议板列表中的任何Arduino Boards。

  • 两个微型USB电缆

  • 两个RS485盾牌

依赖性

实现此示例要求您在每个支持的Arduino板上成功部署这些Simulink®模型:金宝app金宝app

金宝appSimulink型号名称|部署硬件|目的  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - ----------------------------------------- 1.Arduino_modbus_slave.|第一个Arduino Board |表现为从设备2.Arduino_Modbus_master |两个Arduino板中的第二个|表现为主设备

任务1:连接设置

MODBUS主从设备必须连接在同一RS485网络上,才能正常通信。

任务2:配置主模型和校准参数

此支持包为金宝appModbus Master提供了一种预配置的模型。

要打开此模型,请在matlab®命令窗口中运行此命令:

open_system ('arduino_modbus_master'

主机的S金宝appimulink模型可分为两部分,写到奴隶阅读奴隶,基于操作类型主机可以在从设备寄存器上执行。在此示例中,Simulink主模型的默认值取决于从设备金宝app大小和允许的主操作。

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 Master配置从从动操作模式读取

主读操作在所有从设备寄存器(线圈,保持,离散输入和输入)上有效。两个Modbus RS485主读块用于分别在输入和离散输入寄存器上实现读取操作。

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

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

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

  2. 选择读取离散输入选项函数参数。

  3. 方法中指定数据的地址,以通知主机从一个离散输入寄存器中读取数据离散输入地址参数。确保配置与离散输入寄存器的Modbus RS485从写块中使用的相同的离散输入寄存器地址。默认值是0.

  4. 设定采样时间参数。

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

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

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

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

  3. 要通知主人从一个输入寄存器读取数据,请指定其地址输入寄存器地址参数。确保配置与输入寄存器的Modbus RS485从写块中使用相同的输入寄存器地址。默认值是0.

  4. 设定采样时间参数。

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

此支持包为金宝appModbus Slave提供了一种预配置的模型。

要打开此模型,请在matlab®命令窗口中运行此命令:

open_system (“arduino_modbus_slave”

从机的S金宝appimulink模型可分为两部分,写信给主人读主人,基于操作类型,从设备可以在其寄存器上执行。在此示例中,Simulink从设备模型的默认值在此示例金宝app中预先配置。

Modbus从站配置写入Master操作模式

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

要在输入寄存器上执行16位从属写入操作,此示例使用计数器计数为0到255的计数器。从自由运行计数器的输出被馈送为输入的Modbus RS485从写块的输入登记。

您可以配置以下参数以将数据从自由运行计数器写入INPUT寄存器:

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

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

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

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

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

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

MODBUS从主模式读取操作的从配置

这个例子使用两个MODBUS RS485 Slave Read块来分别实现线圈和持有寄存器上的读操作。

从设备使用两个滑动开关读取主设备写入的数据。这个从线圈寄存器读取的1位数据可以在MODBUS RS485 Slave read块的数据端口上用于线圈寄存器。仅当状态端口值为值时,此数据才有效1,指示读取操作成功,其数据端口上存在有效数据。灯指示器用于表示从线圈寄存器读取的1位数据。

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

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

  2. 要通知从设备读取来自线圈寄存器的数据,请指定其地址线圈地址参数。确保配置MDOBUS RS485主编写块的相同线圈寄存器地址,用于线圈寄存器。默认值是0.

  3. 设定采样时间参数。

类似地,从设备读取作为向主设备的输入馈送的自由运行计数器数据。从保持寄存器读取的16位数据可在Modbus RS485从站Read块的数据端口上获得用于保持寄存器。仅当状态端口值为值时,此数据才有效1,指示读取操作成功,其数据端口上存在有效数据。显示块用于显示从保持寄存器读取的16位数据。

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

  1. 选择读控股寄存器选项函数参数。

  2. 要通知从站读取从控件寄存器的数据,请指定其地址持有注册地址参数。确保配置MDOBUS RS485主写入块中使用的相同的保持寄存器地址,用于保持寄存器。默认值是0.

  3. 设定采样时间参数。

任务4:在主备设备上运行模型

1.将充当从设备的Arduino板和主设备连接到主计算机。

2.在这方面硬件选项卡Arduino MODBUS奴隶金宝appSimulink模型,单击监控和曲调

3.在硬件选项卡Arduino MODBUS奴隶金宝appSimulink模型,单击监控和曲调

4.线圈寄存器:

  • Modbus RS485主读块:更改滑块交换机的位置以将数据写入线圈寄存器。

  • Modbus RS485从属读块:验证线圈寄存器上的读取操作的状态。观察显示从线圈寄存器获得的相应数据的灯。验证灯泡状态是否呈现在线圈寄存器上写入正确的数据。

5.持有注册:

  • MODBUS RS485 Master Write block:计数器开始向保持寄存器写入从0到255的数据。

  • Modbus RS485从读块:检查保持寄存器上的读操作状态。观察与从保持寄存器获得的数据对应的计数器值,并验证显示块是否显示了相同的值。

6.输入寄存器:

  • Modbus RS485从属写块:计数器从0到255的值开始计数。

  • MODBUS RS485 Master Read block:检查输入寄存器上读操作的状态。观察与从输入寄存器获得的数据相对应的计数器值,并验证Display块上是否显示了相同的值。

7.离散输入寄存器:

  • MODBUS RS485从写块:1位脉冲发生器开始在0和1之间切换。

  • Modbus RS485主读块:检查离散输入寄存器上的读操作状态。观察显示从离散输入寄存器获得的相应数据的灯。验证灯泡状态是否呈现在离散输入寄存器上写入的正确数据。

其他可以尝试的事情

  • 实现MODBUS的主和从模型来读写所有寄存器类型的多个从设备寄存器。

  • 利用温度传感器、湿度传感器等MODBUS从机,将实时数据传输给Arduino板作为主控设备。

  • 使用PID控制器作为从设备和Arduino板实现监控系统作为主设备。