变量和动作
变量
变量是可赋值的逻辑单元,改变变量值,与变量绑定的所有控件显示内容会随之变化。一个变量可以绑定多个控件,一个控件只能绑定一个变量。其中1-100为IDE预设的系统变量。
系统变量
1-100为IDE预设的系统变量,其名称、变量类型、寄存器号不可修改。

动画控制—1,临时关闭或者开启系统动画(1-关闭,0-开启),具体使用方法参考教学文档高阶设计-动画-系统动画中相关介绍。
当前页面序号—2,用于控制跳页的变量。例如,IDE仿真时给该变量赋值3(需按Enter确认)即跳转至第3页.
传递按键编码—3,针对没有触摸的屏,通过给“传递按键编码”变量赋值的方式实现多个按钮的选中与点击,可赋值有“1、2、3、4、9”,对应关系分别为:
1——预选上移
2——预选下移
3——预选左移
4——预选右移
7——按钮点击
8——按钮释放
9——取消按钮预选中
示例:
1.在页面中添加9个"按钮“控件,并将这9个控件按 3x3 的九言格样式排列, 确保各按钮上下左右均对齐。

2.打开仿真器,找到“传递按键编码“这个tag变量,在“值”中输入1、2、3、4、7、8、9即可控制按钮预选、点击、释放。
3.IDE端仿真时上方的上键、下键、左键、右键、OK键亦可控制。

4.仿真效果:

时钟变量年月日—4,例如时间为14时22分10秒,十六进制为0x142210,转成十进制 为1319440,在IDE端仿真时给“时钟变量年月日”变量赋值1319440,那么时间控件显示的时间就是14:22:10。注意在嵌入式端直接给4号寄存器赋十六进制的时间就行,不需要转成十进制时间。
时钟变量时分秒—5,使用方法和上面的“时钟变量年月日”类似。
其他系统变量赋值方式建议直接查阅我司提供的通信协议。
如下图所示,功能切换绑定了3个变量(图层、滑块、数字)。

添加新变量(即自定义变量)
点击“添加新变量”按钮会弹出自定义变量属性编辑弹窗,用户可以自行设定变量名称,设定寄存器号(自定义变量寄存器号建议从1000开始递增),变量类型默认是数字,如果该变量需要给文本输入控件、二维码控件绑定那么变量类型需改为字符串。
其他属性见下方变量赋值方式介绍。

导出变量
点击“导出变量”按钮将会生成一个excel表格,显示tag的寄存器号以及所绑定的元素的最小值、最大值和当前值。

导入模板变量
系统有预设的默认变量,勾选“覆盖重名变量”可以避免变量重名,如果UI有不同主题且不同主题的变量不通用时可以勾选主题1或主题2或主题3或主题4后点击“自定义选择导入”,此时会出现一个“预设Tag列表”的弹窗,勾选自己所需的变量后点击确定即可成功添加。
文件导入变量
即批量导入变量名称和寄存器号,如果用户有大量的自定义变量需要添加那么可以通过Excel文件批量导入,建议Excel文件的格式为“.xlsx”
该Excel文件中格式要求:左起第一列为“变量名称”,左起第二列是相对应的“寄存器号”,左起第三列是设定相应的变量类型(0-数字类型,1-字符串类型,2-数组类型)。

Excel表中左起第三列的数字设置了相应的变量类型:


点击“文件导入变量”按钮导入Excel文件中变量后可以在IDE的变量栏底部查看(如果没有显示出来可以保存工程后刷新一下)。

给变量赋值有以下方式:
1、直接赋值
在添加变量时设定变量初始值。如果没有其他赋值操作,变量固定为该初始值。

2、寄存器赋值
变量启用寄存器,设置寄存器序号,相应序号寄存器的值被动态赋予该变量。部分序号的寄存器为系统预留,详情参考AHMI 串口协议。(AHMI串口协议请联系速显微电子获取)

