现在我们来写一段小程序。该程序用于控制交叉路口的两盏交通灯。这两盏交通灯将交替出现红,绿阶 段。为了避免事故,我们将插入黄和黄/红转换阶段。红色和绿色阶段要比黄色和黄/红转换阶段持续的时间 长。
这个例子将告诉你怎样用 IEC1131-3 语言编写时间控制的程序,以及怎样用 TWinCAT PLC 编辑不同的语言。
首先,起动 TWinCAT PLC 并选择 'File''New' 选项.
建立 POUs
通过执行'Project' 'Add Object' 命令来建立一个 POU。 TWinCAT PLC 自动地把 这个 POU 定名为 MAIN,你不能改变这个名称,也不能改变这个 POU(PRG〕的类型,
因为每个项目需要一个名称为 MAIN 的程序。
我们选择顺序功能流程图〔SFC〕来编写这个 POU。
现在我们建立另外两个目标。用功能块图(FBD〕语言编写的块 PHASES 和用指令表 (IL)编写的功能块 POU WAIT。.
功能块 PHASES 的用途 ?
在 PHASES 中,交通灯的每个阶段将变换为正确的颜色。这就是说,在红色阶段和黄 /红阶段中,红灯一直亮着,在绿色阶段中,绿灯一直亮着,等等。
功能块 WAIT 的用途?
WAIT 功能块是一个简单的记时器。它有一个输入,用微秒为单位记忆某一阶段持续 的时间,当时间到时,记时器变为 TRUE。
PLC_PRG 的用途?
PLC_PRG 用适当的参数调用上述的两个 POUs,以便使交通杰在准确的时间点亮,并 满足所要求的时间间隔。
"PHASES” 说明语句
现在让我们写 PHASE。在说明语句部分,你必须说明一个输入变量 STATE,其类型为 INT〔在关键词 VAR-INPUT 和 END-VAR 之间〕。STATE 将有 5 个可能的状态,也就 是每一个阶段有一个状态〔绿,黄,黄/红,红和断开〕。
相应地,交通灯有四个输出变量,名称为 RED,YELLOW,GREEN 和断开。请你按照图 3.1 中所看到的那样来说 明这四个变量。
PHASES 的说明语句部分如图所示:
图 3.1:
功能块 PHASES 的说明语句部分
"PHASES” 文本
现在我们根据输入变量的状态来确定输出变量.为此,你用鼠标器在第一个网络的网 络号上击一下〔左边的灰色区域,包括号码 0001〕。现在你已选择了第一个网络。
选择命令'Insert''Operator' 在网络中,将插入一个方块,它的运算符为 AND,有 二个输入.
用你的鼠标器选择 AND,将其文本改为 EQ。现在把上面的 TRUE 改为 STATE,下面的 TRUE 改为 1。这样你就建好了下面的网络:
在 方 块 右 边 的 任 一 位 置 击 一 下 。 现 在 就 选 择 了 运 算 的 输 出 。 选 择 'Insert' 'Assign'.命令,把‘ result’文本改为 GREEN。现在你就编好了下面的网络:
STATE 与 1 进行比较,其结果。赋值 GREEN:如果 STATE 值为 1,则网络将使 GREEN 接通.
我们需要别处三个网络,用于其它的交通灯颜色和断开状态。使用
'Insert''Network (after)'命令建立网络。你应按图 3.2 所示的方法组态这些网 络。现在一个完整的 POU 如下图所示:
图 3.2:功能块 PHASES 的文本
为了把一个运算器插到另一个运算器的左边〔在网络 2 和 3 中是必要的〕,你必须 在某个位置上击一下,使新的运算器输出与后面运算器的方块相连接。现在你可以 执行 'Insert''Operator' ,命令接下来的工作就是像 个网络那样进行编辑..
这样就完成了第一个 POU。根据输入值 STATE,PHASES 控制交通 要求的颜色。
"WAIT" 说明语句
现在让我们开始对 WAIT 进行编码.这个 POU 是一个记时器,用于控制交通灯阶段持 续的时间。这个 POU 有一个输入变量 TIME1,类型为 TIME,并产生一个布尔变量,
名称为 OK。如果记时器记到了所期望的时间,则这个布 尔变量值为 TRUE。
这个变量的初始值是 FALSE,它的设置方法是在说明语句后面〔分号前面〕插入":=
FALSE".
连接标准库
为了对记时器进行编程,你必须使用标准库中的一个 POU。执行'Window''Library Manager'命令,打开库管理器。你将看到与你的项目连接的所有库。标准库也被连 接。
根据我们的用途,我们需要 POU TP,一个脉冲记时器,这个 POU 有两个输入(IN, PT) 和两个输出(Q, ET). TP 有如下功能:
只要 IN 是 TRUE,则 ET 为 0,Q 为 FALSE,ET 设有从 TRUE 到 FALSE 所持续的时间值,
单位为微秒。当 ET 达到 PT 值时,则 ET 保持它的值不变。只要 ET 比 PT 小,则 Q 值 就为 TRUE。当 ET 达到 PT 值以后,Q 值再次变为 FALSE。
注意:在附录 B 节中,你可以找到标准库中所有元素的简要描述。
为了在 POUWAIT 中使用 TP,我们必须对 TP 的局部变量进行说明。因此,我们要说明 一个 TP 型局部变量 TEL〔在关键词 VAR 与 END-VAR 之间〕该变量代表持续的时间.
WAIT 的说明语句部分如下图所示:
图 3.3.: 功能块 WAIT 的说明语句部分
为了实现所期望的记时器,POU 的文体必须按下面的方法编程:
"WAIT" 的文体
图 3.4.: 功能块 WAIT 文体
首先装入 Q 值。如果 Q 为 TRUE〔记时器正在运行〕,则我们跳转到标号 Lable 和 cal TEL 语句,检查时间是否已到。
否则,我们复位记时器,并且用所期望的时间(time1)来启动记时器.
最后,Q 的负值存在 OK 中。因此,time1 达到记时时间以后,OK 在一个周期中其值 为 TRUE。
现在记时器已编写完。主程序 PLC-PRG 将把前面的两个功能块 WAIT 和 PHASES 连在一起.
"MAIN" 程序的第一步开发
首先我们要说明所需要的变量表。这些变量包括功能块 PHASES 的二个状态 (LIGHT1, LIGHT2),以及功能块 WAIT 状态 (DELAY)我们得到下面的说明语句:
图 3.5.: 程序 PLC_PRG 的第一层,说明语句
怎样用 SFC 语言建立一个图 形
用 SFC 编写的一个 POU 的初始化程序,由下面几部分组成:一个“Init”步,接在其 后的转换“trans0”以及回到 Init 的一个跳转〔图 3.5〕。我们打算稍微扩展这个 结构。
首先我们确定图形的结构。然后我们可以对不同的动作和转换进行编码。
对交通灯的每一阶段都需要一个步。你可以通过选择 TransO 来插入一个步,并执行 'Insert' 'Step-Transition (after)'命令。连续三次重复以上的过程。
直接在一个转换或一个步的名称上击一下,这样就选择了这个名称,并可以改变名 称。用"TRUE" 代替 Trans0,用“ DELAY.OK”代替其它的转换。
意义是:如果"DELAY.OK"的值〔功能块状态 DELAY 的输出变量〕是 TRUE,这就是 说,当 time1 达到记时时间时,控制总是通过第一个转换和其它的转换。
这些步〔从上到下〕的名称 是:Switch1,Green2,Switch2,Green1.Init 的名称不 变。“Switch”总是一个黄色阶段。在激活 Green1 期间,LIGHT1 将是绿色。在激活 Green2 期间,LIGHT2 将是绿色。
最后,把跳转目标 Init 改为 Switch1.如图所示:
图 3.6.: 程序 MAIN 的语体,第一次开发
现在我们必须填写步骤的动作。如果你双击一个步,那么你得到一个打开新动作的 对话框。在我们的例子中,总是选择 IL(指令表)编写程序。
动作和传送条件
Init 步的动作是使变量初始化。LIGHT1 的变量 STATE 被赋值为 1(绿色〕。LIGHT2 的变量 STATE 被赋值为 3〔红色〕。
图 3.7.Action Init
在 Switch1 步, LIGHT1 的变量 STATE 变为 2〔黄色〕, LIGHT2 的变量 STATE 变 为 4 (黄色和红色).延时时间设置为 2 秒。
图 3.8. Action Switch1
在 Green2, LIGHT1 是红色(STATUS:=3), LIGHT2 是绿色(STATUS:=1), 延时时间设置为 5000 毫秒。
图 3.9. Action Green2
在 Switch2 步,LIGHT1 的变量 STATE 变为 4〔黄色和红色〕, LIGHT2 的变量 STATE 变为 2〔黄色〕,延时时间为 2000 毫秒
图 3.10. Action Switch2
在 Green1 步,LIGHT1 是绿色(STATUS:=1),LIGHT2 是红色(STATUS:=3), 延时时间设 置 为 5000 毫秒.
´ 图 3.11. Action Green1
现在,已经编写完程序的第一层。你可以编译程序,并用模拟方式测试程序.
MAIN 程序的第二步开发
现在所要考虑的问题是,在经过若干周期以后,即在夜里,你想要关断交通灯。为 此,在程序中我们插入一个记数器,该记数器向上记忆交通灯的运行周期数,并且 当记数器达到一定的数值时,交通灯断电。
首先,我们需要一个变量类型为 INT 的新变量 COUNTER。在程序 PLC-PRG 的说明语 句中说明这处变量,并在动作 Init 中,使它的初始值为 0。
LD 0 ST COUNTER
现在选择 Switch1 后面的转换,并在这个转换后面插入一个步/转换。
选择新的转换,按<SHIFT 键并选择跳转前的最后一个置换。主一个选 择性支路,(用命令'Insert''AlternativeBranch(left)'在左侧支路转换的 后面,插入一个步和一个转换。
在新的转换后面,插入一个跳转 Switch1.给新增加的部分定名如下:
在新增的二个步中,上面的一个定名为"Counting".另一个定名为"Off".
新的转换(从上到下,从左向右)分别被称为“FINISH”, "TRUE" and "DELAY.OK".
现在,修改后的结构图如下所示:
图 3.12. 交通灯 MAIN 程序
如同你所看到的,另外两个新增加的动作和一个传送条件已经编写完。.
在 Counting 步中,记数器每次增加 1.
图 3.13. Action Counting
在传送 FINISH 中,检查记数器是否比某一数值 在,比如说与数值 7 比较:
图 3.14. Transition FINISH
在步 OFF 中,两盏灯的 STATE 值设置为 5(OFF),COUNTER 值设置为 0, 延时时间设定 为 10 秒 (10,000 微秒):
图 3.15. Action Off 结果
在交通灯运行了七个周期以后,天黑下来。在黑暗持续了 10 秒钟以后,交通灯再次 被点亮,等等。
交通灯的仿真
现在用仿真方式测试编好的程序。通过选择菜单项‘Online’ ‘Simulation mode’
来选择仿真方式。
用'Online''Start'命令执行用户程序。打开 PLC-PRG 程序,观看激活步〔蓝色〕
的变化。打开步骤和传送,监视各个变量。