在工控行业混迹了十多年,一直做与PLC相关的项目,就把自己的一些经验做个总结,由于水平有限,有不足之处还望各位多多指教。
我刚接触PLC的时候是拿着一本廖常初老师的关于S7-200的教材入的门,廖老师的书里讲的步进编程的思想对我之后的PLC编程影响很大,这个思想的好处就是一步一步的执行,当进入下一步的时候同时退出上一步,在程序中只有一个活动步,使程序逻辑很清晰,缩小了问题出现的范围,而且在编程之前先画出顺序功能图,如果顺序功能图画的完整,按照功能图做出的程序基本上就没啥问题了。不论大小项目最好画个顺序流程图出来,养成好的习惯能达到事半功倍的效果。以下曾经做过的一个顺序流程图。
这个顺序功能图虽然花了不少时间,当时工期紧半自动都没试,直接投的自动,管道内可是焦炉煤气,同一根管道又进煤气又进空气,不停的切换,真是捏了一把汗,还好程序基本没啥问题。
做程序还要进行规划,将程序分成不同的控制单元,尽量减少单元之间的联系,举个简单的例子,项目中要用到罗茨风机,风机口有气动阀门,要求开风机的时候先开阀门,再起动风机,停止的时候要先停止风机后关闭阀门,我们可以将风机和阀门看做一个整体,将风机的起动和停止作为一个单元,别的程序段只负责起动和停止风机,不管风机起动和停止风机单元内部的逻辑关系。
作为一个合格的编程人员,程序和变量注释一定要写清楚,这是对编程人员最基本的要求,如果你还还在用绝对地址编程,那么需要想想自己是不是该换个工作了。
另外就是做程序不要怕复杂,不要觉得难就不做了,我们做自控的也算个技术活,用户很容易被忽悠,这是我搞工控这些年经常看到的事,用户提出了要求,只要在合理范围之内我们要尽量去满足,当你完成一次次的挑战之后,你会发现曾经的鸿沟不过是个小水渠,做程序就要自己给自己找困难,流行的一句话就是没有困难创造困难也要向前冲。
对以上我总结五点:
1、编程要有正确的方法,也可称为编程的指导方法。
2、养成画逻辑图的好习惯,画图的过程就是程序构思的过程。
3、规划程序结构,将程序规划成不同功能的小单元,减少不同单元之间的联系。
4、养成建立变量名、增加变量和程序段注释的习惯,一是为自己编程方便,二是为别人读你的程序时方便。
5、不断的挑战自己的极限在能够最大的进步,用户的苛刻要求总是成为你不断进步的推力。
今天就说这几条吧,这说不上是技巧,只是一个指导思想。如果有时间在讲解一下PLC编程的技巧。
楼主最近还看过
悬赏200分的一个问题,如何读取CPU IP地址的求助终于有论坛的朋友给出了答案,AB的资料真的不好找,在KnowedgeBase库中搜到相关的问题,就是不能看答案,郁闷,还好咱们工控网友能人无数。
根据CPU的IP地址做了一段选择程序,将不同的参数分配给了不同的CPU,这也样10台PLC就用了一个程序,如果程序需要修改也只要修改一个程序就行了。
其实很简单,首先读取CPU的IP地址,用最后一个字节作为区别不同CUP,不同的CPU执行不同的程序段,如果有相同类设备,只有很少部分程序不一样的情况可以试着这样做一些。
回复本条
做程序的时候最好规划一下,如果程序有几个不相关的程序组成,那么最好将他们分开,不要放在一个程序中,拿AB的PLC来说,AB的PLC程序分为Task、Program、Routine,AOI文件,Tasks任务组分为周期性任务、事件中断和连续执行任务,周期性任务主要用于对执行时间有要求的周期执行的任务,如PID就常放在周期任务中,周期任务在西门子PLC中叫时间中断,顾名思义其执行不是按照整个程序的扫描周期执行,而是按照一定的时间执行,如每间隔100ms执行一次。由于PLC的执行周期受循环程序,跳转程序,主控指令等的影响,每个周期执行的时间不会相同,所以对执行时间比较苛刻的场合还是用周期性任务比较合适。时间中断常常用于对某个事件作出立即响应,执行完成后再去执行PLC连续任务,这类任务编程人员用的不是太多,但是也是程序不可忽略的一部分。连续任务讲的就是连续执行的任务,从主程序开始连续扫描,完成一个扫描周期后再进入下一个扫描周期。大多数的程序都会在这个任务中执行。
在任务下可以建立Program,Program字面的意思就是程序了,每一个Program有自己的符号表,也可以叫局部变量表,局部变量只能在Program中使用,不能被触摸屏、上位机以及其他通信伙伴调用。Program下有多个Routine,每个Program中必须有一个主的Routine,其它Routine通过主Routine进行调用。
这样一级一级下来程序结构就比较明朗了,查问题也好查了。
以上图片中就是我将的一个程序的结构,结构化设计的程序条理比较清晰,如果是多个人做程序,这一每个人分一部分,最后倒入到一个程序中。
我这里只是那AB的PLC举个例子,每家PLC规划的结构和名称不相同。
觉得上面讲的有点复杂了,简单点说就是首先要将程序分为:时间中断执行部分、事件中断执行部分、连续执行部分,然后根据程序的关联性将程序分成不同的单元,使程序结构清晰。
每个回复不能太长,搞不好就被系统给删除了,所以还是一段一段的来吧。
回复本条
将程序层次划分完成后,完成最基本的规划,开始规划每个单元的程序,首先要将一些常用程序建立起来:
1、主程序
程序执行的起点。
2、公共程序
不属于任何部分或与多个子程序先关的部分。
3、初始化程序。
最好在PLC起动的时候做一个初始化,防止不必要的错误出现。
4、报警程序。
程序的报警部分放在这个里面。
5、设备的控制部分。
我常常采用的方法是将每个设备做成一个块,每个块分为手动和自动部分。这样在手动状态下可以对每个设备进行单独操作,在自动程序下,只需要从自动程序段中获取连接变量的值就行了。如下图所示
6、自动控制部分。
自动程序的逻辑部分都放在这个程序中,最终逻辑的执行结果去控制设备控制部分的程序。
7、通讯部分。
通讯的读写、诊断部分放在这里。
8、其它专用的程序部分。
以上是我做程序的一些习惯,仅供参考。
回复本条
做什么事都要持之以恒,做的多了就熟练了,编程如此,其他事亦如此。走万里路,读万卷书,实践,读书,实践,读书…………,如此反复而已。
将卖油翁的故事赠给大家:
陈康肃公尧咨善射,当世无双 ,公亦以此自矜。尝射于家圃,有卖油翁释担而立,睨之,久而不去。见其发矢十中八九,但微颔之。
康肃问曰:”汝亦知射乎?吾射不亦精乎?”翁曰:”无他, 但手熟尔。”康肃忿然曰:”尔安敢轻吾射!”翁曰:”以我酌油知之。”乃取一葫芦置于地,以钱覆其口,徐以杓酌油沥之,自钱孔入,而钱不湿。因曰:”我亦无他,唯手熟尔。”康肃笑而遣之。
此与庄生所谓解牛斫轮者何异?
回复本条