3、是否存储
勾选“是否存储”后变量的数值会写入Flash(见下方第一张图片),下次开机时变量会显示断电前的值,需要注意的是我们还需要通过指令将数值写入Flash以达到断电存储的目的,例如下方第二张图片,在数字控件的action中加入了“writeFlash”指令,触发条件是“Tag改变”,即数值每次改变时都会执行“writeFlash 功能切换”指令,将该变量数值写入Flash。

数字控件action:

4、动作指令赋值
动作指令赋值是实现界面交互最常用的方式。即通过动作窗口,动态设置变量值,在动作小节详细说明。
动作
动作列表在控件的属性栏中,点击默认动作“action0”,在弹出的动作编辑界面进行设定。

每个动作包含一条或多条指令,每个指令包括一个操作和两个操作数(操作数1为变量或定时器,操作数2为用户输入值或变量或定时器),1条指令执行后,操作数1的值进行相应改变。
A、动作名称
默认为action0,用户可编辑修改。
B、触发条件
触发条件根据控件不同而有差异:
对于页面、图层控件,触发条件为加载/离开,表示该页面(图层)出现时或离开时触发动作。
对于按钮控件,触发条件为按下/释放/长按,按下即点击按钮后立即触发动作,释放表示松开按钮后触发动作,长按表示持续按压按钮会循环触发动作。
对于滑动响应控件,触发条件为向左滑动/向右滑动/向上滑动/向下滑动,分别表示向左、向右、向上、向下滑动一段距离(距离可设)后触发动作。
对于进度条、仪表盘等多数控件,触发条件为进入低警报、离开低警报、进入高警报、离开高警报、tag值改变。
C、操作
操作下拉列表,用户根据需要选择相应操作。每个操作有3个操作数,操作数1可以是变量或定时器,操作数2和操作数3默认是启用变量,用户可以选择变量或寄存器,用户取消勾选“启用变量”后可以输入值。操作具体执行内容和注意事项参见下表。
D、快捷添加定时器
用户可在动作编辑界面快速添加定时器。每个定时器由起点、终点、步长、时间间隔、当前值、定时模式6条指令设定,用户添加后可在指令列表中进行修改。
E、添加指令
用户完成一个操作、操作数1,操作数2、操作数3的编辑后,点击“添加指令”按键,完成一条指令的编辑。该动作中所有编辑的指令都显示在下方的指令列表中。

用户单击指令列表中某一行,可修改该指令的触发条件、操作、操作数。
用户鼠标右击指令列表中某一行,可以进行“插入下一行”、“插入上一行”、“复制”、“粘贴”操作。

注意:每个action的命令组中跳页命名应当留在最后,否则会因先执行了跳页而导致其他指令无法执行。
错误示例:

正确示例:

F、编辑器切换 点击“编辑器切换”按钮后切换至伪代码编辑模式,在此模式下,可以快速复制,粘贴指令并且可以快速修改其中的一些字符,方便批量添加指令语句类似的指令。

G、全屏
点击“全屏”可以将编辑器可视范围最大化,方便在指令语句比较多或者复杂时进行添加、检查、修改。
H、操作符悬停
在系统默认编辑器模式,向指令行添加了操作符后如果不清楚该操作符的使用方式,将鼠标悬停在该操作符上会自动弹出该操作符的使用教程和示例。
I、保存
当action中所有指令编辑结束时需要点击“保存”按钮,系统在进行保存前会自动检查所有指令语句是否有误,如果指令有误则会弹窗提醒(鼠标悬停在“!”处会指明错误原因)并拒绝保存所有指令,需要返回修改。

