首页 解决方案 主机与 Smart Display 的 Modbus 通信 (开关与指示灯控制)

主机与 Smart Display 的 Modbus 通信 (开关与指示灯控制)

October 26,2023

介紹

主机与 Smart Display 的 Modbus 通信

为了帮助开发人员快速上手 WINSTAR Smart Display,并更直观地了解其操作方式,我们持续提供针对不同应用场景的实用 Demo 示例。本文将介绍另一个 Modbus 通信示例,帮助初次接触 Smart Display 以及已有开发经验的工程人员快速掌握基本原理。

Modbus 广泛应用于工业自动化领域,可用于各类设备和传感器之间的通信与控制。在本应用中,Arduino 开发板作为主机控制器进行系统集成。通过 Modbus,Arduino 可配合不同的传感器和切换按钮,对 Smart Display、Gauge(仪表)、指示灯和 LED 进行控制。本示例采用 Arduino Mega 2560 搭配 RS485 扩展板,通过 Modbus 与 Smart Display 进行通信。

示例程序演示如何通过 Modbus 寄存器读取传感器数值、切换显示页面,并根据传感器读取值控制 LED。

系统框图
系统框图

 

本应用需要以下组件:

  1. 支持 Modbus 的 7 英寸 Smart Display
  2. Arduino Mega 2560
  3. 适用于 Arduino Mega 2560 的 RS485 Modbus 扩展板
  4. Arduino IDE v2.0.4
  5. Modbus RS485 转接器
  6. 实体按键
  7. 可变电阻(旋转角度)传感器
  8. LED
  9. GUI Builder v0.4.2 或更高版本
 

本示例分为三个部分:

  1. 使用 GUI Builder 设计 Demo 项目。
  2. 编译并上传项目。
  3. 编写 Arduino 主机程序。
 

使用 GUI Builder 设计 Demo 项目

首先,打开最新版 GUI Builder 并创建一个新项目。输入项目名称,并确认系统默认自动选择的项目文件夹。接着选择设备类型,本示例选择 7 英寸设备。然后选择通信协议,显示方向保持默认的横屏模式。在 UI Template 中选择 Blank,最后单击 Create 按钮创建新项目,如下图所示。

使用 GUI Builder 设计 Demo 项目 - 1

 

项目创建完成后,将进入以下页面。

使用 GUI Builder 设计 Demo 项目 - 2

 

根据本示例的应用场景,还需要添加一个页面。单击 Page 按钮,然后单击“+”按钮新增页面。

使用 GUI Builder 设计 Demo 项目 - 3

 

可以在 Resource 面板中选择自定义背景样式。

使用 GUI Builder 设计 Demo 项目 - 4

 

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

使用 GUI Builder 设计 Demo 项目 - 5

 

接下来返回第一页的 Controls 区域。根据本示例的应用场景,选择 Toggle Button,并将其拖放到页面布局区域。Gauge 和 Indicator 也按照相同方式添加到页面中。

使用 GUI Builder 设计 Demo 项目 - 6

 

编译并上传项目

完成前面的操作,创建两个独立页面,并在第一页添加 Toggle Button、Gauge 和 Indicator 控件后,即可开始编译项目。进入 Page Info 区域,单击 Device 按钮并选择 Device Properties。确认 Protocol 设置,然后选择 COM 端口并设置波特率。接着单击“Connect to device”按钮连接设备。最后单击 Upload 按钮上传项目,如下图所示,并等待项目上传完成。

编译并上传项目 - 1

 

项目上传完成后,单击 OK 按钮,如下图所示。

编译并上传项目 - 2

 

上传完成后,Smart Display 将显示启动画面,如下图所示。

编译并上传项目 - 3

 

启动画面结束后,Smart Display 将切换至第一页。至此,通过 GUI Builder 完成项目编译和上传,如下图所示。

编译并上传项目 - 4

 

编写 Arduino 主机程序

Arduino IDE 程序中定义了本示例所需的所有寄存器地址,如下图所示。程序首先定义实体按键传感器、可变电阻传感器和 LED 的引脚,然后使用 ModbusMaster 库初始化 Modbus 通信。同时,程序还设置了用于控制显示页面、Indicator、Gauge 和 Toggle Button 的 Modbus 寄存器地址。

编写 Arduino 主机程序 - 1

 

如果想进一步了解这一通信过程,可以查看 GUI Builder 中 Test Device 或 Simulator 区域的通信日志,了解主机设备如何通过 Modbus RS485 与 Smart Display 进行通信。

下图显示了 Toggle Button 的通信日志数据。通过这些日志数据,可以了解如何访问 Smart Display 中 Toggle Button 的数据。Data Byte 的第二个字节为十六进制值 00 06,代表 Toggle Button 的地址;转换为十进制后,其值为 6,可用于向 Toggle Button 写入数据。不过在本示例中,Toggle Button 用于从 Smart Display 读取数据,因此使用寄存器地址“7”读取 Toggle Button 的数据。

编写 Arduino 主机程序 - 2

 

那么,为什么要使用寄存器地址“7”来读取 Toggle Button 的数据?建议查阅 Smart Display 的 Modbus 数据手册,以进一步了解这一通信过程。下图为数据手册的部分截图,其中显示了第一个对象(Widget)Toggle Button 所使用的地址。

编写 Arduino 主机程序 - 3

 

下图显示了 Gauge 的通信日志数据。通过这些日志数据,可以了解如何访问 Gauge 的地址。Data Byte 的第二个字节为十六进制值 00 6A,代表 Gauge 的地址;转换为十进制后,其值为 106,可用于向 Gauge Widget 写入数据。

编写 Arduino 主机程序 - 4

 

