写在开始
经历了两天的努力,终于对这款嵌入式屏幕有了新的认识。下面做下类比:
单片机或者ARM:
(1)main函数开始,进行INIT初始化;
(2)while(1)循环;
(3)外部或内部中断。
以上三点是咱们熟悉的硬件常规编程
而昆仑通态屏幕脚本编程:
(1)初始化脚本;---对应INIT初始化
(2)采集脚本;---对应while(1)循环
(3)单通道写脚本;---对应中断
(4)退出脚本。
结论:这两种编程是一一对应的,只是昆仑通态屏幕脚本编程的时候多了一个退出脚本。也就是退出屏幕时执行的程序。
初始化和while(1)循环这两个没什么区别,单通道脚本里相当于中断,而通道值的变化就是触发单通道脚本执行的中断。这点下面会详细叙述。
第一节:回顾
上文中,《昆仑通态屏幕制作(连载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单片机等面向逻辑编写基础的小伙伴,应该有一定的困难。如果是面向对象编程的小伙伴,可以看看前面的文章,有介绍面向逻辑和面向对象编程的区别。之后就是有面向逻辑编写基础的小伙伴,如果没有一定的例程也非常难搞,要是有例程了,可以在此基础上改动,这个时候就比较容易了。
第四节:展望
现在先写一个按钮的程序,之后的教程会相继发出,毕竟编程序需要一定的时间,写文章也需要一定的时间,同时上班期间还有其他的工作需要干,请耐心等待,谢谢了!