编写PLC程序的7种方法

发布者:清新时光最新更新时间:2025-03-10 来源: elecfans关键字:PLC程序  辅助继电器  置位  复位方法 手机看文章 扫描二维码
随时随地手机看文章

第一种:辅助继电器的置位复位方法      

这种方法是最原始最初级的写法,也是最简单的一种写法,比如第一步置位M0,M0接通后控制某个结果,结果实现后复位M0,再置位M1,依次进行l流程控制。这种写法通用所有的PLC。

43ad3d24-a7cf-11ee-8b88-92fbcf53809c.jpg?imageView2/2/w/1000

第二种:使用步序编号的方法      

使用整型变量作为步序编号,易于理解,便于维护。步序增减,跳转等操作方便,简单,易懂。复位操作时,仅需将变量值改为0。编程中需注意,当连续步序的条件同时为真时,步序号在一个PLC周期内连续增加,直至最后一条未导通步序指令,而由步序号触发的其它程序则未被执行。调试时容易漏掉此种情况。

43bde804-a7cf-11ee-8b88-92fbcf53809c.png?imageView2/2/w/1000

第三种:GRAPH(顺序功能流程图语言,也称SFC)       

这种方法跟我们的设备工艺流程图非常相似,也是最直观的一种程序,第一步干什么,什么条件又开始干第二步,看上去非常清楚。虽然程序表面看上去非常清楚明了,但编写项目程序实际的操作过程并不简单,要熟悉这种写法需要时间过程,而且这种方法并不通用所有的PLC(如西门子S7-1200不支持,仅S7-1500支持),还有就是对PLC性能要求高,也占用很大的工作存储器

43c1a8ea-a7cf-11ee-8b88-92fbcf53809c.jpg?imageView2/2/w/1000

第四种:移位指令方法       

这种方法是利用移位指令的移位原理实现步序的控制,比如欧姆龙的SFT指令,三菱的ROL、ROR等,西门子的移位指令也差不多。这种难点在于搞清移位指令的工作原理即可,也是通用所有PLC的编程。      

第五种:DECO解码指令的方法       

解码指令DECO:即将整数转换为Dword中对应的位置1,且当步序产生变化时,PLC必定会重新执行一个扫描周期,不会产生连续跳多个步续的情况。避免了程序中步序触发的指令没有被执行的情况。跳转和复位操作编写简单。如西门子S7-1200PLC可支持DWORD解码(32位),S7-1500可支持LWORD解码(64位)。 

43cbe738-a7cf-11ee-8b88-92fbcf53809c.png?imageView2/2/w/1000

第六种:工作和状态变量赋值的方法       

这种方法是数据传送指令与比较指令相结合实现程序流程步序转换的,个人认为这种方法是最容易理解的,操作上也是最简单,建议初学者尝试使用,当然这种方式也是通用所有PLC的。设置两个变量字state word,work word。state word中的位作为步序标志,work word作为跳转目标步序标志。当前步序state word中步序位对应的条件满足时,触发work word中下一步对应的位。而后,在PLC顺序扫描至传送指令时,将work word的值赋值给state word,完成步序跳转。优点是没有置位和复位操作,同一时刻只有唯一的位置1,跳步时只用将对应的work word 中的位置1即可。复位时,将state word与work word清零,程序会自动将state word中第一位点亮。当步序大于16时,可改为DWORD或增加word的数量来增加步序。

43dca50a-a7cf-11ee-8b88-92fbcf53809c.jpg?imageView2/2/w/1000

43e9ba9c-a7cf-11ee-8b88-92fbcf53809c.png?imageView2/2/w/1000

第七种:SCL编程的方法 

越来越多的小型PLC都支持SCL语言,SCL是一种类似于PASCAL的高级编程语言,常用的FOR、IF、WHILE、CASE等程控语句组合起来能编写出很强大的算法和逻辑,用此写法的人也越来越多。用SCL设计自动程序主要就是结合CASE和IF语句,将Step作为程序号,如果存在比较长的分支或并行动作时需要有借助多个Step程序步,这里不做深究。

43f3e62a-a7cf-11ee-8b88-92fbcf53809c.png?imageView2/2/w/1000


关键字:PLC程序  辅助继电器  置位  复位方法 引用地址:编写PLC程序的7种方法

上一篇:风冷式工业冷水机VS水冷式:性能、应用与环保全方位对比
下一篇:工业自动化仪表常见的现场问题

推荐阅读最新更新时间:2026-03-20 16:34

