PLC中文手册与结构化文本编程

PLC中文手册与结构化文本编程
PLC中文手册与结构化文本编程

此手册供开放式架构数控系统PA 8000的PLC编程人员参考使用,编程人员在进行PLC编程之前请仔细阅读本手册。

手册中将介绍如何利用系统中自带的PLC编程工具进行编程,同时介绍编程指令及格式等,手册中的编程格式为ST,其它的编程格式不详细介绍。最后将以一铣床的PLC程序为例加深对程序的理解

为了使手册更加通俗易懂,手册中并没有介绍所有的与PLC相关的内容,用户如有需要可向机床制造商索取专门的介绍资料。希望调试人员能通过对本手册的阅读更快地熟练PLC编程。

PLC-1131-S3为PLC编程提供了一个完善的环境,为PLC程序员处理各种程序提供了一个简单而又功能强大的途径,它的编程和调试基于完善的环境和高级编程语言(类似与Visual C++)。

2.1PLC-1131-3 DS功能简介

工程文件的结构:

工程文件的后缀名为pro,在新工程中建立的第一个程序结构单元(Program Organization Unit)将被自动命名为PLC_PRG,这个程序结构单元就类似于C 语言中的主程序。在PLC_PRG中可以调用各种函数及功能块,而函数和功能块都属于程序结构单元。

PLC-1131-3 DS能够区分在同一工程中的不同对象:

程序结构单元(POU)

数据类型(data types)

资源(resources)

工程的设置:

1) 首先应该设置PLC的输入输出以保证工程中使用的地址的准确性。

2)接着建立解决问题的程序结构单元

3) 选择适当的语言编写程序

4) 写好程序之后,对程序进行编译去除程序中的所有错误。

工程的测试:

当工程之中的所有错误被去除之后激活仿真模式,就是与仿真PLC连接,与

此同时将工程下载到PLC中,这样PLC-1131-3 DS就处于在线方式了。

现在能以适当的顺序测试工程了,手动改变输入变量的值,观察输出是否正确。

用PLC-1131-3DS调试程序

当程序发生错误时,你可以设置断点。当处理发生中断时,你就可以及时的在

断点处检查所有工程变量的值。工作在单步方式(singlestep)下,可以检验程序的

逻辑错误。

你可以强制输入或输出变量的值。使用流控制(flowcontrol)可以知道哪些程序段

已经执行。采样轨迹(SamplingTrace)显示变量在长时间的变化过程曲线。

整个工程可以以文本文件的形式导出。

总而言之 PLC-1131-3 DS对于PLC编程是一种完善和方便的工具。

2.2 PLC-1131-3 DS基本概念

此节包括一些重要的概念帮助你熟悉PLC-1131-3 DS

2.2.1工程的组成

工程 (Project)

一个工程包括了PLC程序中所有的对象,工程中包含了如下对象:

?程序结构单元 POUs

?数据类型 data types

?资源 resources

?库函数 libraries

程序结构单元(POU)

函数 (Functions), 功能块(function blocks)和程序(programs)都是程序结构单元(POUs)。每个POU包括了定义变量和程序主体两个部分。程序主体用IEC编程语言编写,其中包括:

指令表 (IL)

结构文本 (ST)

SFC

FBD

梯形图(LD).

PLC-1131-3 DS 支持所有的标准IEC程序结构单元。

POUs之间能够相互调用,但是不允许递归调用.

函数(Function)

当定义函数的时候,不要忘记函数中必须含有返回值的数据类型,也就是说在函数名的后面必需紧跟冒号和一个数据类型。

下面是一个正确的函数定义:

FUNCTION INDUAL :INT

就是说函数名被用作输出变量。函数定义的以关键字FUNCTION开始,以END_FUNCTION 结尾。Example in IL of a function that takes three input variables and returns the product of the first two divided by the third:

Image 0.1: Function

{bmc bild2_1.bmp} ξ Example of a function in IL

函数没有任何的内部条件,就是说当用相同的输入变量时就会得出相同的结果(输出)。

ξ Examples for calling up the function described above

Examples for calling up the function described above:

in ST:

Result := Fct(7, 2, 4);

程序(Program)

程序是一种程序结构单元,在运行过程中返回一定数量的值。程序在整个工程中都可以被识别。

{bmc bild2_8.bmp} ξExample of a program

程序能够被调用,但不允许在函数中调用程序。如果在程序结构单元中调用程序时程序的返回值有变化,这些变化将保持到下一次程序调用,即使程序程序是从其它程序结构单元调用的。