J、各指令对应功能与使用方法(如果图片显示不清楚可以在图片上鼠标右击,选择“在新标签页中打开图片”):
| 指令名称 | IDE中样式 | 示例 | 示例指令作用描述 |
|---|---|---|---|
| 赋值 | = | 给一个名为“变量A”的Tag变量赋值100 | |
| 加法运算 | + | 给一个名为“变量A”的Tag变量加100 | |
| 减法运算 | - | 给一个名为“变量A”的Tag变量减100 | |
| 乘法运算 | * | 给一个名为“变量A”的Tag变量乘100 | |
| 除法运算 | / | 给一个名为“变量A”的Tag变量除100 | |
| 求余运算 | % | 给一个名为“变量A”的Tag变量作求余运算 | |
| 跳页 | -> | 跳至第三页 | |
| 返回上一页 | <- | 返回上一页 | |
| 判等运算 | == | 如果“变量A”等于3,那么跳至第二页,否则跳至第三页 | |
| 判不等运算 | != | 如果“变量A”不等于3,那么跳至第二页 | |
| 大于判断 | > | 如果“变量A”大于3,那么跳至第二页 | |
| 小于判断 | < | 如果“变量A”小于3,那么跳至第二页 | |
| 大于等于判断 | >= | 如果“变量A”大于等于3,那么跳至第二页 | |
| 小于等于判断 | <= | 如果“变量A”小于等于3,那么跳至第二页 | |
| while循环 | while | 循环运算——当“变量A”小于5时,变量A加1,变量B加2,直到“变量A”大于等于5时退出循环 | |
| 按位与运算 | & | 表示“变量A” & 5后赋值给“变量B” | |
| 按位或运算 | | | 表示“变量A” | |
| 按位异或运算 | ^ | 表示“变量A” ^ 5 | |
| 按位取反运算 | ~ | 对“变量A”执行按位取反后赋值给“变量B” | |
| 按位左移运算 | << | 将“变量A”的各二进制位全部左移2位后赋值给“变量B” | |
| 按位右移运算 | >> | 将“变量A”的各二进制位全部右移2位后赋值给“变量B” | |
| 设置定时器起始值 | setTimerStart | ![]() | 设置定时器“SysTmr_0_t”起始值为0 |
| 设置定时器终止 | setTimerStop | ![]() | 设置定时器“SysTmr_0_t”终止值为100 |
| 设置定时器每次增减步数 | setTimerStep | ![]() | 设置定时器“SysTmr_0_t”每次增减步数为1 |
| 设置定时器每次增减间隔时间 | setTimerInterval | ![]() | 设置定时器“SysTmr_0_t”每次增减间隔时间为1000毫秒 |
| 设置定时器首次起始值 | setTimerCurVal | ![]() | 设置定时器“SysTmr_0_t”首次起始值为0 |
| 设置定时器模式(0:中止,1:单向递增,3:循环递增,5:单向递减,7:循环递减,9:先增后减,11:循环先增后减,13:先减后增,15:循环先减后增) | setTimerMode | ![]() | 定时器“SysTmr_0_t”模式设为3(即0递增至100,0递增至100,0递增至100...循环) |
| 把tag的值写入其对应寄存器内 | write_reg | 把“变量A”的值写入其对应寄存器内 | |
| 将字符串赋值到变量 | setStr | 将字符串“abc123”赋值给“变量C”(注意“变量C”变量类型需要改为字符串) | |
| 打印变量当前的信息 | writeLog | ![]() | 打印“背光”和“帧率”的信息,在IDE仿真界面的日志中可以看到“背光”和“帧率”的信息 |
| 执行自定义动画 | animate | 对绑定了“主题1_动画”变量的窗口执行动画序号为1的动画 | |
| 延时指令 | delay | 延时1000毫秒后跳转至第五页 | |
| 清除延迟 | clearDelay | ![]() | 清除所有的延迟(delay) |
| 把变量的值写入Flash | writeFlash | 将“变量A”的值写入Flash | |
| 设置颜色 | setColor | 将“变量A”绑定的控件(支持数字控件、文本控件、文本输入控件、时间控件、透明度图层控件)颜色设为“0xDC143CFF”(十六进制颜色码,尾部的FF为透明度值) | |
| 音频——开始/重新播放 | playSound | 开始/重新播放声音序号为0的音频 | |
| 音频——暂停播放 | pauseSound | 暂停播放声音序号为0的音频 | |
| 音频——恢复播放 | resumeSound | 恢复播放声音序号为0的音频 | |
| 音频——停止播放 | stopSound | 停止播放声音序号为0的音频 | |
| 图表清空 | clearData | 针对图表控件,清空指定ID控件的数据 | |
| 设置移动到x坐标y坐标 | setMove | 将绑定索引ID为2的窗口和控件移动到坐标(100,100) | |
| 设置移动到x坐标 | setMoveX | 将绑定索引ID为2的窗口和控件X轴坐标改为100 | |
| 设置移动到y坐标 | setMoveY | 将绑定索引ID为2的窗口和控件Y轴坐标改为100 | |
| 设置相对位移距离 | changeMove | 将绑定索引ID为2的窗口和控件X轴坐标+100,Y轴坐标+100 | |
| 设置相对x位移距离 | changeMoveX | 将绑定索引ID为2的窗口和控件X轴坐标+100 | |
| 设置相对y位移距离 | changeMoveY | 将绑定索引ID为2的窗口和控件Y轴坐标+100 | |
| 设置缩放 | setScale | 将绑定索引ID为2的窗口和控件宽度x2,高度x2(注意操作数2和操作数3除以512得要放大倍数) | |
| 设置x轴方向缩放 | setScaleX | 将绑定索引ID为2的窗口和控件宽度x2(注意操作数2除以512得要放大倍数) | |
| 设置y轴方向缩放 | setScaleY | 将绑定索引ID为2的窗口和控件高度x2(注意操作数2除以512得要放大倍数) | |
| 设置相对缩放 | changeScale | 将绑定索引ID为2的窗口和控件宽度x2,高度x2(注意操作数2和操作数3除以512得要放大倍数),指令可以多次触发并执行,第一次宽高x2,第二次宽高x4,第三次宽高,x8... | |
| 设置x轴方向相对缩放 | changeScaleX | 将绑定索引ID为2的窗口和控件宽度x2(注意操作数2除以512得要放大倍数),指令可以多次触发并执行,第一次宽度x2,第二次宽度x4,第三次宽度x8,... | |
| 设置y轴方向相对缩放 | changeScaleY | 将绑定索引ID为2的窗口和控件高度x2(注意操作数2除以512得要放大倍数),指令可以多次触发并执行,第一次高度x2,第二次高度x4,第三次高度x8,... | |
| 设置旋转角度 | setRotate | 将绑定索引ID为2的窗口和控件以控件左上角为圆心顺时针旋转至60度 | |
| 设置相对旋转角度 | changeRotate | 将绑定索引ID为2的窗口和控件以控件左上角为圆心顺时针旋转60度,指令可以多次触发并执行,第一次旋转至60度,第二次旋转至120度,第三次旋转至180度,... | |
| 设置旋转中心 | setRotateCenter | 将绑定索引ID为2的窗口和控件左上角(0,0)为基点设置旋转中心(60,60) | |
| 设置旋转中心 | setRotateCenterX | 将绑定索引ID为2的窗口和控件左上角(0,0)为基点设置旋转中心(60,0) | |
| 设置旋转中心 | setRotateCenterY | 将绑定索引ID为2的窗口和控件左上角(0,0)为基点设置旋转中心(0,60) | |
| 设置相对旋转中心 | changeRotateCenter | 将绑定索引ID为2的窗口和控件左上角(0,0)为基点设置旋转中心(60,60),指令可以多次触发并执行,第一次旋转中心为(60,60),第二次旋转中心为(120,120),第三次旋转中心为(180,180),... | |
| 设置相对旋转中心 | changeRotateCenterX | 将绑定索引ID为2的窗口和控件左上角(0,0)为基点设置旋转中心(60,0),指令可以多次触发并执行,第一次旋转中心为(60,0),第二次旋转中心为(120,0),第三次旋转中心为(180,0),... | |
| 设置相对旋转中心 | changeRotateCenterY | 将绑定索引ID为2的窗口和控件左上角(0,0)为基点设置旋转中心(0,60),指令可以多次触发并执行,第一次旋转中心为(0,60),第二次旋转中心为(0,120),第三次旋转中心为(0,180),... | |
| 设置投影角度 | setProject | 将绑定索引ID为2的窗口和控件设置投影x和投影y | |
| 设置x轴方向投影角度 | setProjectX | 将绑定索引ID为2的窗口和控件设置投影x | |
| 设置y轴方向投影角度 | setProjectY | 将绑定索引ID为2的窗口和控件设置投影y | |
| 设置相对投影角度 | changeProject | 将绑定索引ID为2的窗口和控件设置投影x和投影y,指令可以多次触发并执行,第一次投影x为30投影y为30,第二次投影x为60投影y为60,第三次投影x为90投影y为90,... | |
| 设置x轴相对投影角度 | changeProjectX | 将绑定索引ID为2的窗口和控件设置投影x,指令可以多次触发并执行,第一次投影x为30,第二次投影x为60,第三次投影x为90,... | |
| 设置y轴相对投影角度 | changeProjectY | 将绑定索引ID为2的窗口和控件设置投影y,指令可以多次触发并执行,第一次投影y为30,第二次投影y为60,第三次投影y为90,... | |
| 产生随机数 | randInt | 在操作数2至操作数3范围内产生随机数并赋值给操作数1 | |
| 复制指定页面指定区域背景图左上坐标 | copyBackground1 | ![]() | 复制指定页面指定区域背景图,操作数1为被复制页面和粘贴页面中开启了“图形绘制”的图层控件绑定的变量,操作数2=(页面序号<<24)+(左上角x坐标<<12)+左上角y坐标 |
| 复制指定页面指定区域背景图右下坐标 | copyBackground2 | ![]() | 复制指定页面指定区域背景图,操作数1为被复制页面和粘贴页面中开启了“图形绘制”的图层控件绑定的变量,操作数2=(页面序号<<24)+(右下角x坐标<<12)+右下角y坐标 |
| 粘贴背景图 | pasteBackground | ![]() | 粘贴指定页面指定区域背景图,操作数1为被复制页面和粘贴页面中开启了“图形绘制”的图层控件绑定的变量,操作数2=(粘贴页面序号<<24)+(粘贴处x坐标<<12)+粘贴处y坐标 |
| 指针变量 | setPointerTag | ![]() | 给寄存器号1211‑1213的变量赋值1212‑1214 |
| 保存页面截图 | snapshot | snapshot、blurSnapshot可以帮页面做类似“毛玻璃”的处理效果,首先需要在页面中添加一个图层控件,该图层控件不需要绑定变量,该图层控件属性中的“图像来源”选“截图”,该图层第一层设为全透明,这样该图层控件就可以用于显示“毛玻璃化”的页面截图。snapshot——保存当前页面截图 | |
| 对页面截图进行缩放模糊处理 | blurSnapshot | snapshot、blurSnapshot可以帮页面做类似“毛玻璃”的处理效果,首先需要在页面中添加一个图层控件,该图层控件不需要绑定变量,该图层控件属性中的“图像来源”选“截图”,该图层第一层设为全透明,这样该图层控件就可以用于显示“毛玻璃化”的页面截图。blurSnapshot——对页面截图进行缩放模糊处理(blurSnapshot指令后面的数字越大显示的截图越模糊) | |
| 清除页面截图 | clearSnapshot | clearSnapshot——清除页面截图 | |
| 设置缩放中心坐标 | setScaleCenter | ![]() | 为指定ID的控件&窗口设置缩放中心坐标(80,80),以自身左上角为基准 |
| 设置缩放中心X坐标 | setScaleCenterX | ![]() | 为指定ID的控件&窗口设置缩放中心X坐标,以自身左上角为基准 |
| 设置缩放中心Y坐标 | setScaleCenterY | ![]() | 为指定ID的控件&窗口设置缩放中心Y坐标,以自身顶部为基准 |
| 设置相对缩放中心坐标 | changeScaleCenter | ![]() | 为指定ID的控件&窗口设置相对缩放中心坐标(80,80),以自身左上角为基准 |
| 设置相对缩放中心X坐标 | changeScaleCenterX | ![]() | 为指定ID的控件&窗口设置相对缩放中心X坐标,以自身左边为基准 |
| 设置相对缩放中心Y坐标 | changeScaleCenterY | ![]() | 为指定ID的控件&窗口设置相对缩放中心Y坐标,以自身顶部为基准 |
| 开始播放视频 | playVideo | ![]() | 为指定ID的视频播放控件播放视频 |
| 暂停播放视频 | pauseVideo | ![]() | 为指定ID的视频播放控件暂停播放视频 |
| 恢复播放视频 | resumeVideo | 为指定ID的视频播放控件恢复播放视频 | |
| 停止播放视频 | stopVideo | 为指定ID的视频播放控件停止播放视频 | |
| 开始播放Gif | playGif | 为指定ID的Gif控件开始播放 | |
| 暂停播放Gif | pauseGif | 为指定ID的Gif控件暂停播放 | |
| 恢复播放Gif | resumeGif | 为指定ID的Gif控件恢复播放 | |
| 停止播放Gif | stopGif | 为指定ID的Gif控件停止播放 | |
| 数组数值插入 | appendArray | ![]() | 将数字变量“性别”的数值插入“性别数组”(数组变量)中,操作数3为插入方式,由四位二进制数组成(最后需转成十进制数字)![]() |
| 数组指定位置数值删除 | delArrayByIdx | ![]() | 表示将操作数1(数组变量)第1(操作数2的值)位(实际表示的是数组中第二个数)的数值删除 |
| 数组位赋值 | getArrayElem | ![]() | 表示将操作数2(数组变量)中第0(操作数3的值)位(实际表示的是数组中第一个数)的数值赋值给操作数1(数字变量) |
| 数组指定数值删除 | delArrayByElem | 在操作数1的数组中删除操作数2指定的数值 | |
| 单行注释 | // | ![]() ![]() | 单行注释,添加指令注释 |
| 块注释 | /*和 */ | ![]() | 块注释,注释/*和 */之间的语句,让其暂时失效 |
| 设定要绘的图标 | canvasSetIcon | ![]() | 配合画图板控件使用,canvasSetIcon ID xx,设定接下来要绘的图标,设置0、1、2...显示相应的图标0、图标1、图标2... |
| 画图板设定绘制颜色 | canvasStrokeColor | ![]() | 配合画图板控件使用,canvasStrokeColor ID xx,设定接下来要绘制的颜色(16进制颜色码) |
| 画图板移动 | canvasMoveTo | ![]() | 配合画图板控件使用,canvasMoveTo ID x y,移动点到x y(以该控件的左上角为原点) |
| 绘制线段 | canvasLineTo | ![]() | 配合画图板控件使用,canvasLineTo ID x y,绘制线段到 x y(以该控件的左上角为原点) |
| 绘制icon | canvasDrawImg | ![]() | 配合画图板控件使用,canvasDrawImg ID x y,在x y处绘制icon,居中(以该控件的左上角为原点) |
| 文本输入控件文字滚动时长 | setTextScrollDuration | 设置文本输入控件文字滚动的持续时间 | |
| 文本输入控件文字显示进度 | setTextShowProgress | 设置文本输入控件文字显示的进度 |
注:
在1.10.19版IDE中为提升“writeReg”(发送Tag指令)指令的易用性做了一些功能优化,例如: 我们自定义一个名为“Write_Reg专用变量”的变量,寄存器号设为1000,变量类型为数字,我们会通过给该变量赋不同值向主板发送信号。

另外在工程页面中增加一个按钮,按钮按下的指令如下:

表示按钮按下时给“Write_Reg专用变量”赋值8,并发送给主板,在指令编辑栏点保存的时候屏幕右上角会有弹窗提示该变量被赋值的次数:

同时,进入变量栏,点击该变量,可以查询该变量历史被赋值情况:

通过这样的查询就可以避免该变量被重复赋值。





















