当前位置:网站首页>昆仑通态屏幕制作(连载3)---基础篇(按钮串口发送)
昆仑通态屏幕制作(连载3)---基础篇(按钮串口发送)
2022-07-30 05:45:00 【透明的光】
写在开始
经历了两天的努力,终于对这款嵌入式屏幕有了新的认识。下面做下类比:
单片机或者ARM:
(1)main函数开始,进行INIT初始化;
(2)while(1)循环;
(3)外部或内部中断。
以上三点是咱们熟悉的硬件常规编程
而昆仑通态屏幕脚本编程:
(1)初始化脚本;---对应INIT初始化
(2)采集脚本;---对应while(1)循环
(3)单通道写脚本;---对应中断
(4)退出脚本。
结论:这两种编程是一一对应的,只是昆仑通态屏幕脚本编程的时候多了一个退出脚本。也就是退出屏幕时执行的程序。
初始化和while(1)循环这两个没什么区别,单通道脚本里相当于中断,而通道值的变化就是触发单通道脚本执行的中断。这点下面会详细叙述。
第一节:回顾
上文中https://blog.csdn.net/weixin_45426095/article/details/119410084,《昆仑通态屏幕制作(连载2)------基础篇(初试篇)》详细介绍了怎么写脚本,怎么配置脚本和屏幕的链接,怎么制作屏幕,怎么调试,怎么验证。还不清楚的小伙伴可以移步上述链接。
现在打开窗口必须有三个:
(1)组态软件,也就是屏幕,随时拉模块,随时改变显示。
(2)脚本软件,随时修改脚本文件,然后连接到组态软件中。
(3)串口助手,方便调试。
注:利用虚拟串口软件,虚拟出成对的串口,组态软件连接到一个串口,串口助手连接到另一个串口,就可以不用硬件连接,直接通过虚拟的串口达到串口调试的目的。
昨天制作了取数、显示和串口发送的例程,今天加入新的东西:按钮发送数据,滑块输入其他显示,加减输入显示,串口数据显示。
第二节:按钮发送
1. 编写脚本
(1)加入通道:第一个按钮,设备通道直接数数,第三个。
(2)编写脚本:在单通道写脚本里。
DIM ButtonChannel as INTEGER
首先定义一个通道号,目的:取哪个通道变化了,也就是哪个设备通道有中断。
ButtonChannel = !GetCurrentChannelNum()
执行上述程序,可以得到哪个设备通道里面的值变了。
IF ButtonChannel = 3 THEN
!Sleep(1000)
nSendByteArr[1] = &H5B
nSendByteArr[2] = &HB5
nSendByteArr[3] = &HFF
nSendByteArr[4] = !BitRShift(gnGetData1, 8)
nSendByteArr[5] = gnGetData1
nSendByteArr[6] = !SvrByteArraySum(nSendByteArr,3,3)'和校验
!DevClearBuff() '清缓冲
!DevWriteAndReadByteArr(nSendByteArr,6,nRecvByteArr,6,通讯延时)
ENDIF
因为第一个按钮是第三个通道,也就是第三个数,所以以下按行解释代码
如果按钮被按下,==3时,执行以下程序;
缓冲1000ms,这个是系统时间,不占空中断时间,所以可以放心的延时,对整个中断程序和while(1)的程序执行都无影响。
填充发送的buffer 6个数,
清缓存,发送6个数据,接收6个数据;
(3)保存。
2. 加载脚本和屏幕链接驱动
(1)打开昨天建立的文件:
(2)点击设备窗口:双击设备窗口,弹出对话框:因为脚本文件已经被改写,所以出现驱动已在外部被修改,
双击驱动:更新设备,在通道连接选项中,添加对应数据对象。这样脚本里的参数就可以被屏幕界面中的模块识别了。
(3)保存,退出,打开用户窗口。
3. 屏幕界面设置
(1)放置按钮模块,这个不会的话,在前面的教程里有详细介绍。
(2)修改参数:双击按钮,打开对话框,在操作属性中:
数值对象中,选择取反,问号里面选择第一个按钮。
注:这里必须点击取反,因为每次按键都要执行中断脚本程序,也就是单通道写脚本。选择其他的就只执行一次,或者执行多次。
(3)保存。
4. 验证
工具,下载配置,工程下载,启动运行:
(1)初始结果:昨天的发送程序,1s执行一次,报文正确。
(2)取数框中修改数据:显示框中跟随变化,串口显示变为0A,报文正确。
(3)点击按钮后,报文正确。
第三节:总结
(1)总的来说,编程思想和以前是一样的,但是编程内容接近于嵌入式,或许这个就是为啥叫嵌入式屏幕了吧。
(2)当编写好第一例程之后,下面的东西就是比葫芦画瓢了,一个一个的添加,然后去验证。从脑力劳动变成了体力劳动。
(3)屏幕入门有一定的门槛,特别是没有嵌入式ARM单片机等面向逻辑编写基础的小伙伴,应该有一定的困难。如果是面向对象编程的小伙伴,可以看看前面的文章,有介绍面向逻辑和面向对象编程的区别。之后就是有面向逻辑编写基础的小伙伴,如果没有一定的例程也非常难搞,要是有例程了,可以在此基础上改动,这个时候就比较容易了。
第四节:展望
现在先写一个按钮的程序,之后的教程会相继发出,毕竟编程序需要一定的时间,写文章也需要一定的时间,同时上班期间还有其他的工作需要干,请耐心等待,谢谢了!有需要讨论的小伙伴可以添加微信,大家一起进步:
边栏推荐
- 十六、Kotlin进阶学习:协程详细学习。
- CNN经典模型发展进程
- 边境的悍匪—机器学习实战:第十二章 使用TensorFlow自定义模型和训练
- Jdbc & Mysql timeout分析
- “R语言+遥感”的水环境综合评价方法
- MySQL - Multi-table query and case detailed explanation
- Oracle数据库SQL优化详解
- Configure MMdetection environment and train
- DeepLearing4j's deep learning Yolo Tiny realizes target detection
- Generalized Focal Loss 论文阅读笔记
猜你喜欢
Redis publish/subscribe
大气颗粒物 PMF 源解析
Student achievement management system (C language version)
Twenty-two, Kotlin advanced learning: simply learn RecyclerView to achieve list display;
Target detection, object classification and semantic segmentation of UAV remote sensing images based on PyTorch deep learning
求职准备知识点
Reasons and solutions for Invalid bound statement (not found)
“R语言+遥感”的水环境综合评价方法
Trust anchor for certification path not found. Exception solution.
Rsync实现Win系统间的文件夹或数据同步
随机推荐
MySQL index optimization and failure scenarios
抽象工厂模式(Swift 实现)
标准化(Normalization)知识点总结
十一、Kotlin进阶学习:1、集合;2、List操作;3、可变集合——MutableList;4、Set;5、Map;6、MutableMap;
The application of Meta analysis in the field of ecological environment
常用损失函数(二):Dice Loss
基于遥感解译与GIS技术环境影响评价图件制作(最新导则)
[Getting C language from zero basis - navigation summary]
Generalized Focal Loss 论文阅读笔记
Redis 客户端常见异常分析
十四、Kotlin进阶学习:一、内联函数 inline;二、泛型;三、泛型约束;四、子类与子类型;
Mysql client common exception analysis
Kaggle-M5
Application of remote sensing, GIS and GPS technology in hydrology, meteorology, disaster, ecology, environment and health
GraphQL (1) Basic introduction and application examples
AAcell五号文档室——跨平台文件传输的小室一间一间的
Knowledge distillation method of target detection
“R语言+遥感”的水环境综合评价方法
Xcode 建立 UIKit 项目(Hello World)
边境的悍匪—机器学习实战:第十一章 训练深度神经网络