我们重视您的隐私
通过点击「允许所有 Cookie」,代表您同意在您的设备上存储 Cookie 以增强网站浏览体验、分析网站使用情况并协助我们的营销和网站效能优化工作。您可以在我们的隐私权政策中找到有关于此的更多信息。
为了帮助开发人员快速上手 WINSTAR Smart Display,并更直观地了解其操作方式,我们持续提供针对不同应用场景的实用 Demo 示例。本文将介绍另一个 Modbus 通信示例,帮助初次接触 Smart Display 以及已有开发经验的工程人员快速掌握基本原理。
Modbus 广泛应用于工业自动化领域,可用于各类设备和传感器之间的通信与控制。在本应用中,Arduino 开发板作为主机控制器进行系统集成。通过 Modbus,Arduino 可配合不同的传感器和切换按钮,对 Smart Display、Gauge(仪表)、指示灯和 LED 进行控制。本示例采用 Arduino Mega 2560 搭配 RS485 扩展板,通过 Modbus 与 Smart Display 进行通信。
示例程序演示如何通过 Modbus 寄存器读取传感器数值、切换显示页面,并根据传感器读取值控制 LED。

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

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

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

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

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

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

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

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

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

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

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

如果想进一步了解这一通信过程,可以查看 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 的数据。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

至此,7 英寸 Smart Display 的 Demo 项目已完成。该示例结合多种传感器和 LED,可通过实体按键切换显示页面,并对 Gauge、Indicator 和外部 LED 进行控制。相关程序及本 Demo 项目的更多详细信息,请参考 GitHub 示例程序。
注:有关本 Demo 项目所使用 Modbus RS485 Shield 的更多信息,请参考 Modbus RS485 Shield 参考资料。实际硬件连接如下图所示。

总体而言,本示例展示了如何使用 Arduino 开发板和 Modbus 协议实现传感器与指示灯的控制。通过 Modbus 寄存器,程序可以读取传感器数值、切换显示页面,并根据传感器读取值控制 LED。无论是初次接触 Modbus 的开发人员,还是希望进一步了解 Modbus 协议及其在 Smart Display 控制应用中的工程人员,都可以通过本示例了解相关的基本操作与应用方式。
通过点击「允许所有 Cookie」,代表您同意在您的设备上存储 Cookie 以增强网站浏览体验、分析网站使用情况并协助我们的营销和网站效能优化工作。您可以在我们的隐私权政策中找到有关于此的更多信息。