4453|4

76

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

一种历史告警功能的实现——基于拓普微Lua脚本实现 [复制链接]

本帖最后由 慈俭不敢为人先 于 2022-4-20 10:17 编辑

一种历史告警功能的实现——基于【拓普微】Lua脚本实现

一、应用背景

该应用适用于拓普微智能显示模块Modbus主机系列支持的产品,介绍并实现通过Lua脚本设计历史告警信息提示的功能。

 

二、设计实现

1、工程准备

     1-1、硬件平台:拓普微智能显示模块HKT070DMC-2C ;

     1-2、软件平台:SGTools;

     1-3、UI素材:该案例工程所使用的背景图及图标素材;

     1-4、功能目标: Modbus协议,监测故障事件寄存器(保持寄存器类型)每个位的变化,模块实现告警信息反馈与信息显示。事件表如下:

 2、工程实现

     2-1、工程条件与资源:

     ①打开SGTools新建工程,工程分辨率“800x480”,设备型号“HKT070DMC-2C” ②导入页面背景图DI0000、DI0001;创建10个字符串变量资源“0x000080~0x000500” 。

     2-2、页面控件设置:

     ①进入页面PG0000关联导入的背景图DI0000,再新建10个字符串控件,依次关联字符串变量“0x000080~0x000500”。用以显示故障事件的信息。②新建2个触摸键控件,参数设置略。使用Lua改写实现上翻下翻查找事件信息功能。具体页面设置如下图2-1

2-3、Modbus通信协议设置

     从RGTools的菜单栏中依次点击“工具”然后选择“Modbus产品脚本编辑器”打开编辑器如下图2-2,新建1条地址映射关系与1条逻辑处理关系。

     ①地址映射“Relative[0x080000,4x:0x0000],vplen[1],mblen[1],slaveID[1]”

     功能:将1个16位的屏变量“0x080000”映射1个从机ID为“1”的保持寄存器地址“0x0000”。此例中映射的保存寄存器为“0x0000”也可根据需要映射别的地址或类型。

     ②逻辑处理“Read,if(always),mbAddr[4x:0x0000],mblen[1],slaveID[1],vplen[1]” 

     功能:模块上电一直读取1个从机ID为“1”的保持寄存器地址“0x0000”。该保持寄存器为故障事件监测寄存器,16个位对应不同类型的事件; Lua程序中监测到该保持寄存器发生变化时,产生事件信息并刷新字符串控件中的信息显示。

     ③编辑完成后,依次点击“保存”“编译”按钮生成Modbus.xml文件信息。  

