手上有个案子,“按压机器人”,功能是恒定一个力按下一定时间。
屏幕选型使用“sHMIctrl”,一下记录使用过程中遇到的问题以及解决方法。
目录
问题1:按键控件做定时触发,模拟运行时触发不了。
问题2:厂家提供的文档如何全局检索?
问题3:sHMIctrl 说明手册中提到的appbase 代码界面如何打开?
问题4:appbase中的定时器代码不运行
问题5:硬件2个PWM引脚输出不同频率
问题6:在appbase中刷新界面方法
问题7:在某个界面,按键控件 text 值不显示
问题8:串口1、2的区别与使用
总结
问题1:按键控件做定时触发,模拟运行时触发不了。
解决方法:
原因时软件模拟时间不准确造成(实际硬件上跑正常),软件模拟时需要把上图延时200数值减小,本测试减小到5 模拟正常。
问题2:厂家提供的文档如何全局检索?
解决方法:上述文档只能页面搜索,全局搜索使用上位机软件中的帮助功能。
问题3:sHMIctrl 说明手册中提到的appbase 代码界面如何打开?
解决方法:
问题4:appbase中的定时器代码不运行
解决方法:
appbase 中定义的坐标不能删除
说明X2,Y2时屏幕分辨率-1的值
问题5:硬件2个PWM引脚输出不同频率
解决方法:
不支持2个频率,这两个PWM智能同一频率不同占空比。
问题6:在appbase中刷新界面方法
参照文档做法,实际运行不能刷新界面
解决方法:
因为APPbase控件中缺少函数,这部分代码复制到APPbase中就行了
//---create():appbase初始化,书写有关内部属性的初始化(从bind区域调用)和bin类数组的初始化
void create()
{
//abc=bind_get("abc"); //属性与全局bind变量的赋值,确保当前控件属性与全局变量属性同步
}
//---draw():绘制背景,在appbase中一般不用
void draw()
{ //在此书写绘制背景的语句
//automode(bc); or tranmode(n);//选择显示模式,具体讲解请参见语句说明书
}
//---show():刷新前景数据,一般用于显示所有界面都有的内容,比如时钟;当然也可以写在page控件中
void show()
{ //在此书写刷新前景的语句
//automode(bc); or tranmode(n); //选择显示模式,具体讲解请参见语句说明书
}
//----onmouse方法,用户点击触摸屏上的热区,会调用此方法,其中:
//t:触摸模式: t=0 按下鼠标按钮,相当于触摸屏点击 ;t=1 鼠标移动 ;t=2鼠标抬起;t=3鼠标长按
//rn:热区编号,允许一个控件对应多个热区,多个热区靠rn变量识别,对于按钮等整个控件一个热区,可以忽视rn
//在appbase一般不用,当然也可以用此来构建所有页面都有的热区,比如状态栏进入菜单的固定热区;当然也可以构建在page中
void onmouse(int t,int rn)
{ //在此书写有关热区处理方法的代码
}
问题7:在某个界面,按键控件 text 值不显示
解决方法:对应的页面代码竟然没创建按键class ,创建之后正常。
问题8:串口1、2的区别与使用
备注:在与shmi-ctrl 咨询后得知
串口2支持的模式是
接收字符串
str urecv(int un);
接收二进制
void urecvbin(int un,size);
注意,串口2只能在通信队列控制语句中使用
void que_do(int un,int step,int timeout){
总结
这款屏幕设计的还是不错的,能用在很多场合,原因的可以C代码控制外设与界面显示非常方便。
对比自己使用单片机+GUI的方式可以节省90%的工作量(对我来说)。
吐槽下:sHMIctrl 说明手册 这个文档,虽然体验上比不上大的半导体公司的文档,但是按照这个文档都过一遍就能理解这个屏幕是的使用方法。
重点:sHMIctrl 智能屏技术群,技术支持非常快。
通过技术支持也弥补了文档中的瑕疵,遇到的问题都会得到解答。
感谢:
对我问题的解答,可以说是实时性解答,难得的。
总共花了4天时间,客户对我做的demo认可。