程序由起始关键字PROGRAM开始,END_PROGRAM结束。.

ξ Examples of calls of the program described above

in ST:

PRGExample;

Res := PRGexample.PAR;

If the variable PAR from the program PRGexample is initialized by a main program with 0, and then one after the other programs are called with above named program calls, then the RES result in the programs will have the values 1, 2, and 3. If one exchanges the sequence of the calls, then the values of the given result parameters also change in a corresponding fashion.

PLC_PRG

PLC_PRG 是一个特殊的预先定义的程序结构单元,任何工程都必须含有这个特殊的程序。每次循环的过程中调用一次PLC_PRG 。

在新工程建立之后第一次执行"Project" "Object Add" 命令时,程序结构单元对话框中的初始输入项就是名为PLC_PRG的程序类型。

注意:不要删除或者重命名PLC_PRG

Resources

设置和组织工程所需的资源:

?全局变量 Global Variables

?PLC设置 PLC Configuration

?任务配置 Task Configuration

?采样轨迹 Sampling Trace

?观察和接收管理器Watch and Receipt Manager

库函数(Libraries)

库函数"standard.lib"是一个标准的函数库,可供程序进行调用。

在此手册中编程语言以结构文本编程指令为例,其它的指令格式不作详细介绍。

结构文本编程指令(Structured Text)包括了一系列的编程语句,如条件语句

("IF..THEN..ELSE"),循环语句(WHILE..DO)等等。

下面就是一个结构文本指令格式的一段小程序

IF value < 7 THEN

WHILE value < 8 DO

value := value + 1;

END_WHILE;

END_IF;

3.1 表达式

表达式指操作数被赋值后返回一个确定值的结构。

表达式由运算符和操作数组成,操作数可以是常数、变量、调用函数或则其它

表达式。

3.2 表达式的计算

根据各种运算符优先级别依次运算得到最后的结果。

具有最高优先权的运算符最先计算,接着计算第二优先级别的运算符... 直到得出最后结果。具有相同优先级别的运算符按照从左到右的顺序计算。

下面给出结构文本的运算符:

运算符符号优先级别

括号(表达式) 最高

函数调用函数名 (参数)

求幂**

求反-

NOT

乘除求余*

/ MOD

加减+ -

比较<,>,<=,>=

等于不等于= <>

逻辑与AND

异或XOR

逻辑或OR 最低优先级

3.3 结构文本格式编程格式指令

指令类型例子

赋值 (Assignment) A:=B; CV := CV + 1; C:=SIN(X);

调用功能块或者函数的返回值(Calling a function block and use of the FB output) CMD_TMR(IN := %IX5, PT := 300); A:=CMD_TMR.Q

返回 (RETURN) RETURN;

IF (条件) D:=B*B;

IF D<0.0 THEN

C:=A;

ELSIF D=0.0 THEN

C:=B;

ELSE

C:=D;

END_IF;

CASE(分支) CASE INT1 OF

1: BOOL1 := TRUE;

2: BOOL2 := TRUE;

ELSE

BOOL1 := FALSE;

BOOL2 := FALSE;

END_CASE;

FOR(循环) J:=101;

FOR I:=1 TO 100 BY 2 DO

IF ARR[I] = 70 THEN

J:=I;

EXIT;

END_IF;

END_FOR;

WHILE(循环) J:=1;

WHILE J<= 100 AND ARR[J] <> 70

DO

J:=J+2;

END_WHILE;

REPEAT(重复) J:=-1;

REPEAT

J:=J+2;

UNTIL J= 101 OR ARR[J] = 70

END_REPEAT;

EXIT(退出) EXIT;

Empty instruction(空指令) ;

用结构文本编程格式编写的程序与其它格式的编程语言相比出错概率低,编写的程序具有可读性高的特点。

赋值运算(Assignment operator)

此操作将右边表达式的结果赋给左边的操作数。

符号为 :=

例:

Var1 := Var2 * 10;

调用功能块(Calling a function block)

结构文本编程格式通过在功能块名后面的括号里分配参数值来调用功能块的功能

在下面的例子中通过分配参数IN和PT的值调用一定时器功能块,它的结果变量的值被赋给变量A 。

CMD_TMR(IN := %IX5, PT := 300);

A:=CMD_TMR.Q

返回指令(RETURN instruction )

返回指令用来结束函数调用,当条件满足时返回主程序

条件指令(IF instruction)

使用IF指令检验是否满足条件,当条件满足时执行相应的的指令

