嵌入式软件机器编程为啥选择梯形图作为编程语言?
2019-12-17 21:29:53
  • 0
  • 0
  • 0

(机器编程系列文章二)

嵌入君

上一篇《机器人程序员正朝我们走来,大家准备好了吗?》文章中,谈到了我个人的观点,在一个编程平台中,是否算是机器编程,需要看机器完成的代码占总编码的量和对编程人员的技术要求。那么,我们在设计机器人程序员系统时,需要刻意的设计,尽量让编程者只利用很少的知识,轻松掌握编程技能,同时尽量减少编程者的工作量。

梯形图(LAD, LadderLogic Programming Language)是当前流行的PLC工控机或逻辑控制器使用的编程语言,在常用的继电器与接触器逻辑控制基础上简化了符号演变而来,具有形象、直观、逻辑简单的特点。掌握该语言不需要比较高的专业知识。海外也是要求没有本科(学士)文凭的电工掌握梯形图语言的编程。

一、 梯形图语言可以实现机器编程

在我们的嵌入式软件的开发平台中,选择了PLC梯形图语言。因为梯形图语言,可以把程序模块封装好,放入系统内。然后制作一个图标,客户使用该图标,就相当于调用了该程序模块。

我们下边使用一个我们系统的简单程序例子说明这个问题。

图中共2个梯级。第一个梯级是控制一个定时器的使能,第二个梯级是控制计数器计数。左边的边线表示元件挨着左侧绿色边线输入逻辑值为真或二进制的1,右边的绿线表示一行的结束,和右侧绿线相连的元件必须是输出元件,表示执行某一个动作,比如给某个变量赋值、执行一个代码模块等等。不和右侧绿线相连的元件都是输入元件。一个元件的左侧是逻辑输入,右侧为逻辑输出。当一个元件左侧输入为绿色时,表示逻辑输入是真或为二进制的1。如果左侧输入是红色,表示逻辑输入为假或二进制的0。一个元件的右侧为绿色时,表示输出逻辑为1,反之为0。对于绝大多数输出元件来说,输入为绿色时,该元件执行相应的动作,否则,不产生动作。

这种编程方法屏蔽了大量的计算机是软件和硬件知识,可以使编程者可以轻松掌握梯形图的编程逻辑,调试时,因为整个逻辑和数据(或参数)显示都比较容易理解,从而使调试变得相对其他软件编程平台而言,变得非常简单。比如上边的程序,每个元件输入输出都显示在图中,元件的关键参数和状态值也显示在屏幕上,调试时,一目了然。

我们可以这样理解梯形图程序,一个梯级(表示一个完整的逻辑语句,可以多行),表示如果目前系统和程序输入元件满足某种条件,输出元件(紧挨着右侧绿边线的元件)将执行相应的动作,比如给某个变量赋值、启动定时器、计数器计数、执行某个代码模块等等。反之,则不执行。更简单的观察为输出元件的输出是绿色,表示执行,输出元件的输出为红色,表示条件没有得到满足,不执行。上图的第一梯级,条件满足,定时器工作。第二个梯级,条件不满足,计数器的计数值不加1.

从上边例子,不难看出,掌握梯形图编程的逻辑是比较简单的。即使不懂逻辑,只要一个梯级中,有绿色的信号传递到输出元件,输出元件即可正常工作(发生动作)。再者,我们可以把代码模块用一个元件代表,即一个图标即可调用一段很长的代码段。简而言之,梯形图可以做到“一句顶一万句”的效果。

二、 梯形图语言可以实现“准机器编程”

再结合我上篇文章提到的大棚温控的项目,我们可以把温度检测的部分(可以多个传感器探头)封装成一个模块,把控制驱动模块也封装成一个模块,不同的模块用型号加以区别,占用资源可以用元件的地址加以区别。这样就把相应的图标变成我们上边图示控制定时器的例子(只有一个梯级,占一行)类似了。当然,还需要客户进行参数设置。但这个操作就和使用手机上网购物的操作类似,很容易掌握了。

从上面的例子,就不难理解我们选择梯形图语言作为我们嵌入式软件开发平台的编程语言的理由了。也就是说,使用梯形图语言编程,只要提供的代码模块足够,可以达到机器编程的目的。

当然,实现机器人程序员是理想的例子,需要传感器厂家,各种软件开发商,平台开发者合作才能实现。我个人认为,现实中更多的情形是“准机器编程”或“机器人辅助编程”的情况。更类似PLC编程和应用的情形。

还是大棚温控的例子,编程人员可以利用我们嵌入式软件开发平台本身提供的各种采集数据模块,滤波模块和控制模块,外加上一些数据处理模块和运算模块,同样可以实现上面的例子。只是两个图标变成了调用两个子程序的图标而已。

