数据绑定
- 参见演示系统的"edit输入"这个界面:
在该界面中:
bind(e1.text,"电压");
bind(e2.text,"电流");
start();
在start语句前面我们使用了两条绑定语句,将电压绑定到e1.text属性上,将电流绑定在e2.text属性上,于是,无论在什么时候(不管是否在当前界面)我们只需要从串口传入:
$"电压"="5.00V";$"电流"="1.05A";
- 注意:语句中间不能有空格,且发送完成之后,尾部必须带有0d 0a,表示当前一行语句发送结束,开始运行,这点和串口屏一致;
- 目前版本预设变量绑定数量为64,超过后会报错终止
即可以更新界面显示;
模拟运行
- 此方式支持模拟运行:
点击“发送”后,界面对应的值就会变更出来
- 实际控制器运行:
- 发送后:
- 注意:
- 语句间不能有空格
- 引号必须是asc码的引号,不能是中文引号
- 语句发送之后,必须有0d0a结尾,否则语句不执行
CMD的其他用法
- CMD是command的缩写,意思是命令字符串,和UsartGPU一样,支持基础的命令调用,但是由于是编译系统,系统没有存储变量名称,因此系统无法支持变量以及表达式,只支持基础的固定参数级别的调用;
- 支持的模式如下:
- 数据绑定赋值语句,如:$"电压"="5.00V";
- 内部函数直接调用,如:cls(0);
- 控件方法或事件的调用,如:app.func("input str");
- e1.text="2.00V"; 这种语句虽然支持,但是最好不用,因为你无法获知当前是哪个页面
- 由于cmd不支持变量及表达式,因此echo(e1.text);这种语句是不能被执行的,在实际操作中,这种语句其实也是没有实际意义的,因为单片机无法判断当前控制器在哪个页面,一定不要试图用单片机获取当前控制器所处的页面,这种算法会引来非常大的不稳定因素;比如:
- 有用户这么做,每个页面的开头用echo("1"),表示当前是第一页,单片机收到知道当前是第一页,此时发送e1.text="2.00V",可是,就在发送的瞬间,用户点击了屏幕,系统切换到第二页,于是第2页的e1.text被修改了,导致系统数据紊乱
正确做法:
- 如果e1.text是用户在界面上输入的数据,需要传入单片机处理,可以在e1.text变更事件中使用echo将变更内容输出到单片机;
- 如果单片机需要主动获取该变量,需要在e1.text变更事件中将数值存储到bind存储区,然后再appbase控件中写一个函数输出,代码示例:
- 页面代码:
class e1=loadcom(edit);
void e1.ondialogreturn()
{ text=getretstr();
bind_set("电压",e1.text);//增加此语句的意义是
//将用户输入的值写入bind存储区,目前系统考虑到性能,
//没有做数据的双向绑定,只做了数据的单项绑定,
未来是否做双向绑定请注意升级公告
}
bind(e1.text,"电压");
start();
- appbase控件代码
void abc(){
echo(bind_get("电压"));
}
- 由于appbase控件在任何一个界面都存在,于是,串口发送cmd命令:app.abc();都可以获取相应的"电压"对应的值,当然输出值的格式可以在app.abc函数中自行约定。