语法:

IF <布尔表达式_1> THEN

{ELSIF <布尔表达式_2> THEN

.

.

ELSIF <布尔表达式_n> THEN

ELSE

}

END_IF;

{}里面的内容是可选的。

如果<布尔表达式1>的返回值为真 (TRUE),那么只有被执行,而其它的指令不执行。否则检验<布尔表达式2>的返回值是否为真,这样连续判断<布尔表达式n>的返回值,直到返回值为真时执行对应的指令。如果执行到最后表达式的返回值也没有为真,那么执行

例:

IF temp<17

THEN heating_on := TRUE;

ELSE heating_on := FALSE;

END_IF;

这段程序控制加热功能的开启和关闭,当温度高于17度时不加热,当温度低于17度时就加热。

分支指令(CASE instruction)

使用分支指令可以将一些具有相同条件变量的指令结合在一个结构中

语法:

CASE <变量1> OF

<=1>:<指令 1>

<=2>:<指令 2>

...

<=n>:<指令 n>

ELSE

END_CASE;

CASE指令根据下面的模式处理程序:

? 如果<变量1>的值为<=i>,那么执行<指令i>中的指

令。

? 如果没有相应的<变量1>的值,那么执行

令>

? 如果需要几个不同的变量值执行相同的指令,那么可以

将几个变量值写在一起用逗号隔开,后面接需要执行的

指令。

例:

CASE INT1 OF

1, 5: BOOL1 := TRUE;

BOOL3 := FALSE;

2: BOOL2 := FALSE;

BOOL3 := TRUE;

ELSE

BOOL1 := NOT BOOL1;

BOOL2 := BOOL1 OR BOOL2;

END_CASE;

循环指令(FOR)

<步长Step size>}DO

<指令Instructions>使用FOR循环指令可以重复程序处理的过程。

语法:

整形变量INT_Var :INT;

FOR <整形变量INT_Var>:= <初始值INIT_VALUE> TO <

