首页 技术服务 智能显示屏 Modbus智能显示器如何被客户终端控制 (透过实体与虚拟切换器控制LED灯与指示灯)

Modbus智能显示器如何被客户终端控制 (透过实体与虚拟切换器控制LED灯与指示灯)

前言

为了推广 SmartDisplay 并使其使用普及和简单易懂,我们介绍了各式不同的操作情境。在本文中,我们将介绍另一个示范情境,希望它对初学者和有经验的开发人员都有所帮助,让您迅速掌握基本原理。

 

说明

Modbus协议在工业自动化中被广泛用于控制各种设备和传感器。在这种情况下,Arduino开发板可以成为系统整合和主机控制的有用工具。透过Modbus协议,Arduino板可以利用各种传感器和切换按钮控制智能显示屏、量测仪器、指示灯和LED。在本文中,我们将展示使用Arduino-2560和RS485载板透过Modbus协议来控制SmartDisplay的方法。该程序演示了如何使用Modbus寄存器读取传感器值、更改显示页面和根据传感器读数控制LED。

系统方块图
系统方块图

 

本应用需要以下组件:

  1. Smart Display Modbus 7”
  2. ARDUINO Mega 2560
  3. ARDUINO Mega 2560的RS485 Modbus载板
  4. Arduino 开发环境 v2.0.4
  5. Modbus RS485 连接器
  6. 实体按钮
  7. 旋钮
  8. LED
  9. GUI-Builder v0.4.2 或更高的版本

这个示范分为三个部分:

  1. 在GUI Builder中设计项目
  2. 建立和上传项目
  3. 编译Arduino主机
 

以GUI builder设计项目

首先,建立一个新项目,输入项目名称,然后选择装置类别,此应用选择7寸的装置。通讯协议选择Modbus,显示方向为横向。接着在UI模板中选择空白模板,最后点选Create按钮,如图所示。

以GUI builder设计项目 - 1

 

完成上述设定后,会得到一个空白的设计模板。

以GUI builder设计项目 - 2

 

根据应用情境,需要新增第二个页面。因此,点击page按钮,然后点击+号按钮。

以GUI builder设计项目 - 3

 

可以在Resource选单中更改背景样式。

以GUI builder设计项目 - 4

 

在Page区域可以选择背景样式。

以GUI builder设计项目 - 5

 

现在回到第一个页面的工作区。根据示范场景,选择切换按钮,将其拖放到页面设计区域。对于时速表和指示灯也是相同的操作。

以GUI builder设计项目 - 6

 

建立并上传项目

完成上述步骤并建立两个不同的页面后,现在就可以开始设定项目了。切换到“Page info”页面。点选“Device”,选择“Device Property”。然后选择COM端口,设定与装置相同的鲍率,最后,点击Upload project将此项目上传。

建立并上传项目 -1

 

当项目上传完成后,点击“OK”:

建立并上传项目 -2

 

上传完成后,您将在SmartDisplay上看到开机画面。

建立并上传项目 -3

 

启动屏幕后,将会显示第一页。

建立并上传项目 -4

 

编译Arduino主机

此范例所需要的寄存器地址都在Arduino IDE程序中被定义,如下图所示:

程序首先定义实体按钮传感器、可变电阻传感器和LED的脚位。然后使用ModbusMaster库初始化Modbus通讯。程序为控制显示页面、指示灯、时速表和切换按钮设置了Modbus寄存器地址。

编译Arduino主机 - 1

 

如果您想了解主机和SmartDisplay之间如何透过 RS485 进行通讯,请参考 GUI BUILDER中的通讯纪录。下图是“切换按钮”的数据,用户可以藉此参考如何对SmartDisplay下命令来切换按纽。数据字节的第二个字节是00 06十六进制值。它代表切换按钮的地址,将此值转换为十进制值后,它将是6。可以使用它来写入或插入数据到按钮中。但是,在这种情况下,切换按钮被用作读取或从SmartDisplay中检索数据的函数。在这里,我们使用注册地址“7”来从切换按钮读取数据。

编译Arduino主机- 2

 

现在,问题来了,为什么我们要使用注册地址“7”来从切换按钮接收数据呢?建议您查阅SmartDisplay Modbus的规格书以获得更详细的讯息。下图是规格书的部分截图,其中显示了第一个对象(对象)切换按钮使用的地址。

