0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

拓普微智能液晶显示模块HMI自定义通信协议

Topway_LCD 2021-12-09 14:01 次阅读

一. HMI与通讯协议

随着工业技术的发展,HMI(人机界面)的应用领域愈加广泛。通过拓普微的智能液晶显示模块实现的自定义通信协议能在一定程度上维护企业的数据隐秘性,提升产品功能的多样性,并且能够解决企业通信协议不兼容问题。

HMI的串口通信规则,除了标准Modbus协议产品,大多都是根据原厂制定的协议规则进行。然而许多企业也有其各自的通信规则及报文格式,在配套使用HMI开发应用时,企业希望保留或使用自己的功能特性和数据交互规则,用以匹配自己协议的应用开发。

基于此,拓普微的HMI串口屏有一套较为成熟的设计方案。本文将介绍智能显示模块HMT050DTA-D如何基于LUA脚本设计实现,在原厂提供的库函数中,有开放串口控制类的API,通过这些API函数能够实现企业的自定义通信协议设计。

二. 自定义通讯协议

此次设计将通过拓普微的智能液晶屏HMI的串口,配合LUA程序,应用串口控制类API,实现目标协议通信功能。

HMI串口通信协议,常见的报文格式一般由“帧头”、“长度码”、“功能码”、“参数数据信息”、“帧尾”、“校验码”几个部分组成。通信过程中,系统将实时查询串口的数据接收,获取符合协议的报文数据,执行规定的指令功能。

如下“表2-1:自定义协议通信报文格式”,定义了一种常见的通信报文格式。(硬件串口参数说明:波特率“115200”;数据位“8”;停止位“1”;校验如下表)

表2-1:自定义协议通信报文格式

*1. 指令长度码,计算“命令码”到“校验码”中所有数据的字节总数。
*2. 指令地址、数据、参数信息,是多字节数据,数据都是高位在前,低位在后。
*3. 指令校验码,计算“帧头”到“帧尾”中所有的数据的ModbusCRC-16校验。

三. 功能需求分析

1. HMI原通信协议屏蔽

目前使用的型号HMT050DTA-D默认是TOPWAY协议通信的,存在指令错误码回复机制。因此在自定义协议通信过程中,如果没有屏蔽原协议,可能会存在串口占用,回复数据混乱的情况。所以在设计自己协议通信时首先要把原厂的协议屏蔽,避免数据冲突。

2. 接收指令数据处理与解析回复

获取串口数据后,需要提取符合自定义协议规则的指令以便后续对指令进行解析并执行指令功能。因此需要定义接收指令数组,用以存储串口中符合协议规则的指令数据。

协议通信中,也存在指令回复功能,比如读取/访问地址数据的指令。在解析完接收到的指令后,我们要对部分指令进行响应,所以需要定义回复指令数组,对读取/访问操作的指令进行回复。

3. 协议通信指令功能要求

在LUA程序设计中,需要实现的功能板块有:①从串口接收区中获取符合规定自定义规则的指令,存储在接收指令数组;②调用接收到的指令数据,对指令数据进行解析;③调用相应的功能处理函数,执行指令功能。对于读取/访问信息类的指令,还需要操作串口发送数据进行回复。

解析的指令目前主要实现4功能板块。①功能码“0x01”:访问/读取变量数据;②功能码“0x02”:改写变量数据;③功能码“0x03”:工程显示跳页;④功能码“0x04”:屏幕背光亮度控制。主要板块功能关系如图3-1所示。


图3-1 协议通信主要功能板块

四. Lua实现自定义协议

1. 屏蔽原厂通信协议

在拓普微提供的LUA库函数中存在TOPWAY协议禁用函数,可以在程序初始化时调用该函数对原厂的通信协议进行屏蔽。如图4-1

调用函数:hmt.bypass(is)
输入:参数“is”使能开关。
使用说明:当“is=1”时屏蔽原TOPWAY协议,“is=0”时使用TOPWAY协议。

2. 自定义协议的数据结构

2.1 接收指令数组

定义数组:CustProt_recvcmd = {}
类型:全局数组,初始化时定义。
说明:存储串口接收区中符合协议规则的指令数据。接收指令数据过程中,如过不符合定义的规则,需清空接收数组。

2.2 回复指令数组

定义数组:CustProt_sendcmd = {}
类型:全局数组,初始化时定义。
说明:根据协议规则,存储需要通过串口进行回复的指令数据。发送完成后清空数组。


3. 自定义协议设计实现

LUA程序设计,主要实现函数功能见流程图4-2。

3.1 检查串口接收区数据

调用函数:hmt.uartisempty()
输出:返回“1”时表示串口接收buf为空;返回“0”时表示串口接收区存在数据。
使用说明:使用该函数判断串口接收区是否存在数据。等于0时再去执行指令获取函数。