终止值END_VALUE> {BY

END_FOR;

{}中的内容可选的.

只要中的计数值不大于就重复执行 中的指令。在执行指令之前就检验这个条件,如果条件得不到满足就不执行

中的指令。当指令被执行一次之后<整形变量INT_Var>就增加

中的相应值。当得到大于的条件时就

停止循环。

例:

FOR Counter:=1 TO 5 BY 1 DO

Var1:=Var1*2;

END_FOR;

Res:=Var1;

我们假设Var1的初始值为1,那么循环结束时变量 Var1的值为32。

循环指令( WHILE loop)

WHILE循环指令的用法与FOR循环指令相似,它们的不同之处在于WHILE 循环的判断条件有些不同,它可以是任何布尔表达式。也就是说只要满足你给定的条件时,就执行循环指令。

语法:

WHILE <布尔表达式>

<指令>

END_WHILE;

只要<布尔表达式>的返回值为真TRUE,也就是条件满足的时候,<指令>将重复执行,直到 <布尔表达式>的返回值为假FALSE。

如果在第一次判断条件时就不满足,那么没有执行一次指令循环就结束了。当<布尔表达式>的返回值始终为真时,指令就无限的循环执行下去,进入死循环状态。这在编程时要尽量避免。

例:

WHILE counter<>0 DO

Var1 := Var1*2;

Counter := Counter-1;

END_WHILE

WHILE循环和REPEAT循环在某种意义上来说比FOR循环更实用,因为在某种情况下我们不能确定循环的次数,在这种情况下只能用WHILE循环指令或者REPEAT循环指令。但是FOR循环指令的循环次数是一定的,所以用

FOR循环指令编程可以避免死循环的出现。

循环指令(REPEAT loop)

REPEAT循环指令不同于WHILE循环指令的地方在于指令执行条件的判定顺序,REPEAT循环指令在判断条件之前就执行指令,也就是说REPEAT循环指令至少可以执行一次而不考虑判定条件。WHILE循环指令就不同,可能指令一次也不执行就终止循环。

语法:

REPEAT

<指令>

UNTIL <布尔表达式>

END_REPEAT;

当<布尔表达式>的返回值为真时,就是说判定条件满足的时候就终止循环。如果<布尔表达式>在第一次检验的时候满足条件,那么整个循环只执行一次。如果条件始终得不到满足,进入死循环状态,编程时需尽量避免这种情况的发生。

例:

REPEAT

Var1 := Var1*2;

Counter := Counter-1;

UNTIL

Counter=0

END_REPEAT;

退出指令(EXIT instruction)

如果EXIT指令出现在FOR、WHILE、REPET循环指令里面的时候,循环将不考虑中断条件是否满足就无条件中断正在进行中的循环。

4.1 主窗口

打开 PLC-1131-3 DS的主窗口之后,你可以看到下列元件(从上到下)

? 菜单栏

? 工具栏(可选)

? 对象管理器;有程序结构单元(POUs)选项卡、数据类型

(Data types) 选项卡、资源(Resources) 选项卡

? 对象管理和编程区域之间的分隔条

? 编程区域

? 消息窗口(可选)

? 状态栏(可选)

菜单栏(menulbar)

菜单栏位于主窗口的最上面,包括所有的菜单命令

工具栏(toolbar)

通过工具栏可以快速选择执行菜单栏中的一些常用的命令。在激活不同的窗口中时菜单栏中的快捷按钮会有所不同,只需用鼠标单击菜单栏中的快捷按钮就相当于执行了菜单栏中的命令。如果将鼠标放在工具栏的按钮上一段时间,会显示出该命令的名称。工具栏是可选的,如果不需要显示工具栏的时候,你可以将"Project"菜单下"Options"目录中的Desktop选项中toolbar去除

为了方便说明,用"Project""Options"表示"Project"菜单下"Options"命令。对象管理器(Object Organizer)

对象管理器位于主窗口的左边。在对象管理器的下面有4个选项卡,POUs,Datatypes和Resources,用鼠标单击不同的选项卡就改变了相应的对象类型。在说明书的后面将介绍如何建立、删除对象,怎么在对象管理器中管理各种对象。

屏幕分隔栏(Screen divider)

屏幕分隔栏是两个不重叠窗口的分界线,在PLC-1131-3 DS中在对象管理器窗口与编程区窗口之间有一个屏幕分隔栏。编程区里面的定义变量窗口与程序主体窗口之间也有一屏幕分隔栏。你可以按鼠标左键移动屏幕分隔栏。

编程区域(Work space)

编程区域位于主窗口的右侧,所有的对象编辑和函数库管理操作都是在这个区域进行操作的。PLC-131-3 DS的程序编辑将在说明书的后面作详细介绍。在"Window"菜单下,你可以找到所有的窗口管理命令。

消息窗口(Message window)

消息窗口在主窗口编程区的下面,它包含了编译、检验和比较的信息。

当程序编译出错时,鼠标双击消息窗口中的一条错误信息,程序将跳转到对应的程序行自动查找错误。你也可以用"Edit" "Next error"和"Edit" "Previous error"命令实现在相邻两个错误之间迅速跳转。

消息窗口的显示是可选的("Window" "Messages"命令).

状态栏 (Status bar)

在PLC-1131-3DS中,状态栏在主窗口的底部。它显示当前工程的信息和菜单

命令的注释。状态栏的的右边以黑字体显示时,表示工程处在该状态下,灰字体则表示该状态未被激活。例如工程工作在在线方式下,Online变成黑颜色,以离线方式运行时Online就变成灰颜色。

在线模式下,你可以知道现在处于模拟方式(SIM),程序正被处理(RUNS),设置断点 (BP),强制变量(FORCE)。状态栏的显示是可选的,通过"Project" "Options"目录下的Desktop选项决定是否显示。

4.2 工程管理

工程管理的命令可以在"File"和"Project"菜单下找到。"File" "New"

工具栏中的符号:

建立一个空的工程,文件名为"Untitled",当保存文件时必须改变工程名。"File" "Open"

工具栏中的符号:

打开一个已经存在的工程。

选择菜单或工具栏命令后弹出一对话框,从中选择已经存在的工程文件,文件后缀名为".pro",对话框如下图所示:

{bmc bild4_16.bmp} ξDialog box for opening a file

"File" "Close"

关闭当前打开的工程。如果工程被修改过,PLC-1131-3 DS将询问是否保存。"File" "Save"

在工具栏中的符号: Shortcut:+

保存工程中所做的任何修改。

"File" "Save as"

用此命令可将当前的工程保存为另外一个文件,而不改变原始文件。

当运行此命令之后,在弹出保存对话框中选择已经存在的文件名和文件格式或者重新输入一个文件名。对话框如图所示:

{bmc bild4_17.bmp} ξDialog box for Save as

"File" "Print"

快捷方式:+

打印当前活动窗口。

运行此命令之后,弹出打印对话框选择打印设置,然后点击OK按钮。

打印对话框如下图所示L:

{bmc bild4_18.bmp} ξPrint dialog box

在打印对话框中可以选择打印范围, number of the copies(副本数量)等。单击Properties(属性)按钮,打开设置打印机的对话框。

你也可以用"File" "Printer Setup"命令决定打印输出的版面格式

当需要打印整个工程的时候,使用"Project" "Document"命令。"File" "Printer setup"

运行此命令时弹出如图所示的对话框,可以设置打印页的输出格式。{bmc bild4_19.bmp} ξPage Layout Dialog Box

你可以将页面设置保存为后缀名为".dfr"的文件,初始默认文件名为DEFAULT.DFR。如果希望改变现有的页面设置,你可以单击Browse(浏览)按钮在弹出的对话框中选择希望的页面设置。

"File" "Exit"

快捷方式: +

退出PLC-1131-3 DS系统。

"Project" "Check all"

运行此命令将检查程序的静态错误。

若在程序中发现错误,将在信息窗口中给出出错信息以及出错的行号。"Project" "Build"

运用此命令将所有作过修改的程序结构单元重建。这样当载入PLC程序的时候,就只需将作过修改的程序传送到PLC中,而其余的程序在PLC中保持不变。

注意:"Build"命令只有在支持在线修改的PLC-1131-3 DS中才起作用,否则"Build"命令的功能与"Rebuild all"命令的功能完全相同,不起实际作用"Project" "Rebuild all"

此命令用来重新组织所有的程序结构单元。与此同时信息窗口里显示组织过程的进度和发现程序中的错误。

A list of all error messages is to be found in the appendix.

{bmc bild4_21.bmp} ξMessage window of a project

运行"Online""Login"命令时,如果工程经过最后一次编译之后工程作过修改那么会自动执行"Rebuild all"命令。

"Project" "Document"

打印整个工程。完整的文件包括下列元素:

? The POUs(程序组织单元),

? the contents of the documentation(文件的内容),

? the data types(数据类型),

? the resources (资源)

{bmc bild4_22.bmp} ξDialog box for project documentation

"Project" "Export"

导出工程。在PLC-1131-3 DS中工程能被导入和导出,这样就允许与其它IEC编程系统进行相互转换。

"Project" "Import"

导入工程。

"Project" "Compare"

用此命令可以将已经打开的工程与其它工程作比较。例如你准备保存而又想

知道对当前的工程作了哪些修改,就可将打开的工程与上次保存的版本作比

较。

当执行此命令时弹出一对话框,从中选择需要与之相比较的工程后,单击

OK按钮。信息窗口中将显示两个工程的不同之处。

有5种显示信息如下所示:

?"Unchanged": 对象没有发生变化

?"Deleted": 对象已经不存在与当前的工程中

?"Implementation changed": 程序组织单元的指令部分

发生了变化

?"Interface changed": 对象的定义变量部分发生了变化

?"Interface and implementation changed": 指令和定义

变量部分都发生了变化

在信息上双击将选择对象中的第一个变化。

"Project" "Merge"

运用此命令能够将其它工程中的对象(程序组织单元,数据类型,资源)合并到当前的工程之中。执行此命令时,在弹出的对话框中选择一个工程文件,在接着出现的对话框中选择希望的对象。如果工程中已经存在同名的对象,那么新对象名后加上一短划线和一阿拉伯数字("_1", "_2" ...).。

"Project" "Project info"

在此菜单中可将有关工程的信息保存起来。当执行此命令时,弹出如下图所

示的对话框:

{bmc bild4_23.bmp} ξDialog box for entering project information

下列的工程信息能被显示:

? File name(文件名)

? Directory path(保存目录)

? Change date(最近一次改动的时间 )

这些信息不能被改变.

此外,你可以增加下列信息:

? A Title of the project(工程主题),

? the name of the Author(作者姓名),

? the Version number(版本号),

? a Description of the project(工程说明)

这些信息是可选的。当单击Statistics按钮时将得到关于工程的整个信息。

{bmc bild4_24.bmp} ξExample of project statistics

"Project" "Global Search"

在程序结构单元、数据类型或者全局变量的对象中查找文本格式。

当执行此命令时弹出一个对话框,选择希望查找的对象之后单击OK按钮,然后弹出查找对话框,如果在对象中找到了对应的文本,那么对象被载入适当的编辑器,同时显示它的位置。

"Project" "Global replace"

在程序结构单元、数据类型或者全局变量的对象中替换文本格式。

4.3建立和删除对象

此节介绍如何对对象进行处理。

相关主题