编译Arduino主机 - 3

 

下图显示了“时速表”的讯号数据。该数据告诉我们如何访问时速表的地址。数据字节的第二个字节是00 6A十六进制值。它代表时速表的地址,将此值转换为十进制值后,它将是106。可以使用它来将数据写入或插入到时速表物件中。

编译Arduino主机 - 4

 

下图显示了“指示灯”的程序数据。此数据告诉我们如何访问指示灯的地址。数据字节的第二个字节是00 CE十六进制值。它代表指示灯的地址,将此值转换为十进制值后,它将是206。可以使用它来将数据写入或插入到指示灯对象中。

编译Arduino主机 - 5

 

ADC_REF:常量设置为5V,表示ADC(模数转换器)的参考电压,用于调整实体按钮的灵敏度。GROVE_VCC:常量设置为5,表示电路中使用的Grove接口的VCC电压。FULL_ANGLE:常量设置为300,表示电路中使用的旋转角度的全值。该注释表明,该值以度为单位进行测量。

编译Arduino主机 - 6

 

在这里,设置了许多必要的变量,声明了数据类型并初始化为零。

编译Arduino主机 - 7

 

定义所有脚位模式和外部组件(如实体按钮和LED)的设置。同时在串行通信中设置波特率,如下图所示:

编译Arduino主机 - 8

 

下图显示了“ChangePageFunction”的定义。使用“writeSingleRegister”函数写入数据。

编译Arduino主机 - 9

 

下图显示了当Arduino主机读取变量电阻(旋转角度)传感器的值变化时,它会通过Modbus将值发送到SmartDisplay来更改时速表的值。当值小于120时,脚位13上的LED处于关闭状态,指示灯为绿色。当值等于或大于120时,LED亮起,指示灯颜色变为红色。

编译Arduino主机 - 10

 

下图显示了当Arduino主机读取实体按钮传感器的值变化时,它会透过Modbus将值发送到SmartDisplay来更改页面。

编译Arduino主机 - 11

 

下图显示了Arduino主机透过Modbus从SmartDisplay接收切换按钮的值变化,以打开脚位12上的LED。

编译Arduino主机 - 12

 

这是非常重要的部分,我们在这里使用“writeSingleRegister”函数来写入或插入数据,以与SmartDisplay进行通讯,并使用“readHoldingRegisters”函数从SmartDisplay读取或接收数据。在这里特别需要注意延迟函数,以与像时速表这样的活动小对象进行通讯。在Modbus中,一旦我们发送数据并得到确认,就可以再次发送数据。因此,在使用Modbus协议进行数据传输和接收时,使用延迟函数变得非常必要。

编译Arduino主机 - 13

 

成功透过Arduino IDE验证和上传该程序后,就可以执行演示项目了。当切换按钮处于关闭状态时,脚位12上的LED也处于关闭位置。当切换按钮处于ON模式时,LED立即打开,如下图所示:

编译Arduino主机 - 14

 

根据演示范例,时速表由变量寄存器传感器控制。当表盘值介于0和120之间时,指示灯显示为绿色,脚位13上的LED则关闭。但是,当表盘值超过120时,指示灯变为红色,脚位13上的LED亮起,如下图所示:

编译Arduino主机 - 15

 

在此项目中,可以利用实体按钮在不同页面之间切换。当按下实体按钮传感器时,显示屏会切换到第二个页面,再次按下时,它会切换回第一个页面,如下图所示。

编译Arduino主机 - 16

 

恭喜,在SmartDisplay 7寸上完成了实作范例! 相关程序及更多详情可参考 GitHub (https://bit.ly/3oT0o5M)。

有关此项目中使用的Modbus RS485 Shield请参考此连结 (https://media.digikey.com/pdf/Data%20Sheets/DFRobot%20PDFs/DFR0259_Web.pdf) 。 以下是实际的硬件设置图:

编译Arduino主机 - 17

 

结语

本文的目的是展示如何使用Arduino开发板和Modbus协议来控制传感器和指示灯,让使用者了解如何通过使用RS485来设计自己的主机控制器,且学习如何透过主机端接收和发送命令,对SmartDisplay进行全面的控制。

回分类页
go top
close