3.2 获取符合自定义协议的指令数据

构造函数:get_CustProtrecvcmd()
输出:接收指令数组 CustProt_recvcmd。
说明:将符合自定义协议的指令存储在全局的接收指令数组;期间会对指令中帧头、帧尾、长度码3种类型的数据格式进行判断。不符合自定义协议时将清空指令数组。

调用函数:hmt.getchar()
输出:串口接收队列的第一个字节数据。
使用说明:在函数get_CustProtrecvcmd()中,获取符合自定义协议指令时会频繁调用该函数,对串口接收区的数据进行筛选。

3.3 自定义协议的数据检查及校验

构造函数:CmdCheck(CustProt_recvcmd)
输入:接收指令数组 CustProt_recvcmd。
说明:函数会对接收指令数组中的数据码和校验码2个类型的数据格式进行判断。不符合自定义协议时将清空指令数组,回复错误码,并重新开始获取指令。

3.4 指令数据解析

构造函数:CmdHandle(CustProt_recvcmd)
输入:接收指令数组 CustProt_recvcmd。
说明:函数根据指令中的功能码,分类处理指令数据,如数字数据和字符串数据。

3.5 执行指令功能

3.5.1 读变量数据功能

构造函数:_ReadvariableReturnCmd (Addr)
调用函数:hmt.readvp16(Addr)\hmt.readvp32(Addr)\hmt.readvpstr(Addr)等。
输入:自定义协议中指令的地址数据。
说明:当功能码为“0x01”时使用该函数处理,函数将根据指令中的地址类型,分类调用hmt读变量函数,读回数据并存储在回复指令数组,最后通过串口发送返回。

调用函数:hmt.putchar(byte)
输入:指令字节数据。
说明:读取后回复指令时,会频繁调用该函数,将回复指令数组中的数据通过串口发送。

3.5.2 写变量数据功能

构造函数:_Writevariable(addr, value)
_Writevariable1(addr, strvalue)
调用函数:hmt.writevp16(Addr, value)\hmt.writevp32(Addr, value)\hmt.writevpstr(Addr, strvalue)等。
输入:“Addr”自定义协议中指令的地址数据,“value/strvalue”自定义协议中需要写入变量的数字数据或字符串数据。
说明:当功能码为“0x02”时使用该函数处理,函数将根据指令中的地址类型,分类调用hmt写变量函数,将数字数据或字符串数据写入相应的变量。

调用函数:string.char(byte)
输入:接收自定义指令中的字节。
输出:字符数据。
使用说明:写入字符串变量时,需要通过该函数将数字指令数据转成字符数据写入变量。可以配合字符串连接符“..”转成字符串数据。

3.5.3 工程跳页功能

调用函数:hmt.changepage(pageid)
输入:“pageid”自定义协议中指令的页面ID信息。
使用说明:当功能码为“0x03”时使用该函数处理,CmdHandle中会处理自定义指令中双字节的ID信息为数字数据,然后将数字数据传入该函数,跳转到指定页面。

3.5.4 设置屏幕背光功能

定义数组:setBLcmd = {0x5F, 0x00}
类型:局部数组,在函数CmdHandle中定义。
说明:函数CmdHandle会将自定义指令中亮度值传入数组setBLcmd的第二个字节;配合hmt库函数hmt.runcmd(cmdtable, len)使用,用以执行内部调光指令。

调用函数:hmt.runcmd(cmdtable, len)
输入:“cmdtable”内部指令数组,“len”调用数组长度。
使用说明:当功能码为“0x04”时使用该函数处理,调用局部数组setBLcmd,执行自定义协议的调节背光功能。

五. 结语

本文所介绍的使用拓普微智能液晶显示模块测试通信协议,旨在引出通信协议实现的一种思路,因为工业控制物联网智能家居、环境监控、数据安全等领域,应用层的功能设计很大程度会影响甚至决定协议层的数据传输格式。

智能显示模块HMI的串口自定义协议通信的实现,用户可以按照自己的需求灵活设计协议规则,控制产品实现期望功能,在一定程度上为应用的功能设计提供了新的解决方案。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信协议
    +关注

    关注

    28

    文章

    737

    浏览量

    39745
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4278

    浏览量

    164091
  • 液晶屏
    +关注

    关注

    18

    文章

    677

    浏览量

    41687
  • 串口通信
    +关注

    关注

    32

    文章

    1577

    浏览量

    54861
  • HMI
    HMI
    +关注

    关注

    9

    文章

    489

    浏览量

    47887
