写在开始

    经历了两天的努力,终于对这款嵌入式屏幕有了新的认识。下面做下类比:

单片机或者ARM:

    (1)main函数开始,进行INIT初始化;

    (2)while(1)循环;

    (3)外部或内部中断。

    以上三点是咱们熟悉的硬件常规编程

而昆仑通态屏幕脚本编程:

昆仑bios开启虚拟化_昆仑bios开启虚拟化

     (1)初始化脚本;---对应INIT初始化

    (2)采集脚本;---对应while(1)循环

    (3)单通道写脚本;---对应中断

    (4)退出脚本。

     结论:这两种编程是一一对应的,只是昆仑通态屏幕脚本编程的时候多了一个退出脚本。也就是退出屏幕时执行的程序。

    初始化和while(1)循环这两个没什么区别,单通道脚本里相当于中断,而通道值的变化就是触发单通道脚本执行的中断。这点下面会详细叙述。

第一节:回顾

    上文中,《昆仑通态屏幕制作(连载2)------基础篇(初试篇)》详细介绍了怎么写脚本,怎么配置脚本和屏幕的链接,怎么制作屏幕,怎么调试,怎么验证。还不清楚的小伙伴可以移步上述链接。

    现在打开窗口必须有三个:

    (1)组态软件,也就是屏幕,随时拉模块,随时改变显示。

    (2)脚本软件,随时修改脚本文件,然后连接到组态软件中。

    (3)串口助手,方便调试。

注:利用虚拟串口软件,虚拟出成对的串口,组态软件连接到一个串口,串口助手连接到另一个串口,就可以不用硬件连接,直接通过虚拟的串口达到串口调试的目的。

按钮发送数据,滑块输入其他显示,加减输入显示,串口数据显示。

第二节:按钮发送

    1. 编写脚本

    (1)加入通道:第一个按钮,设备通道直接数数,第三个。

昆仑bios开启虚拟化_串口通信_02

     (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)打开昨天建立的文件:

昆仑bios开启虚拟化_昆仑bios开启虚拟化_03

     (2)点击设备窗口:双击设备窗口,弹出对话框:因为脚本文件已经被改写,所以出现驱动已在外部被修改,

昆仑bios开启虚拟化_初始化_04

     双击驱动:更新设备,在通道连接选项中,添加对应数据对象。这样脚本里的参数就可以被屏幕界面中的模块识别了。

昆仑bios开启虚拟化_嵌入式_05

     (3)保存,退出,打开用户窗口。

 3. 屏幕界面设置

    (1)放置按钮模块,这个不会的话,在前面的教程里有详细介绍。

昆仑bios开启虚拟化_初始化_06

     (2)修改参数:双击按钮,打开对话框,在操作属性中:

昆仑bios开启虚拟化_嵌入式_07

     数值对象中,选择取反,问号里面选择第一个按钮。

注:这里必须点击取反,因为每次按键都要执行中断脚本程序,也就是单通道写脚本。选择其他的就只执行一次,或者执行多次。

    (3)保存。

 4. 验证

        工具,下载配置,工程下载,启动运行:

昆仑bios开启虚拟化_初始化_08

        (1)初始结果:昨天的发送程序,1s执行一次,报文正确。

昆仑bios开启虚拟化_串口_09

         (2)取数框中修改数据:显示框中跟随变化,串口显示变为0A,报文正确。

昆仑bios开启虚拟化_串口通信_10

昆仑bios开启虚拟化_初始化_11

         (3)点击按钮后,报文正确。

昆仑bios开启虚拟化_串口通信_12

 第三节:总结

     (1)总的来说,编程思想和以前是一样的,但是编程内容接近于嵌入式,或许这个就是为啥叫嵌入式屏幕了吧。

    (2)当编写好第一例程之后,下面的东西就是比葫芦画瓢了,一个一个的添加,然后去验证。从脑力劳动变成了体力劳动。

    (3)屏幕入门有一定的门槛,特别是没有嵌入式ARM单片机等面向逻辑编写基础的小伙伴,应该有一定的困难。如果是面向对象编程的小伙伴,可以看看前面的文章,有介绍面向逻辑和面向对象编程的区别。之后就是有面向逻辑编写基础的小伙伴,如果没有一定的例程也非常难搞,要是有例程了,可以在此基础上改动,这个时候就比较容易了。

第四节:展望

    现在先写一个按钮的程序,之后的教程会相继发出,毕竟编程序需要一定的时间,写文章也需要一定的时间,同时上班期间还有其他的工作需要干,请耐心等待,谢谢了!