plc结构化编程.docx
- 文档编号:25107187
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:86
- 大小:100.73KB
plc结构化编程.docx
《plc结构化编程.docx》由会员分享,可在线阅读,更多相关《plc结构化编程.docx(86页珍藏版)》请在冰豆网上搜索。
plc结构化编程
此手册供开放式架构数控系统PA8000的PLC编程人员参考使用,编程人员在进行
PLC编程之前请仔细阅读本手册。
手册中将介绍如何利用系统中自带的PLC编程工具进行编程,同时介绍编程指令及格式等,手册中的编程格式为ST,其它的编程格式不详细介绍。
最后将以一铣床的PLC程序为例加深对程序的理解
为了使手册更加通俗易懂,手册中并没有介绍所有的与PLC相关的内容,用户如有需要可向机床制造商索取专门的介绍资料。
希望调试人员能通过对本手册的阅读更快地熟练PLC编程。
PLC-1131-S3为PLC编程提供了一个完善的环境,为PLC程序员处理各种程序
提供了一个简单而又功能强大的途径,它的编程和调试基于完善的环境和高级编程语言(类似与VisualC++)。
2.1PLC-1131-3DS功能简介
工程文件的结构:
工程文件的后缀名为pro,在新工程中建立的第一个程序结构单元(ProgramOrganizationUnit)将被自动命名为PLC_PRG,这个程序结构单元就类似于C
语言中的主程序。
在PLC_PRG中可以调用各种函数及功能块,而函数和功能块都属于程序结构单元。
PLC-1131-3DS能够区分在同一工程中的不同对象:
程序结构单元(POU)
数据类型(datatypes)
资源(resources)
工程的设置:
1)首先应该设置PLC的输入输出以保证工程中使用的地址的准确性。
2)接着建立解决问题的程序结构单元
3)选择适当的语言编写程序
4)写好程序之后,对程序进行编译去除程序中的所有错误。
工程的测试:
当工程之中的所有错误被去除之后激活仿真模式,就是与仿真PLC连接,与此同时将工程下载到PLC中,这样PLC-1131-3DS就处于在线方式了。
现在能以适当的顺序测试工程了,手动改变输入变量的值,观察输出是否正确。
用PLC-1131-3DS调试程序
当程序发生错误时,你可以设置断点。
当处理发生中断时,你就可以及时的在断点处检查所有工程变量的值。
工作在单步方式(singlestep)下,可以检验程序的逻辑错误。
你可以强制输入或输出变量的值。
使用流控制(flowcontrol)可以知道哪些程序段已经执行。
采样轨迹(SamplingTrace)显示变量在长时间的变化过程曲线。
整个工程可以以文本文件的形式导出。
总而言之PLC-1131-3DS对于PLC编程是一种完善和方便的工具。
2.2PLC-1131-3DS基本概念
此节包括一些重要的概念帮助你熟悉PLC-1131-3DS
2.2.1工程的组成
工程(Project)
一个工程包括了PLC程序中所有的对象,工程中包含了如下对象:
?
程序结构单元POUs
?
数据类型datatypes
?
资源resources
?
库函数libraries
程序结构单元(POU)
函数?
(Functions),功能块(functionblocks)和程序(programs)都是程序结构单元(POUs)。
每个POU包括了定义变量和程序主体两个部分。
程序主体用IEC编程语言编写,其中包括:
指令表(IL)
结构文本(ST)
SFC
FBD
梯形图(LD).
PLC-1131-3DS支持所有的标准IEC程序结构单元。
POUs之间能够相互调用,但是不允许递归调用.
函数(Function)
当定义函数的时候,不要忘记函数中必须含有返回值的数据类型,也就是说在函数名的后面必需紧跟冒号和一个数据类型。
下面是一个正确的函数定义:
FUNCTIONINDUAL:
INT
就是说函数名被用作输出变量。
函数定义的以关键字FUNCTION开始,以END_FUNCTION结尾。
ExampleinILofafunctionthattakesthreeinputvariablesandreturnstheproductofthefirsttwodividedbythethird:
Image0.1:
Function
{bmcbild2_1.bmp}
ExampleofafunctioninIL
函数没有任何的内部条件,就是说当用相同的输入变量时就会得出相同的结果(输出)。
Examplesforcallingupthefunctiondescribedabove
Examplesforcallingupthefunctiondescribedabove:
inST:
Result:
=Fct(7,2,4);
程序(Program)
程序是一种程序结构单元,在运行过程中返回一定数量的值。
程序在整个工程中都可以被识别。
{bmcbild2_8.bmp}
Exampleofaprogram
程序能够被调用,但不允许在函数中调用程序。
如果在程序结构单元中调用程序时程序的返回值有变化,这些变化将保持到下一次程序调用,即使程序程序是从其它程序结构单元调用的。
程序由起始关键字PROGRAM开始,END_PROGRAM结束。
.
Examplesofcallsoftheprogramdescribedabove
inST:
PRGExample;
Res:
=PRGexample.PAR;
IfthevariablePARfromtheprogramPRGexampleisinitializedbyamainprogramwith0,andthenoneaftertheotherprogramsarecalledwithabovenamedprogramcalls,thentheRESresultintheprogramswillhavethevalues1,2,and3.Ifoneexchangesthesequenceofthecalls,thenthevaluesofthegivenresultparametersalsochangeinacorrespondingfashion.
PLC_PRG
PLC_PRG是一个特殊的预先定义的程序结构单元,任何工程都必须含有这个特殊的程序。
每次循环的过程中调用一次PLC_PRG。
在新工程建立之后第一次执行"Project""ObjectAdd"命令时,程序结构单元对话框中的初始输入项就是名为PLC_PRG的程序类型。
注意:
不要删除或者重命名PLC_PRG
Resources
设置和组织工程所需的资源:
?
全局变量GlobalVariables
?
PLC设置PLCConfiguration
?
任务配置TaskConfiguration
?
采样轨迹SamplingTrace
?
观察和接收管理器WatchandReceiptManager
库函数(Libraries)
库函数"standard.lib"是一个标准的函数库,可供程序进行调用。
在此手册中编程语言以结构文本编程指令为例,其它的指令格式不作详细介绍。
结构文本编程指令(StructuredText)包括了一系列的编程语句,如条件语句
("IF..THEN..ELSE"),循环语句(WHILE..DO)等等。
下面就是一个结构文本指令格式的一段小程序
IFvalue<7THEN
WHILEvalue<8DO
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);
调用功能块或者函数的返回值(CallingafunctionblockanduseoftheFBoutput)
CMD_TMR(IN:
=%IX5,PT:
=300);
A:
=CMD_TMR.Q
返回(RETURN)
RETURN;
IF(条件)
D:
=B*B;
IFD<0.0THEN
C:
=A;
ELSIFD=0.0THEN
C:
=B;
ELSE
C:
=D;
END_IF;
CASE(分支)
CASEINT1OF
1:
BOOL1:
=TRUE;
2:
BOOL2:
=TRUE;
ELSE
BOOL1:
=FALSE;
BOOL2:
=FALSE;
END_CASE;
FOR(循环)
J:
=101;
FORI:
=1TO100BY2DO
IFARR[I]=70THEN
J:
=I;
EXIT;
END_IF;
END_FOR;
WHILE(循环)
J:
=1;
WHILEJ<=100ANDARR[J]<>70DO
J:
=J+2;
END_WHILE;
REPEAT(重复)
J:
=-1;
REPEAT
J:
=J+2;
UNTILJ=101ORARR[J]=70
END_REPEAT;
EXIT(退出)
EXIT;
Emptyinstruction(空指令)
;
用结构文本编程格式编写的程序与其它格式的编程语言相比出错概率低,编写的程序具有可读性高的特点。
赋值运算(Assignmentoperator)
此操作将右边表达式的结果赋给左边的操作数。
符号为:
=
例:
Var1:
=Var2*10;
调用功能块(Callingafunctionblock)
结构文本编程格式通过在功能块名后面的括号里分配参数值来调用功能块的功能
在下面的例子中通过分配参数IN和PT的值调用一定时器功能块,它的结果变量的值被赋给变量A。
CMD_TMR(IN:
=%IX5,PT:
=300);
A:
=CMD_TMR.Q
返回指令(RETURNinstruction)
返回指令用来结束函数调用,当条件满足时返回主程序
条件指令(IFinstruction)
使用IF指令检验是否满足条件,当条件满足时执行相应的的指令
语法:
IF<布尔表达式_1>THEN
{ELSIF<布尔表达式_2>THEN
.
.
ELSIF<布尔表达式_n>THEN
ELSE
END_IF;
{}里面的内容是可选的。
如果<布尔表达式1>的返回值为真(TRUE),那么只有
不执行。
否则检验<布尔表达式2>的返回值是否为真,这样连续判断<布尔表达式n>的返回值,直到返回值为真时执行对应的指令。
如果执行到最后表达式的返回值也没有为真,那么执行
例:
IFtemp<17
THENheating_on:
=TRUE;
ELSEheating_on:
=FALSE;
END_IF;
这段程序控制加热功能的开启和关闭,当温度高于17度时不加热,当温度低于17度时就加热。
分支指令(CASEinstruction)
使用分支指令可以将一些具有相同条件变量的指令结合在一个结构中
语法:
CASE<变量1>OF
<=1>:
<指令1>
<=2>:
<指令2>
...
<=n>:
<指令n>
ELSE
END_CASE;
CASE指令根据下面的模式处理程序:
?
?
?
?
?
如果?
变量?
?
的值为?
?
i?
,那么执行<指令i>中的指
?
?
令。
?
?
如果没有相应的?
变量?
?
的值,那么执行?
ELSE指
?
?
?
?
?
令?
?
?
?
?
如果需要几个不同的变量值执行相同的指令,那么可以将几个变量值写在一起用逗号隔开,后面接需要执行的指令。
例:
CASEINT1OF
1,5:
BOOL1:
=TRUE;
BOOL3:
=FALSE;
2:
BOOL2:
=FALSE;
BOOL3:
=TRUE;
ELSE
BOOL1:
=NOTBOOL1;
BOOL2:
=BOOL1ORBOOL2;
END_CASE;
循环指令(FOR)
<步长Stepsize>}DO
<指令Instructions>使用FOR循环指令可以重复程序处理的过程。
语法:
整形变量INT_Var:
INT;
FOR<整形变量INT_Var>:
=<初始值INIT_VALUE>TO<终止值END_VALUE>{BY
END_FOR;
{}中的内容可选的.
只要
在执行指令之前就检验这个条件,如果条件得不到满足就不执行
当指令被执行一次之后<整形变量INT_Var>就增加
当得到
停止循环。
例:
FORCounter:
=1TO5BY1DO
Var1:
=Var1*2;
END_FOR;
Res:
=Var1;
我们假设Var1的初始值为1,那么循环结束时变量Var1的值为32。
循环指令(WHILEloop)
WHILE循环指令的用法与FOR循环指令相似,它们的不同之处在于WHILE循环的判断条件有些不同,它可以是任何布尔表达式。
也就是说只要满足你给定的条件时,就执行循环指令。
语法:
WHILE<布尔表达式>
<指令>
END_WHILE;
只要<布尔表达式>的返回值为真TRUE,也就是条件满足的时候,<指令>将重复执行,直到<布尔表达式>的返回值为假FALSE。
如果在第一次判断条件时就不满足,那么没有执行一次指令循环就结束了。
当<布尔表达式>的返回值始终为真时,指令就无限的循环执行下去,进入死循环状态。
这在编程时要尽量避免。
例:
WHILEcounter<>0DO
Var1:
=Var1*2;
Counter:
=Counter-1;
END_WHILE
WHILE循环和REPEAT循环在某种意义上来说比FOR循环更实用,因为在某种情况下我们不能确定循环的次数,在这种情况下只能用WHILE循环指令或者REPEAT循环指令。
但是FOR循环指令的循环次数是一定的,所以用FOR循环指令编程可以避免死循环的出现。
循环指令(REPEATloop)
REPEAT循环指令不同于WHILE循环指令的地方在于指令执行条件的判定顺序,REPEAT循环指令在判断条件之前就执行指令,也就是说REPEAT循环指令至少可以执行一次而不考虑判定条件。
WHILE循环指令就不同,可能指令一次也不执行就终止循环。
语法:
REPEAT
<指令>
UNTIL<布尔表达式>
END_REPEAT;
当<布尔表达式>的返回值为真时,就是说判定条件满足的时候就终止循环。
如果<布尔表达式>在第一次检验的时候满足条件,那么整个循环只执行一
次。
如果条件始终得不到满足,进入死循环状态,编程时需尽量避免这种情况的发生。
例:
REPEAT
Var1:
=Var1*2;
Counter:
=Counter-1;
UNTIL
Counter=0
END_REPEAT;
退出指令(EXITinstruction)
如果EXIT指令出现在FOR、WHILE、REPET循环指令里面的时候,循环将不考虑中断条件是否满足就无条件中断正在进行中的循环。
4.1主窗口
打开PLC-1131-3DS的主窗口之后,你可以看到下列元件(从上到下)
?
菜单栏
?
工具栏(可选)?
?
?
?
?
对象管理器?
有程序结构单元(POUs)选项卡、数据类型(Datatypes)选项卡、资源(Resources)选项卡
?
对象管理和编程区域之间的分隔条
?
编程区域
?
?
?
?
消息窗口(可选)
?
状态栏(可选)
菜单栏(menulbar)
菜单栏位于主窗口的最上面,包括所有的菜单命令
工具栏(toolbar)
通过工具栏可以快速选择执行菜单栏中的一些常用的命令。
在激活不同的窗口中时菜单栏中的快捷按钮会有所不同,只需用鼠标单击菜单栏中的快捷按钮就相当于执行了菜单栏中的命令。
如果将鼠标放在工具栏的按钮上一段时间,会显示出该命令的名称。
工具栏是可选的,如果不需要显示工具栏的时候,你可以将"Project"菜单下"Options"目录中的Desktop选项中toolbar去除
为了方便说明,用"Project""Options"表示"Project"菜单下"Options"命令。
对象管理器(ObjectOrganizer)
对象管理器位于主窗口的左边。
在对象管理器的下面有4个选项卡,
POUs,
Datatypes和
Resources,用鼠标单击不同的选项卡就改变了相应的对象类型。
在说明书的后面将介绍如何建立、删除对象,怎么在对象管理器中管理各种对象。
屏幕分隔栏(Screendivider)
屏幕分隔栏是两个不重叠窗口的分界线,在PLC-1131-3DS中在对象管理器
窗口与编程区窗口之间有一个屏幕分隔栏。
编程区里面的定义变量窗口与程序主体窗口之间也有一屏幕分隔栏。
你可以按鼠标左键移动屏幕分隔栏。
编程区域(Workspace)
编程区域位于主窗口的右侧,所有的对象编辑和函数库管理操作都是在这个区域进行操作的。
PLC-131-3DS的程序编辑将在说明书的后面作详细介绍。
在"Window"菜单下,你可以找到所有的窗口管理命令。
消息窗口(Messagewindow)
消息窗口在主窗口编程区的下面,它包含了编译、检验和比较的信息。
当程序编译出错时,鼠标双击消息窗口中的一条错误信息,程序将跳转到对应的程序行自动查找错误。
你也可以用"Edit""Nexterror"和"Edit""Previouserror"命令实现在相邻两个错误之间迅速跳转。
消息窗口的显示是可选的("Window""Messages"命令).
状态栏(Statusbar)
在PLC-1131-3DS中,状态栏在主窗口的底部。
它显示当前工程的信息和菜单
命令的注释。
状态栏的的右边以黑字体显示时,表示工程处在该状态下,灰字体则表示该状态未被激活。
例如工程工作在在线方式下,Online变成黑颜色,以离线方式运行时Online就变成灰颜色。
在线模式下,你可以知道现在处于模拟方式(SIM),程序正被处理(RUNS),设置断点(BP),强制变量(FORCE)。
状态栏的显示是可选的,通过"Project""Options"目录下的Desktop选项决定是否显示。
4.2工程管理
工程管理的命令可以在"File"和"Project"菜单下找到。
"File""New"
工具栏中的符号:
建立一个空的工程,文件名为"Untitled",当保存文件时必须改变工程名。
"File""Open"
工具栏中的符号:
打开一个已经存在的工程。
选择菜单或工具栏命令后弹出一对话框,从中选择已经存在的工程文件,文件后缀名为".pro",对话框如下图所示:
{bmcbild4_16.bmp}
Dialogboxforopeningafile
"File""Close"
关闭当前打开的工程。
如果工程被修改过,PLC-1131-3DS将询问是否保存。
"File""Save"
在工具栏中的符号:
Shortcut:
保存工程中所做的任何修改。
"File""Saveas"
用此命令可将当前的工程保存为另外一个文件,而不改变原始文件。
当运行此命令之后,在弹出保存对话框中选择已经存在的文件名和文件格式或者重新输入一个文件名。
对话框如图所示:
{bmcbild4_17.bmp}
DialogboxforSaveas
"File""Print"
快捷方式:
打印当前活动窗口。 运行此命令之后,弹出打印对话框选择打印设置,然后点击OK按钮。 打印对话框如下图所示L: {bmcbild4_18.bmp} Printdialogbox 在打印对话框中可以选择打印范围,numberofthecopies(副本数量)等。 单 击Properties(属性)按钮,打开设置打印机的对话框。 你也可以用"File""PrinterSetup"命令决定打印输出的版面格式 当需要打印整个工程的时候,使用"Project""Document"命令。 "File""Printersetup" 运行此命令时弹出如图所示的对话框,可以设置打印页的输出格式。 {bmcbild4_19.bmp} PageLayoutDialogBox 你可以将页面设置保存为后缀名为".dfr"的文件,初始默认文件名为DEFAULT.DFR。 如果希望改变现有的页面设置,你可以单击Browse(浏览)按钮在弹出的对话框中选择希望的页面设置。 "File""Exit" 快捷方式: 退出PLC-1131-3DS系统。 "Project""Checkall" 运行此命令将检查程序的静态错误。 若在程序中发现错误,将在信息窗口中给出出错信息以及出错的行号。 "Project""Build" 运用此命令将所有作过修改的程序结构单元重建。 这样当载入PLC程序的时候,就只需将作过修改的程序传送到PLC中,而其余的程序在PLC中保持不变。 注意: "Build"命令只有在支持在线修改的PLC-1131-3DS中才起作用,否则"Build"命令的功能与"Rebuildall"命令的功能完全相同,不起实际作用"Project""Rebuildall" 此命令用来重新组织所有的程序结构单元。 与此同时信息窗口里显示组织过程的进度和发现程序中的错误。 Alistofa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- plc 结构 编程