收藏 人收藏

    评论

    相关推荐

    HarmonyOS开发实例:【自定义Emitter】

    使用[Emitter]实现事件的订阅和发布,使用[自定义弹窗]设置广告信息。
    的头像 发表于 04-14 11:37 615次阅读
    HarmonyOS开发实例:【<b class='flag-5'>自定义</b>Emitter】

    鸿蒙ArkUI实例:【自定义组件】

    组件是 OpenHarmony 页面最小显示单元,一个页面可由多个组件组合而成,也可只由一个组件组合而成,这些组件可以是ArkUI开发框架自带系统组件,比如 `Text` 、 `Button` 等,也可以是自定义组件,本节笔者简单介绍一下
    的头像 发表于 04-08 10:17 149次阅读

    博途用户自定义库的使用

    博途官方提供了很多库,比如:基本函数库、通信库、安全库、驱动库等等,用户可以使用库中的函数/函数块来完成具体的控制任务。除了官方的库,我们也可以创建自己的库(用户自定义库)。比如,把项目
    的头像 发表于 12-25 10:08 287次阅读
    博途用户<b class='flag-5'>自定义</b>库的使用

    lcd1602液晶显示模块工作原理

    LCD1602液晶显示模块是一种常用的显示设备,可以显示文字和简单的图形。它常被用于各种电子设备中,比如计算器、电子表格、仪器仪表等。本文将详细介绍LCD1602
    的头像 发表于 12-20 10:30 2165次阅读

    怎样为显示器创建自定义分辨率呢?

    您可以为大多数显示器创建自定义分辨率和刷新率。这可以解决可能不使用标准 Windows 分辨率的显示器,或更正可能导致显示器兼容性问题的无效显示
    的头像 发表于 11-16 09:41 1720次阅读
    怎样为<b class='flag-5'>显示</b>器创建<b class='flag-5'>自定义</b>分辨率呢?

    基于PIC16F877A单片机的自定义无线传输协议和短信通信协议

    电子发烧友网站提供《基于PIC16F877A单片机的自定义无线传输协议和短信通信协议.pdf》资料免费下载
    发表于 11-08 14:47 1次下载
    基于PIC16F877A单片机的<b class='flag-5'>自定义</b>无线传输<b class='flag-5'>协议</b>和短信<b class='flag-5'>通信协议</b>

    Android端自定义铃声 MobPush对安卓端自定义铃声的教程

    如何为APP推送设置独特的通知铃声呢?本次带来的是MobPush对安卓端自定义铃声的教程,快来看看吧~
    的头像 发表于 10-21 15:34 812次阅读
    Android端<b class='flag-5'>自定义</b>铃声 MobPush对安卓端<b class='flag-5'>自定义</b>铃声的教程

    单片机自定义协议FIFO高效发送数据方法

    单片机自定义协议FIFO高效发送数据方法
    的头像 发表于 09-28 17:32 504次阅读
    单片机<b class='flag-5'>自定义</b><b class='flag-5'>协议</b>FIFO高效发送数据方法

    labview超快自定义控件制作和普通自定义控件制作

    labview超快自定义控件制作和普通自定义控件制作
    发表于 08-21 10:32 5次下载

    智能液晶显示模块HMI自定义通信协议分析

    随着工业技术的发展,HMI(人机界面)的应用领域愈加广泛。通过拓普微的智能液晶显示模块实现的自定义通信协
    的头像 发表于 07-30 14:46 833次阅读
    <b class='flag-5'>智能</b><b class='flag-5'>液晶显示</b><b class='flag-5'>模块</b><b class='flag-5'>HMI</b><b class='flag-5'>自定义</b><b class='flag-5'>通信协议</b>分析

    基于单片机的1602液晶显示实验 1602液晶显示模块简介

    1602 液晶显示模块是一种通用的工业液晶显示模块,专门用来显示字母、数字、符号等的点阵型液晶显示
    的头像 发表于 07-27 16:46 7239次阅读
    基于单片机的1602<b class='flag-5'>液晶显示</b>实验 1602<b class='flag-5'>液晶显示</b><b class='flag-5'>模块</b>简介

    教程 3:构建自定义配置文件

    教程 3:构建自定义配置文件
    发表于 07-06 18:49 0次下载
    教程 3:构建<b class='flag-5'>自定义</b>配置文件

    教程 2:自定义配置文件示例

    教程 2:自定义配置文件示例
    发表于 07-04 20:50 0次下载
    教程 2:<b class='flag-5'>自定义</b>配置文件示例

    带计时器的自定义锻炼

    电子发烧友网站提供《带计时器的自定义锻炼.zip》资料免费下载
    发表于 06-16 10:29 0次下载
    带计时器的<b class='flag-5'>自定义</b>锻炼

    labview自定义控件

    labview自定义精美控件
    发表于 05-15 16:46 9次下载