2-4、Lua脚本程序设计

     智能模块HKT070DMC-2C支持Lua脚本程序扩展,关于Lua的具体编程语法及标准库函数可以参考官方手册,“hmt”库函数的使用说明请查看手册“SMART LCD Lua Functions Reference”。

     可以通过点击RGTools资源栏下方的“Lua”标识,右键“添加文件”方式导入Lua脚本。历史告警信息的功能详细设计实现参考以下Lua程序:

  • --定义全局变量
  • Problem_Type = {"模块01故障", "模块01通讯故障", "模块02故障", "模块02通讯故障", "模块负载", "PCC开关异常", "闸门开关异常", "电压相位错误", "RTC电池负荷异常", "RTC电池超负荷", "BMC通讯故障", "网络连接异常", "DC散热器过温", "AC散热器过温", "电源欠压", "电源过压"}
  • Problem_Information = {}
  • --定义状态
  • _getinformationTostr = 0
  • _writevpstrmode = 0
  • ConIndex = 0
  • -----------------------------------
  • --初始化
  • staticvalue = hmt.readvp16(0x080000)
  • --SYSRunningTime = hmt.gettick()
  • --函数定义-----------------------------------------------------------
  • --事件信息生成函数
  • function _GetInformation(Value)
  • local YEAR = hmt.readvpreg(0xFFFF10)
  • local MONTH = hmt.readvpreg(0xFFFF11)
  • local DAY = hmt.readvpreg(0xFFFF12)
  • local HOUR = hmt.readvpreg(0xFFFF13)
  • local MINUTE = hmt.readvpreg(0xFFFF14)
  • local SECOND = hmt.readvpreg(0xFFFF15)
  • local _Date = string.format("%02d/%02d/%02d %02d:%02d:%02d", YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)
  • local infor_Data = ""
  • for i = 1, 16 do
  • if(((Value >> (i-1)) % 2) == 1)then
  • infor_Data = string.format("%s %s", _Date, Problem_Type)
  • for j =1, 19 do
  • Problem_Information[21 - j] = Problem_Information[20 - j]
  • end
  • Problem_Information[1] = infor_Data
  • end
  • end
  • end
  • ---------------------------------------------------------------------
  • ----------------------------------------------------------
  • -----函数名称: 主循环函数
  • -----函数功能: 上电循环执行,周期10ms
  • -----输入参数: 无
  • -----返回值 :
  • ----------------------------------------------------------
  • luamain = function(void)
  • local TYPEValue = hmt.readvp16(0x080000)
  • if(TYPEValue ~= staticvalue)then
  • staticvalue = TYPEValue
  • _getinformationTostr = 1
  • end
  • if(_getinformationTostr == 1)then
  • _GetInformation(TYPEValue)
  • for i = 1, 10 do
  • hmt.writevpstr((0x00 + (i*0x80)), Problem_Information)
  • end
  • ConIndex = 0
  • _getinformationTostr = 0
  • end
  • if(_writevpstrmode == 1)then
  • for j = 1, 10 do
  • hmt.writevpstr((j*0x80), Problem_Information[j + ConIndex])
  • end
  • _writevpstrmode = 0
  • end
  • return 0
  • end
  • ----------------------------------------------------------
  • -----函数名称: 触摸键回调函数
  • -----函数功能:
  • -----输入参数: 无
  • -----返回值 :
  • ----------------------------------------------------------
  • tpkhook = function(page, id, state)
  • if(page == 0)then
  • if((id == 0) and (state == 0))then
  • ConIndex = ConIndex + 1
  • if(ConIndex > (#Problem_Information - 1))then
  • ConIndex = (#Problem_Information - 1)
  • end
  • _writevpstrmode = 1
  • end
  • if((id == 1) and (state == 0))then
  • ConIndex = ConIndex - 1
  • if(ConIndex < 0)then
  • ConIndex = 0
  • end
  • _writevpstrmode = 1
  • end
  • end
  • return 0
  • end
  • pagechangehook = function(pageid)
  • return 0
  • end

、应用测试

测试一:(置监视地址bit2为1)如图

表中对应触发告警信息“模块02故障”以及对应日期

 

 测试二:(置监视地址bit5为1)如图

 表中对应触发告警信息“PCC开关异常”以及对应日期

 

 测试三:其他测试效果

 

 

查看本帖全部内容,请登录或者注册

最新回复

HKT070DMC-2C是支持modbus协议通信吗?这款分辨率是多少呀   详情 回复 发表于 2022-4-24 19:51
点赞(1) 关注
 

回复
举报

2548

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

有没有一下简单的Lua脚本分享,方便初学者使用

点评

好的,我整理一些下次可以分享出来  详情 回复 发表于 2022-4-22 11:48
 
 

回复

76

帖子

2

TA的资源

一粒金砂(中级)

板凳
 
数码小叶 发表于 2022-4-20 13:54 有没有一下简单的Lua脚本分享,方便初学者使用

好的,我整理一些下次可以分享出来

 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

4
 

HKT070DMC-2C是支持modbus协议通信吗?这款分辨率是多少呀

点评

是的,modbus主机协议通信,屏幕分辨率800x480的  详情 回复 发表于 2022-4-26 16:16
 
 

回复

76

帖子

2

TA的资源

一粒金砂(中级)

5
 
echo_xpout 发表于 2022-4-24 19:51 HKT070DMC-2C是支持modbus协议通信吗?这款分辨率是多少呀

是的,modbus主机协议通信,屏幕分辨率800x480的

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
ADSL在局域网中的连结方法

1.在服务器上增加一块10兆或10/100兆自适应的网卡   把ADSL MODEM用MODEM附送的网线连接在这块网 卡上,这时服务器上应该有两 ...

嵌入式设计及Linux驱动开发指南

我也是刚刚接触嵌入式Linux开发,感觉这门技术相对而言需要软件知识(操作系统、C编程)比硬件知识更多些。所以这几个星期来,作 ...

[Open Source]YS18-3荧光管电子时钟100%开源放送(软件源工程及代码.硬件原理图)

YS18-3的荧光管电子时钟曾是饱含了我所有期待的完美的荧光管电子时钟,它的功能比较完备,也受到了很多DIYer的关注与支持。 ...

富士通DIY板仿真方法

先告诉大家一个不好消息:“富士通Easy Kit板”板载MLINK不支持MB9BF506N(见下图)。但我们仍然可以用“富士通Easy Kit板”板载ML ...

SensorTile物联网开发套件(9)——DIY无线语音控制

本帖最后由 lb8820265 于 2017-2-21 18:22 编辑 先上视频: http://player.youku.com/player.php/sid/XMjUxNDM1MjczNg==/v.s ...

Qorvo技术视频之面向汽车应用的 UWB:工程入门知识

超宽带技术 (UWB) 是一种射频无线技术,支持无数需要精准定位和距离感测的全新应用或增强应用。在汽车应用中,UWB 目前用于车联 ...

什么是EMF测试?EMF与EMC测试有何区别?

什么是EMF测试? Electromagneticfields(电磁场)简称EMF,电磁场(EMF)是电导体和交流电源产生的电衍生物。当带电粒子的速度发 ...

【BIGTREETECH PI开发板】 3.5寸TFT显示测试

本帖最后由 TL-LED 于 2023-8-8 17:32 编辑 这篇来测试下BIGTREETECH PI开发板驱动TFT显示屏。 一、硬件部分 ...

【Follow me第二季第2期】驱动 12*8 点阵 LED 实现图像和文字显示

本帖最后由 lijinlei 于 2024-9-16 01:48 编辑 # 【Follow me第二季第2期】驱动 12*8 点阵 LED 实现图像和文字显示 **Ardu ...

altium Designer19使用的几个问题

altiumDesigner19使用的几个问题 1.封装预览和元件封装添加问题,为什么能预览,但是双击打开元件是没有封装的?哪怕添加了后 ...

关闭
站长推荐上一条 1/10 下一条
有奖直播 | AI之眼——安森美图像传感器 报名中
直播时间:2025年4月25日(周五)上午10:00-11:30
直播主题:AI之眼——安森美图像传感器
报名观看直播、直播间提问、填写问卷均有机会获得精美礼品!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 12

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表