虽然没有完全依赖实现机器人程序员编程,但使用了梯形图编程语言编程,编程人员自己完成的项目的代价也很小。即使完全没有接触梯形图语言编程的人,具有中学学历的员工,学习一个月也就基本掌握了。因为开发平台中,提供了大量程序模块,使编程人员非常容易的编制一个控制项目的完整程序。具有梯形图编程经验的员工(不需要该员工懂计算机技术),一般也就是不到30分钟,可以完成了大棚温控的项目的程序编写。

当然,有些软件模块是一般编程人员难以实现的,比如电机控制模块,变频模块等等。我们的平台可以提供第三方软件和硬件接口。第三方可以把自己芯片和我们平台提供的芯片(被开发对象)连接在一起,既可以采用网络的形式也可以直接IO相连。编程人员调用现成的模块或图标即可。目前已经有芯片厂商把多核制作在一个芯片上,灌制软件可以分开,这样就很容易把其他厂商的软件和开发平台的开发对象都放在一个芯片中。芯片的价钱也没有高多少。

三、 梯形图语言也可以用于类似普通的软件开发平台

梯形图语言可以“一句顶一万句”,也可以“一句顶一句”。比如把一个字节或字从一个地址移动到另一个地址,这实际和汇编语言的一条指令等同。因此梯形图也可以作为普通的程序开发语言使用。嵌入式软件的开发平台使用梯形图语言的其他功能和PLC类似, 便于“计算机外行”来编程,梯形图语言在处理计算、字符等方面显然落后于其他的软件开发系统。没有必要回避梯形图编程语言的这些缺点。这也是有一利必有一弊。

其实可以这样理解我们的嵌入式开发平台。其实提供给客户的东西就已经是成品或半成品的东西。客户只需做少量的工作,就可以变成成品了。这也是我们设计这套嵌入式开发平台的“初心”,就是为了大降低客户开发成本和开发周期。

诚然,用开发平台提供指令(元件)也能完成嵌入式系统的编程,但一般不提倡这么做。用梯形图语言编程,应尽量使用系统提供的代码,尽量少的自己编程,让绝大多数代码由系统提供,而不是自己使用“一句顶一句”的指令去编写。这样即提高了效率,降低了成本,也保证了程序运行的可靠性。

使用“一句顶一句”编程时,是没有办法的办法。当然,必要时,也必须使用。这也增加的编程的灵活性和扩大了平台的使用范围。

其实我们把各种处理方式使用C语言、汇编语言或其他语言事先编好,放在平台中供给客户使用。客户使用梯形图语言编程,实际都是调用这些用其他语言编好的模块而已。我认为,在使用梯形图语言时,尽量使用系统提供的代码,少使用自己编写的普通编程代码(类似于普通C语言功能的代码),这样提高了编程速度,也是一种扬长避短的方法。

四、机器编程使用梯形图作为编程语言的梳理和总结

从我们接触到的编程平台来看,梯形图语言编程掌握比较容易,也能把复杂的代码模块用图标表示,便于实现机器编程。

从技术现状来看,完全实现机器编程有很大难度,但使用我们嵌入式软件开发平台提供的资源,能够在较短的时间内,完整程序的编制是没有问题的。这个应用场景和市场流行的PLC工控机相似。考虑到几乎很少用到计算机知识,系统资源配置,整个代码量绝大多数是系统完成,而不是编程者完成,这种情况即使不算机器人程序员完成,也算是“准机器编程”。从我们的经验来看,考虑到编程人员不需要消化芯片手册,也不需要了解硬件资源的特性,不需编程者管理整个系统和对系统资源进行配置,编程效率至少提高了10倍以上。大量节省了整个软件制作的成本和编制时间。随着系统逐步丰富,第三方厂家和软件商不断提供各种配套软件,编程平台会不断向机器人程序员编程靠拢。

另外,梯形图语言也能像一般的开发平台一样制作代码,弱点是计算和字符处理的处理。嵌入式主要用于各种电子设备、工控、飞行器、机器人等等,字符处理相对比较少。大部分解决的问题数据采集,就地控制等等,在制作梯形图编程的平台时,一定有经验丰富的控制工程师参加,把大部分采集、滤波、控制程序已经制作成了现成的代码模块,实际上也相对规避了梯形图语言的弱点。

以前的梯形图语言基本都是用在PLC工控机中,较少涉及字符的使用。当梯形图语言用在嵌入式系统时,因为液晶等硬件的使用,必然涉及字符的使用,我们平台今后会适当加入针对液晶和字符处理的一些功能指令(元件),扩大平台的使用范围,为用户提供方便。



相关文章:

机器人程序员正在朝我们走来,大家准备好了吗?

(机器编程系列文章一)

http://maxxie2019.blogchina.com/972967572.html

 
最新文章
相关阅读