下图显示了 Indicator 的通信日志数据。通过这些日志数据,可以了解如何访问 Indicator 的地址。Data Byte 的第二个字节为十六进制值 00 CE,代表 Indicator 的地址;转换为十进制后,其值为 206,可用于向 Indicator Widget 写入数据。

编写 Arduino 主机程序 - 5

 

ADC_REF:该常量设置为 5V,表示 ADC(模数转换器)的参考电压,用于调节实体按键单元的灵敏度。GROVE_VCC:该常量设置为 5,表示电路中所使用 Grove 接口的 VCC 电压。FULL_ANGLE:该常量设置为 300,表示电路中旋转角度的满量程值。根据代码注释,该数值以度为单位。

编写 Arduino 主机程序 - 6

 

这里设置了程序所需的多个变量,声明相应的数据类型,并将初始值设为 0。

编写 Arduino 主机程序 - 7

 

程序中定义了所有引脚模式,以及实体按键、LED 等外部组件的相关设置。同时设置串口通信的波特率,如下图所示:

编写 Arduino 主机程序 - 8

 

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

编写 Arduino 主机程序 - 9

 

下图显示,当 Arduino 主机读取到可变电阻(旋转角度)传感器的数值变化时,会通过 Modbus 通信协议将该数值发送至 Smart Display,以改变 Gauge 的数值。当 Gauge 数值小于 120 时,13 号引脚上的 LED 处于 OFF 状态,Indicator 显示为绿色;当 Gauge 数值等于或大于 120 时,LED 点亮,Indicator 则变为红色。

编写 Arduino 主机程序 - 10

 

下图显示,当 Arduino 主机读取到实体按键传感器的数值变化时,会通过 Modbus 通信协议将该数值发送至 Smart Display,以切换显示页面。

编写 Arduino 主机程序 - 11

 

下图显示,Arduino 主机通过 Modbus 通信协议从 Smart Display 接收 Toggle Button 的数值变化,并根据接收到的数值控制 12 号引脚上的 LED。

编写 Arduino 主机程序 - 12

 

这一部分非常重要。程序使用 writeSingleRegister 函数向 Smart Display 写入数据,并使用 readHoldingRegisters 函数从 Smart Display 读取数据。与 Gauge 等动态 Widget 进行通信时,还需要特别注意 delay 函数。在 Modbus 通信中,发送数据并收到确认后,才能再次发送数据。因此,在通过 Modbus 进行数据发送和接收时,需要使用适当的延时。

编写 Arduino 主机程序 - 13

 

通过 Arduino IDE 成功验证并上传程序后,即可运行 Demo 场景。当 Toggle Button 处于 OFF 状态时,连接在 12 号引脚上的外部 LED 也处于关闭状态;当 Toggle Button 切换至 ON 状态时,外部 LED 会立即点亮,如下图所示:

编写 Arduino 主机程序 - 14

 

在本 Demo 场景中,Gauge 由可变电阻(旋转角度)传感器控制。当 Gauge 数值在 0 到 120 之间时,Indicator 显示为绿色,13 号引脚上的 LED 处于关闭状态;当 Gauge 数值超过 120 时,Indicator 变为红色,13 号引脚上的 LED 点亮,如下图所示:

编写 Arduino 主机程序 - 15

 

在本 Demo 场景中,可以通过实体按键在不同页面之间进行切换。按下实体按键传感器后,Smart Display 会切换至第二个页面;再次按下时,则会切换回第一个页面,如下图所示。

编写 Arduino 主机程序 - 16

 

至此,7 英寸 Smart Display 的 Demo 项目已完成。该示例结合多种传感器和 LED,可通过实体按键切换显示页面,并对 Gauge、Indicator 和外部 LED 进行控制。相关程序及本 Demo 项目的更多详细信息,请参考 GitHub 示例程序

注:有关本 Demo 项目所使用 Modbus RS485 Shield 的更多信息,请参考 Modbus RS485 Shield 参考资料。实际硬件连接如下图所示。

编写 Arduino 主机程序 - 17

 

总结

总体而言,本示例展示了如何使用 Arduino 开发板和 Modbus 协议实现传感器与指示灯的控制。通过 Modbus 寄存器,程序可以读取传感器数值、切换显示页面,并根据传感器读取值控制 LED。无论是初次接触 Modbus 的开发人员,还是希望进一步了解 Modbus 协议及其在 Smart Display 控制应用中的工程人员,都可以通过本示例了解相关的基本操作与应用方式。

对显示器解决方案有疑问?您想做的,由我们实现。 联络我们!

订阅

接收最新显示器技术知识与新品消息

联络我们

价格/规格书/一般查询

技术支持

联系我们询问技术内容

go top
联络我们
close

我们重视您的隐私

通过点击「允许所有 Cookie」,代表您同意在您的设备上存储 Cookie 以增强网站浏览体验、分析网站使用情况并协助我们的营销和网站效能优化工作。您可以在我们的隐私权政策中找到有关于此的更多信息。

我们重视您的隐私

Winstar 及部分第三方在 www.winstar.com.tw 上使用 cookies。关于 cookie 的种类、用途及相关第三方的详细信息,请参见下文及我们的《Cookie 政策》。请点击“允许全部”来同意我们使用 cookies,以确保您在我们网站上获得最佳体验。您也可以设置您的偏好或拒绝 cookies(必要的 cookies 除外)。

管理同意声明

永久启用
必要的 Cookie

这些 Cookie 是必不可少的,以便让您在浏览网站并使用其功能上有更好地体验,例如设置您的隐私偏好、登录或填写窗体。

分析 Cookie

这些也被称为「统计cookie」,用于收集您使用网站的信息,例如您访问了哪些页面以及点击了哪些连结。查看详细信息