资深工程师分享:PLC程序设计思路分享(二)
在论坛里面有个学员问了一个程序设计的问题,问题如下所示:
我现在有个程序没有想到办法,就是有五个气缸!每次随机选择,按先选先动的顺序编程!应该怎么做!能不能写个程序看看?s7-1200的plc.。例如选择34521.就是3号气缸先动,然后4号气缸,然后5号气缸......。程序应该怎么做
大家看到这个成后,可能会说着可以用先进先出的指令去做啊。确实我们可以先给每个气缸分配一个编号,把每一个编号通过填表指令填入到表格中,然后启动的时候,通过先进去出的指令(FIFO)把数据读取出来后,做比较,如果等于1表示的时候打开第一个气缸,等于2表示打开第二个气缸。。。。。。如果我们使用200系列的PLC确实可以这么做,但是对于1200PLC里面来讲,找不到这两个指令,那么如何我做呢?
我们其实也可以按照先进先出的方式来做的,首先也给每一个气缸分配一个编号,默认1到5对应1#气缸到5#气缸,然后给每个气缸分配一个存储器(MB11到MB15)分别用来存储该气缸的动作顺序,顺序可以通过递增指令和传输指令来完成,当打开气缸是,按下启动按钮对MB17加1 ,MB17作为当前需要启动气缸的选择。
若MB17等于1,表示要启动1#气缸,若等于2表示要启动2#气缸。因此我们只需要用MB17和MB11到MB15中的数据做比较,当MB17与哪个MB11到MB12中的哪个存储区相等,则启动哪个气缸。
程序框架如下图所示:
本程序为一个结构框架程序,使用时,可以根据情况进行修改添加,仅供参考。
本文为技成曾鑫老师原创作品,未经同意转载必究
↓↓↓下载可免费观看西门子系列课程
西门子工程师:图文干货,不同角度来解析S7-1200PLC程序结构
大部分从日系PLC或西门子S7-200PLC来用S7-1200PLC,可能会不熟悉于S7-1200 或者TIA PORTAL 里面的部分专业术语,比如OB,DB,FC,FB这一些模块等等,其实这专业术语也包含了S7-300、400 、1500等。所以今天给大伙讲解的内容,理论上亦可适应于这些PLC,很多概念性的东西基本上是相通的。
西门子S7-1200PLC的功能强大正式基于拥有多种变量类型,这里用不一样观点来阐述PLC编程,你会发现这里面其实也有很多有趣的地方。
S7-1200 由以下几类基本元素组成:
OB:组织块、DB:数据块、FC:函数、FB:FC+DB组合。
OB组织块
当我们新建一个程序时,系统会自动建立一个Main[OB1]程序,该程序会在PLC的每个扫描周期被调用。Main程序和200里面的主程序,是一个同样的概念。也类似于C里面的Main ,即为函数入口点,我们可以在Main程序里面调用各种函数和块。下面的图是在程序中调用一个FC和FB,然后在FC中调用另外一个FC,形成嵌套调用。
注:方便我们记忆和理解,真正的地址在[.....]中,如OB1,FC2,FC1,FB1等等。
图1 Main程序
图2 Main调用结构
图1显示了Main程序具体内容,图2显示了Main程序的调用结构。图中很多元素的概念,我们暂时不需要了解,但是可以看到一些整体概念,Mian程序包含程序段1(NW1)和程序段2(NW2),在Main的调用结构中包含了3个元素test、调用FB和调用FC。其实应该是4个,还有一个嵌套在中,点击左侧箭头,出现如下图所示:
图3 FC嵌套调用
图4 OB分类
我们来分析上图中的OB类型。OB块主要用于程序循环、启动、延时中断、循环中断、硬件中断、HSC中断、诊断错误和时间错误八大事件。OB块还有两个属性是编号和优先级,优先级越高,中断级别越高。在同样的优先级别,OB编号越小,越优先执行。从图1中,我们看到Main程序的地址在OB1,是一个循环运行程序,优先级为1较低。时间错误事件的优先级最高,当发生该事件时,会暂停执行Main程序,优先执行时间错误事件OB块。程序循环OB类块的编号属性为“1;>=123”,意为我们可以创建多个类似OB块。因为新建程序默认OB编号为1,假设我们要创立该事件类型OB块,那么默认编号为123起,同时OB1的执行要优先于OB123。诊断错误事件OB块和时间错误OB块只有一个。
图5 添加OB新块
图6 手动选择创建编号
图5 添加OB新块界面,我们可以看到,在红色矩形框处,OB编号数值为123,我们选择的创建方式为自动。如果你想起用别的编号,可以选择手动方式,同时可以选择创建OB块采用的语言。大家不妨自己试一试哦。
这里讲解几个常用的OB类型块使用,其他类型OB块使用,大家可以翻阅系统编程手册。
程序循环事件OB块(program cycle):该块主要用于执行循环运行的程序,一般一个程序中创建一个便可以,就是默认的Main程序(OB1),我们可以通过调用FC和FB来实现其他功能。系统CPU每个扫描周期都会执行该类型OB块。
启动事件OB块(Startup):该块主要用于初始化变量,当PLC断电重启或者CPU从STOP切换为RUN时候执行,往后不再运行,也就是只运行一次。我们新建一个DB1块,添加两个,设置初始值,如下图所示:
图7 添加DB块变量
然后新建一个Startup事件OB块,写如下程序(SCL语言):
图8 Startup事件OB块程序
我们可以看到该类型OB块编号为100,如果再建一个该类型OB块,编号必须>=123。然后我们下载程序,这里顺便提一下下载选项,如下图所示:
图9 下载选项
如果是初次下载,选择“硬件和软件(仅更改)”。如果不是初次,可以选择你修改的部分,这样会提高下载速度。
图10 程序运行结果
循环中断事件OB块(Cyclic interrupt):常常用于需要定时执行的任务,比如我们需要1秒钟采样50个模拟值,我们可以把循环时间设置为20毫秒。可能会有人问,为什么不采用普通定时器每隔20毫秒采样一次呢?因为普通定时器会受到CPU扫描周期的影响。在PID程序中,我们需要采用循环中断事件来调整计算PID输出。
图11 添加循环中断事件OB块
在实验程序里,通过INC指令把DB1块里面的变量,每隔1秒加1,运行效果如下:
图12 循环中断事件OB
我们会看到在OB30这个程序块里面,"Data".Var2的值会每隔1秒变化,如果把INC指令放在Main[OB1]里面会是什么情况呢?
诊断错误事件OB块(Diagnostic error interrupt):当PLC发生故障时,会触发该事件;解除故障时,也会触发该事件,在该模块里面,我们可以读到故障信息。
图13 添加诊断错误事件OB块
在实验程序里,我们需要捕捉模拟量输入的溢出错误,所以需要对模拟量输入进行如下配置:
图14 添加溢出诊断功能
在配置硬件组态时,TIA PORTAL 将为每个硬件对象(如模块、接口或模块端口,甚至是智能设备的传输区)自动分配硬件标识符,相当于我们的身份证号码,独一无二。
诊断程序
在诊断程序中,我们可以获取错误IO状态,硬件标识符和通道,并添加了STP指令。当错误发生时候,使PLC处于STOP状态,若不添加STP指令,PLC仍以RUN状态运行。
诊断运行结果
通过读取IO_State,LADDR和Channel三个变量,IO状态以二进制格式显示,第4位为1,所以会出现错误。具体每个变量含义请看下图:
诊断错误中断 OB 的启动信息。
此次分享的内容就是上面这些!
以上,欢迎动动手分享及收藏!
相关问答
西门子1200plc编程思路框架?
1.西门子1200PLC编程思路框架是需要有一定的时间和经验积累的。2.首先需要明确PLC编程的目的和需求,然后根据具体的控制任务,设计出相应的程序框架。在编程...
1200plc的编程方法有哪几个?
这个问题,不好回答。我只能说一下思路。控制都容易,温度传感器变送出4---20mA信号,给PLC模拟量模块,然后模拟量输出模块输出4---20mA信号给你要控制的设备...
1200plc配置清单?
以下是S7-1200PLC的配置清单:电源模块:提供直流电压,将其转换为PLC所需的电压。CPU模块:处理和执行程序。信号模块:用于输入和输出模拟和数字信号。功...
plc1200什么意思?
PLC1200是指一种可编程逻辑控制器,通常用于自动化控制系统中。其中PLC代表可编程逻辑控制器的缩写,而1200则代表其型号。PLC1200是指一种可编程逻辑控制器,通...
S7-1200PLC使用什么编程软件?
看书一般现在教学使用的都是西门子系列产品的s7-200或者s7-300的plc根据教材弄清原理然后下载plc仿真编程软件进行简单的编程编写如果想要精通需要大量...
plcs71200控制方案?
1.plcs71200控制方案可以实现各种自动控制系统中的控制逻辑,包括信号采集、逻辑控制、运动控制等。2.对于plcs71200控制方案,其可以应用于物流、工厂、通讯...
两个1200plc用profinet怎么编程?
编程步骤如下:首先,添加PROFINETIO设备到PLC中。然后使用PLC编程软件将PLC与PROFINETIO设备连接。接下来,使用PROFINETIO配置工具将所需的输入/输出映射到...
1200plc设置指令?
众所周知,S7-1200不支持Graph语言,但这种语言又很适合顺序逻辑控制,按照工艺的步序,一步步编程即可,为了解决S7-1200在Graph方面的弊端,我们可以通过CASEO...
S71200PLC目前有哪5种不同型号的CPU模块?
S7-1200系列PLC目前有5种不同型号的CPU模块,分别是CPU1211C、CPU1212C、CPU1214C、CPU1215C和CPU1217C。这些型号的CPU模块在用户存储器、本体集成IO、...
力控与S7-1200以太网通信,力控里边需要怎么设置和PLC对应的变量呢?
S7-1200的驱动力控里面有现成的!而且1200PLC自带网口也不需要加什么设备,用OPC完全没有必要,你可以从力控的IO设备组态里面---PLC项中找到西门子---在找到1200...