Skip to content

工程实例-串口通讯scriptmode

本章以一个通过串口通讯的温控人机界面为例,详细说明基于ExpOS开发的通讯程序的全过程(以com0,ScriptMode通讯协议为例,串口的详细用法参看device速查表)。 

■ 软件需求

– 用两个按钮来控制室内温度,按“+“, 温度上升(向串口0发送0x55,串口接收端为温度控制系统,收到0x55会升高温度),按”-”(向串口0发送0xAA,温度控制系统收到0xAA会降低温度);

– 温度值由温度控制系统发送过来,需要仪表盘显示;

– 当温度超过30度,界面中的指示灯显示红色并闪烁;小于5度,显示蓝色并闪烁;介于5-30度之间,显示绿色. 

■ 设计步骤

1) 启动Studio,新建工程thermo,根据目标系统的情况,选择合适的配置;

2) 从控件列表中拖入两个按钮控件,并在对象列表区双击该控件,设定名称btn_up和btn_down, 然后在属性区设定"文字"属性内容分别为"+"和"-", 并选择合适的文字大小;

image.png

3) 类似2)步,拖入圆形标尺控件,设定名称为gauge,通过属性区设定各属性使外观达到自己需求,并拖拉尺寸到合适大小;类似方法拖入LED指示灯控件,并设定名称为led,设定属性区中 "关闭颜色" 为黑色和"开启颜色"为绿色。

4) 选中按钮+控件,点击动作列表区的onRelease按钮即可进入事件脚本编辑器,并在脚本编辑器的onRelease函数中输入如下脚本:

 device.com0.write(0x55)

该脚本将在按钮+被释放时自动向串口0发送16进制数55. 

然后选中按钮-, 在脚本编辑器中输入类似代码

device.com0.write(0xAA)

该脚本将在按钮-被释放时自动向串口0发送16进制数AA. 

5) 点击菜单 工具->模拟器启动模拟器验证APP,打开模拟器后会看到上面设计的APP界面运行,选中左下角的"十六进制显示"单选框。用鼠标点击按钮+,可以看到左边的com0模拟结果会输出55,如果点击按钮-,输出aa。温度按钮控制按钮设计完毕,并工作。

6) 关闭模拟器,返回编辑状态,选中仪表盘,输入如下动作脚本:

function onValueChange(value) {
  if (ui.main.gauge.value > 30) {
    ui.main.led.state = 2;
    ui.main.led.onColor='#ff0000';
  } else if (ui.main.gauge.value < 5) {
    ui.main.led.state = 2;
    ui.main.led.onColor='#0000ff';
  } else {
    ui.main.led.state = 1;
    ui.main.led.onColor='#00ff00';
  }
}

以上代码将在仪表盘值变化时自动执行,根据不同的温度值,改变LED指示灯的状态。关于LED指示灯和仪表盘的属性用法,请参考软件速查

7)再次启动模拟器,在串口发送模拟输入框内输入以下字符串"ui.main.gauge.value=3",点"发送"按钮 (模拟温度控制系统发送字符串到目标显示屏。由于com0默认为 scriptMode模式,所有收到的字符串按脚本执行),这时会看到LED变蓝并闪烁;如果输入"ui.main.gauge.value=31"并发送, LED变红并闪烁;如果输入"ui.main.gauge.value=20"并发送, LED变绿并常亮;6步的脚本执行完全达到设计要求。

8) 关闭模拟器,启动调试器就可以把设计的APP通过USB下载到目标系统运行,在目标系统上可以看到同样的执行结果。

这虽然只是一个简单的例子,但是里面包含了界面对象与界面对象,界面对象和设备对象device之间的关联编程,其实在实际的产品设计中大多数也是这种情况。所以,看完本例后,你完全可以开始实际项目的软件开发了。