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

    文章

    1073

    浏览量

    41866
  • lcd
    lcd
    +关注

    关注

    36

    文章

    4578

    浏览量

    175771
  • 液晶屏
    +关注

    关注

    18

    文章

    748

    浏览量

    45291
  • 串口通信
    +关注

    关注

    34

    文章

    1657

    浏览量

    57617
  • HMI
    HMI
    +关注

    关注

    9

    文章

    687

    浏览量

    51519
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    电能质量在线监测装置的数据推送协议是否可以自定义配置?

    现代电能质量在线监测装置普遍支持 协议参数自定义配置 和 协议组合灵活适配 ,用户可根据实际需求调整通信参数、映射数据格式,甚至通过第三方工具实现非标准
    的头像 发表于 11-12 13:58 252次阅读
    电能质量在线监测装置的数据推送<b class='flag-5'>协议</b>是否可以<b class='flag-5'>自定义</b>配置?

    智能显示模块怎么使用?使用起来方便吗?

    智能显示模块怎么使用?使用起来方便吗? 有没有什么指导手册可以查看?
    发表于 10-21 15:17

    串口智能液晶(HMT043ATA-2C),如何让modbus在液晶中循环发出报文

    串口智能液晶(HMT043ATA-2C),如何让modbus在液晶中循环发出报文
    发表于 10-18 09:43

    智能硬件通过小聆AI自定义MCP应用开发操作讲解

    智能硬件通过小聆AI自定义MCP应用开发操作讲解 前言 MCP(Modular Communication Protocol,模块通信协议)为智能
    发表于 10-14 15:50

    LOTO示波器自定义解码功能—CANFD解码

    /?spm_id_from=333.1365.list.card_archive.click 。 视频中仅对串口进行解码演示,正好我们从客户手中拿到了一块USB转CAN/CANFD模块,如下图所示, 本文借此对自定义解码功能
    的头像 发表于 07-11 10:34 745次阅读
    LOTO示波器<b class='flag-5'>自定义</b>解码功能—CANFD解码

    KiCad 中的自定义规则(KiCon 演讲)

    “  Seth Hillbrand 在 KiCon US 2025 上为大家介绍了 KiCad 的规则系统,并详细讲解了自定义规则的设计与实例。  ”   演讲主要围绕 加强 KiCad 中的自定义
    的头像 发表于 06-16 11:17 1450次阅读
    KiCad 中的<b class='flag-5'>自定义</b>规则(KiCon 演讲)

    HarmonyOS应用自定义键盘解决方案

    自定义键盘是一种替换系统默认键盘的解决方案,可实现键盘个性化交互。允许用户结合业务需求与操作习惯,对按键布局进行可视化重构、设置多功能组合键位,使输入更加便捷和舒适。在安全防护层面,自定义键盘可以
    的头像 发表于 06-05 14:19 1564次阅读

    如何添加自定义单板

    在开发过程中,用户有时需要创建自定义板配置。本节将通过一个实例讲解用户如何创建属于自己的machine,下面以g2l-test.conf为例进行说明。
    的头像 发表于 03-12 14:43 1078次阅读

    如何快速创建用户自定义Board和App工程

    概述自HPM_SDKv1.7.0发布开始,在HPM_ENV中新增了user_template文件夹,以方便用户快速创建自定义的Board和App工程。user_template是用户模板工程,用户
    的头像 发表于 02-08 13:38 994次阅读
    如何快速创建用户<b class='flag-5'>自定义</b>Board和App工程

    Altium Designer 15.0自定义元件设计

    电子发烧友网站提供《Altium Designer 15.0自定义元件设计.pdf》资料免费下载
    发表于 01-21 15:04 0次下载
    Altium Designer 15.0<b class='flag-5'>自定义</b>元件设计

    自定义Modbus通信块指令的搭建教程

    和欧姆龙E5EZ的智能温控仪表作为从站为例,为大家分享如何使用自定义的Modbus RTU的通信程序块,来实现快速高效的Modbus通信程序设计。同时在本文的结尾会为大家提供参考程序和
    的头像 发表于 01-20 10:37 1854次阅读
    <b class='flag-5'>自定义</b>Modbus<b class='flag-5'>通信</b>块指令的搭建教程

    think-cell:自定义think-cell(四)

    C.5 设置默认议程幻灯片布局 think-cell 议程可以在演示文稿中使用特定的自定义布局来定义议程、位置和议程幻灯片上的其他形状,例如标题或图片。通过将此自定义布局添加到模板,您可以为整个组织
    的头像 发表于 01-13 10:37 877次阅读
    think-cell:<b class='flag-5'>自定义</b>think-cell(四)

    智能语音识别照明解决方案,平台自定义,中英切换

    智能语音识别照明方案引入NRK3502芯片,支持平台自定义,离线控制,中英双语切换。NRK3502具备高性能和灵活自定义能力,可推动智能照明革新,控制其他
    的头像 发表于 01-10 13:23 798次阅读
    <b class='flag-5'>智能</b>语音识别照明解决方案,平台<b class='flag-5'>自定义</b>,中英切换

    think-cell;自定义think-cell(一)

    本章介绍如何自定义 think-cell,即如何更改默认颜色和其他默认属性;这是通过 think-cell 的样式文件完成的,这些文件将在前四个部分中进行讨论。 第五部分 C.5 设置默认议程幻灯片
    的头像 发表于 01-08 11:31 1237次阅读
    think-cell;<b class='flag-5'>自定义</b>think-cell(一)

    总线通信协议解析及应用

    在现代计算机系统中,总线通信协议扮演着至关重要的角色。它们定义了数据如何在处理器、内存、输入/输出设备等组件之间传输。 总线通信协议的基本概念 总线通信协议是一组规则,它规定了数据在系
    的头像 发表于 12-31 10:07 1901次阅读