stm32高低电平
高定平置1,低电平置0. void Crush_Scan(){ delay_ms(10); if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==0 ||GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)==0){ Upload_Crash=1; }else if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)==1||GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==1){ Upload_Crash=0; } }
[单片机]
ARM GPIO接口方法
如下面的代码,为啥把端口SDA付给SDA就是置位操作呢? 其实SDA是一个偏移量,它基于GPIO_PORTB_BASE,进行偏移,SDA定义的就是某一个管脚,如 #define SDA 0x20H 这是16进制数,展开为二进制则是0010 0000B, 可见,偏移量0x20H,其实也可以用来置位,因为第六位为1。再看GPIOPinWrite()函数,第三个参数就是SDA的值,要知道,函数赋值,最小都是char类型,一个字节,你无法赋值一个bit,所以,既然这样,就干脆就用偏移量赋值就行了(函数的实现,可能通过&或者|)。 所以,某些ARM编程的书籍上说要把某个GPIO的值赋值给它本身,我当时就很不解,为啥要赋值给它本身?其实就是因
[单片机]
AVR编程_如何用C语言设置,清除和检查是否I/O
Question 如何用C语言设置,清除和检查是否置位I/O 寄存器? Answer 在AVR Studio的Help菜单中选择the online AVR Tools User Guide然后打开AVR Assembler -- User Guide -- Expressions,在这里你能获得很多汇编语言关于算术运算方面的应用。 下面是一些简单和常用的算术运算操作,这个例子是改变或检查AVR控制器PORTB端口上PB6和PB4的bit值。 设置PB6和PB4,同时不改变其他管脚状态 PORTB |= (1 PB6)
[单片机]
6进制计数器(采用T4290用法实现)
在这一个问题中,首先,应该扩展计数器的概念。计数不一定从0状态开始计数,可以从任意状态(初值)开始,经历N个有效计数状态,重新回到计数初值,组成一个计数循环,即可组成N进制计数器。用置位法组成N进制计数器,是从置位值开始计数,在原有计数循环中,当置位端无效时,按原计数顺序进行计数;在置位端有效时,强行终断原有计数循环,回到计数初值(置位值),重新开始下一个计数循环。形成新的计数循环,构成N进制计数器。本方法适用于具有置位功能的集成计数器。如T4290芯片就是具有置位功能的集成计数器。。在十进制计数状态下,当S 91 =S 92 =1(S 91 、S 92 同时有效)时,置位:Q 3 Q 2 Q 1 Q 0 =1001(9)。当S
[模拟电子]
6进制计数器(采用T4290用<font color='red'>置</font><font color='red'>位</font>法实现)
一种430软复位方法
最近在搞430的FLASH的自定义法(利用串口)程序烧写,烧写完成后断电复位,reset按键就可以运行新的程序。但是和学长交流了一下,这种方法不够好,希望有一种软复位的方式。于是百度了一下,都是些对看门狗进行写入特殊值使得430的cpu复位。反正个人是没有采用。 因为在搞程序的烧写下载,所以看了一下430的BSL。看到里面有一段话,关于从C代码中启动BSL的方法。如下: 3.7.1 从一个外部应用中启动BSL 将程序计数器设定到内存为位置0x1000 来启动BSL。堆栈一直被复位,而RAM 被清空。应该注意的是,GIE 位未被禁用,所以如果不需要中断的话,这一步应该通过调用应用来完成,并且如果它们被使用的话,这一步应该从“
[单片机]
STM32软件复位的实现方法
前些天写程序的时候,需要做一个自动复位的功能,也就是当收到外部通讯设备复位指令时,主设备立刻执行复位操作。当时是想到的用看门狗实现。但是觉得似乎不太妥当,因为看门狗的复位是需要一定的时间。而在这段时间内系统还是处于正常运行当中,而且所有中断都会正常响应。这恰好与要实现的功能南辕北辙。需求是当收到复位指令时,系统停止执行后面的所有操作,包含中断响应。所以看门狗无法实现。 我用的是STM32F103芯片,了解这颗芯片能用来复位的只有5种,外部复位、独立/窗口看门狗、软件复位功耗管理。看来我能用的也就只有软件复位了。但是我查了所有STM32F103芯片相关的资料,还是没有找到具体的实现方法,最多是提到过这种复位寄存器SYSRESET
[单片机]
一种430软复位方法(原创)
最近在搞430的FLASH的自定义法(利用串口)程序烧写,烧写完成后断电复位,reset按键就可以运行新的程序。但是和学长交流了一下,这种方法不够好,希望有一种软复位的方式。于是百度了一下,都是些对看门狗进行写入特殊值使得430的cpu复位。反正个人是没有采用。 因为在搞程序的烧写下载,所以看了一下430的BSL。看到里面有一段话,关于从C代码中启动BSL的方法。如下: 从一个外部应用中启动BSL 将程序计数器设定到内存为位置0x1000 来启动BSL。堆栈一直被复位,而RAM 被清空。应该注意的是,GIE 位未被禁用,所以如果不需要中断的话,这一步应该通过调用应用来完成,并且如果它们被使用的话,这一步应该从“返回BSL
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved