把厚书读薄,可提高学习效率
把薄书读厚,可增强自学能力
对于已经入门的PLC编程新手,接下来经常要面对“程序如何优化”。
要想优化,自然要先知道什么才算优秀的程序。
一段好的程序,通常要满足以下几个方面:
- 正确可靠健壮:程序必须能够准确实现预定的功能,处理正常和异常情况时都能输出正确的结果,这是程序存在的根本价值;程序应能处理非法输入、硬件故障或环境变化等意外情况,具备完善的错误检测和处理机制,避免因异常导致系统崩溃;
- 清晰规范可读:代码结构应清晰、逻辑分明,变量、函数和模块的命名需规范且能“见名知意”,并辅以恰当的注释,以便他人(或未来的自己)能够轻松理解;
- 易于维护扩展:程序应设计得便于后续的修改、调试和功能扩展。这通常通过模块化设计、降低代码耦合度、使用中间变量隔离I/O、以及采用参数化配置来实现;程序架构应支持未来功能的添加和升级,遵循“对扩展开放,对修改关闭”的原则,使得新增功能时无需大规模重构现有代码;
- 运行高效集约:程序在运行时应尽可能节省资源,包括减少执行时间(时间效率)和优化内存占用(空间效率)。这要求选择高效的算法和指令,并避免不必要的计算。
- 在PLC编程中,上述通用原则会进一步细化,例如强调清晰的逻辑结构、故障诊断与报警功能、数据备份与恢复,以及符合行业标准(如IEC 61131-3)等。
一般来说,“可靠性”是第一位的,这是程序运行的基础,是必须的;然后是“易改度”,因为程序构建过程中,不太可能一蹴而就,通常需要调试、修改或后期扩展以及团队合作,那么易读、好改、可扩展就显得比较重要了;最后是追求运行时间、内存占用、代码长度、IO资源等方面的高效集约利用了。
根据三角形不可能定律
,一段优秀代码在追求上述指标时不可能都满足。
需要说明的是,“易改度”是建立在人的主观感受之上的,所以随着程序员自身的不断进步,对于同一段程序的易改度评价,可能会变化。也就是以前不容易阅读理解的优化代码,现在能轻松拿捏,那么这会间接促进程序在“效用率”方面的进步。
本文提供的“逻辑转数据”程序设计方法,主要优点在于大幅缩短了程序代码,提高了“效用率”。但对于初学者,需要理解消化一下。
下面用交通灯的实例来讲解一下。
一、用户需求
控制要求:
可编程控制器上电后,按下启动按钮;
状态1:南北方向的绿灯点亮,同时东西方向的红灯点亮;
状态2:当南北方向的绿灯点亮10秒后熄灭,黄灯以1Hz的频率闪烁3次后熄灭,随后红灯点亮,东西方向的绿灯随之点亮;
状态3:在东西方向绿灯点亮期间,南北方向为红灯状态;
状态4:当东西方向的绿灯点亮10秒后熄灭,黄灯同样以1Hz的频率闪烁3次后熄灭,随后红灯点亮,南北方向的绿灯随之点亮。
按下停止按钮时,所有灯光熄灭。
需要注意的是,要求中的“状态标签”是程序员分析出来加上去的。一般情况下,用户需求中不一定会这么清晰的把状态标注出来,这就需要技术人员进行需求分析,把用户要求转换为适合编程的清晰描述——这也就是软件工程里面的需求分析步骤了。
二、硬件连线
IO口分配表:
三、软件设计及程序实现
与一般的继电器接触器控制方式类似,根据控制要求的逻辑顺序及对应IO口,编写对应的控制代码。其基本原则是“一 一 对 应”。上图程序与本例有所不同,主要是Y0~Y5连接的红绿灯有区别,时间长短这个可以不管它。但思路就是上面这样,稍微修改即可符合本文案例需求,读者可自行动手锻炼一下
首先我们需要把控制交通灯的六个输出口看成一个整体👇也就是整体视为1个字节,对应的三菱PLC语法是“K2Y0”;只不过本程序中,Y6、Y7没有使用,其值取0或1均不影响控制;因为在持续10秒的状态1中,南北绿灯和东西红灯亮,也就是Y4、Y2取值为1,其余灯不发光则对应位取0,所以从Y7~Y0依次对应可得二进制数“00010100”。该二进制数对应的十进制数就是“20” 。(如果读者忘记了进制转换方法,可点击进制转换了解)
以此类推,读者可以自行分析状态2对应的“4”、状态3对应的“34”、状态2对应的“32”。然后我们把上面分析得到的数据对Y7~Y0这8个端口整体赋值即可。本例主要利用mov指令来实现,梯形图如下👇上图程序简短,还因为对于定时器的使用方法:不再将定时器视为逻辑触点根据规则去控制红绿灯,而是将其视为根据时间推移逐渐累加的数据,从而直接判断时间,然后去控制红绿灯。
了解数字电路及计算机硬件基础原理的读者应该清楚,整个数字世界的基础就是1和0,也就是二值逻辑。但在这个基础上,目前已经发展出了基于大数据的AI !所以我们在熟悉PLC逻辑程序设计之后,多研究一下基于数据的程序设计方法可能是提升我们编程水平的必经之路
点击或扫码关注不迷路,便于分享
版权声明:如需转载请注明出处!