1第一讲TwinCATPLC概述TwinCATPLC是基于Beckhoff系列可编程现场总线控制器(PFC)的编程开发系统与可视化图形监控工具软件。TwinCAT符合IEC61131-3国际标准,提供标准的开发环境与基于该标准的5种程序设计语言:指令表布尔助记符程序设计语言(IL:InstructionList)梯形逻辑程序设计语言(LD:LadderDiagram)功能块程序设计语言(FBD:FunctionBlockDiagram)顺序功能流程图程序设计语言(SFC:SequentialFunctionChart)结构化文本程序设计语言(ST:StructuredText)2IEC61131-3标准是PLC编程语言的国际标准。TwinCATPLC编程语言符合该标准的规定。依照这个标准,一个程序包含以下几个部分:l数据结构lPOUsl全局变量常规的编程语言都包含标识符,地址,类型,注释及常数。3TwinCATPLC功能:第一讲TwinCATPLC概述丰富的程序功能指令TwinCATPLC提供了位逻辑运算、整数与浮点数运算、定时器与计数器功能、比较与赋值功能、移位与循环功能、数据类型转换功能、PID功能等大量丰富的程序功能指令。此外,用户还可以根据特定需要编写自己的功能块、子程序。离可在线程序仿真用户应用程序计算机中进行仿真执行,无须将其下载到PFC中,方便用户对程序的测试与修改并节省了开发时间。在线监视在程序离线仿真或联机运行的过程中,用户可以在TwinCATPLC中以文本或图形的方式监视程序运行状态及数据变化情况。诊断与调试在程序离线仿真或联机运行的过程中,用户可以通过在程序中设置断点、逐步执行程序、手动为变量赋值的方式对程序进行诊断与调试。4编程工具组件:第一讲TwinCATPLC概述用户手册通讯电缆软件光盘及授权系统要求:计算机:IntelPentium或更高操作系统:MS-Windows9X/NT4.0/2000/XP内存:16MBRAM(Windows9X)64MBRAM(WindowsNT4.0)至少10MB本机硬盘空间鼠标2倍速以上光驱RS232串行口通讯电缆RS2325POU包括函数(Function)、功能块(FunctionBlock)、程序(Program)三种类型。每一个POU包含两部分:变量声明部分与程序指令部分。程序指令部分由五种语言(IL、LD、SFC、FBD、ST)之一编写。IEC标准功能块包含在“standard.lib”函数库文件中,每一个项目均默认加载standard.lib。某一POU可在另一POU中被调用,程序中不允许递归调用(但是可以简接的完成递归)。变量声明部分程序指令部分TwinCATPLC以项目(Project)的方式管理用户的应用程序,所有的项目数据存在有一个项目名称的文件中,一个项目包含如下组件:POU、数据类型、程序资源、函数库与可视化元素。一个新的项目的第一个POU,系统会自动的给定名称MAIN,这是程序的起点(相当于C程序中的主函数)。从这里开始,就可以调用其他的POU。TwinCATPLC中的POU(programorganizeunit程序组织单元)61、函数(Function)TwinCATPLC中的POUFunction作为一类POU,包含一部分程序,这部分程序可以在主程序中被多次调用,Function在被调用时返回一个数据。Function在基于脚本的程序设计语言(如ST)中可以作为表达式中的一个操作数;在基于图形的程序设计语言(如FBD)中以图形的方式调用。在声明一个Function后,需要指定该Function所返回的数值的数据类型。Function的名字为该Function的输出变量结果。Function不具有内部条件,当用相同的参数多次调用某一Function时,该Function总是返回相同的数据。变量声明部分:FUNCTIONFct:INTVAR_INPUTPAR1:INT;PAR2:INT;PAR3:INT;END_VAR程序指令部分:LDPAR1MULPAR2DIVPAR3STFctINT:function返回的数据类型Fct:Function名声明输入变量Fct=(PAR1*PAR2/PAR3)7函数的调用第二讲TwinCATPLC中的POU在IL中调用:LD7FCT2,4STResult在FBD中调用:FctPAR3PAR2PAR1724Result在ST中调用:Result:=Fct(7,2,4);82、功能块(FunctionBlock)第二讲TwinCATPLC中的POU功能块作为一类POU,包含一部分程序,这部分程序可以在主程序中被多次调用,功能块在被调用时输出一个或多个数据。与Function不同,功能块没有返回值。功能块以调用其实例(Instance)的方式执行。功能块的实例需在POU的变量声明部分进行声明。实例可以声明为局部实例或全局实例。功能块的实例可以在程序或其他功能块的变量声明部分声明,不允许在函数的变量声明部分声明。(函数不允许调用功能块)功能块实例的输入输出变量可以在POU中设置,内部变量在调用时对于用户是不可见的。功能块的所有变量的数据在被调用后保留直至下一次调用;以同样的参数多次调用功能块,功能块不一定会输出相同的数据。变量声明部分:FUNCTION_BLOCKFUBVAR_INPUTPAR1:INT;PAR2:INT;END_VARVAR_OUTPUTMULERG:INT;VERGL:BOOL;END_VAR程序指令部分:LDPAR1MULPAR2STMULERGLDPAR1EQPAR2STVERGL声明输入变量声明输出变量MULERG=PAR1*PAR2PAR1=PAR2VERGL=TRUEPAR1≠PAR2VERGL=FALSE9功能块的调用(程序调用功能块或功能块相互调用)第二讲TwinCATPLC中的POU程序声明部分:PROGRAMAWLVARQUAD:BOOL;INSTANZ:FUB;(*声明功能块的实例*)ERG:INT:=0;(*声明变量并赋初值*)END_VAR在IL中调用:CALINSTANZ(PAR1:=5,PAR2:=5)LDINSTANZ.VERGLSTQUADLDINSTANZ.MULERGSTERG在ST中调用:INSTANZ(PAR1:=5,PAR2:=5);QUAD:=INSTANZ.VERGL;ERG:=INSTANZ.MULERG;在FBD中调用:FUBINSTANZPAR1PAR2MULERGVERGL55QUADERG103、程序(Program)与PLC_PRG第二讲TwinCATPLC中的POU程序作为一类POU,在执行过程中输出一系列数据。在一个项目中,程序属于全局元素。程序可以被调用,但不能在函数中调用程序。与功能块不同,程序的调用不通过实例。程序中所有变量的数据在被调用执行后保留直至下一次执行。与功能块不同,调用功能块只是改变该功能块一个实例中的变量的数据。MAIN是项目中系统预定义的一个特殊的程序。MAIN每一循环周期被系统调用执行一次,相当于一个单任务程序的主程序。MAIN在用户建立一个新项目时由系统自动加载。当用户在项目中进行了多任务管理的相关设置后,系统可以不需要MAIN。否则,用户不要删除MAIN或改变其程序名。变量声明部分:PROGRAMPRGExampleVAR_OUTPUTPAR:INT;END_VAR程序指令部分:LDPARADD1STPAR11程序的调用第二讲TwinCATPLC中的POU在IL中调用:CALPRGExampleLDPRGExample.PARSTERG在ST中调用:PRGEample;ERG:=PRGEample.PAR;在FBD中调用:PRGEampleERGPAR12第三讲TwinCATPLC数据类型布尔型BOOL:真(TRUE)与假(FALSE),占用1位(Bit)地址空间整型类型下限上限占用地址空间BYTE02558BitWORD06553516BitDWORD0429496729532BitSINT-1281278BitUSINT02558BitINT-327683276716BitUINT06553516BitDINT-2147483648214748364732BitUDINT0429496729532Bit13实型第三讲TwinCATPLC数据类型字符串型STRING:字符型数据的宽度在变量声明时指定,若没有指定,系统默认宽度为80个字符。每个字符占一个字节(8Bit)的地址空间。举例:str:STRING(35)=‘ThisisaString’;又称浮点型。REAL:占32Bit地址空间14日期/时间第三讲TwinCATPLC数据类型类型DATE从1970-01-01开始以秒计算,占32Bit地址空间举例低16Bit,高16BitD#1970-01-0116#0000,16#0000D#1970-01-0216#5180,16#0001D#1999-04-2816#4F80,16#3726D#2000-01-0116#4380,16#386DDATE_AND_TIME或DT从1970-01-0100时00分00秒开始以秒计算,占32Bit地址空间举例低16Bit,高16BitDT#1970-01-01-00:00:0016#0000,16#0000DT#1970-01-01-00:00:0116#0001,16#0000DT#1999-04-29-11:59:0016#4984,16#3728DT#2000-01-01-00:00:0116#4381,16#386D15日期/时间第三讲TwinCATPLC数据类型类型TIME以毫秒计算,占32Bit地址空间举例低16Bit,高16BitT#10s0ms16#2710,16#0000T#1440m0s0ms或T#1d16#5C00,16#0526T#60m0s0ms16#EE80,16#0036T#8052m18s3ms或T#5d14h12m18s3ms16#19D3,16#1CCCTIME_OF_DAY或TOD从00时00分00秒开始以毫秒计算,占32Bit地址空间举例低16Bit,高16BitTOD#15:36:10.34016#1764,16#0359TOD#11:3816#09C0,16#09C0TOD#00:0016#0000,16#0000TOD#00:00:00.10016#0064,16#000016数组第三讲TwinCATPLC数据类型TwinCATPLC支持1维、2维、3维数组,数组声明语法如下:Field_Name:ARRAY[ll1..ul1,ll2..ul2,ll3..ul3]OFelem.Type;举例:arr1:ARRAY[1..5]OFINT:=1,2,3,4,5;arr2:ARRAY[1..2,3..4]OFINT:=1,3(7);(*1,7,7,7*)arr3:ARRAY[1..2,2..3,2..4]OFINT:=2(0),4(4),2,3;(*0,0,4,4,4,4,2,3*)数组元素的引用:Field_Name[index1,index2,index3]举例:Arr2[1,3]17第四讲TwinCATPLC变量声明与硬件寻址1、变量的声明语法:Identifier{ATAddress}:Type{:=initialization};{}内的部分为可选项“Identifier”:变量名“Address”:变量的地址(I、Q、M)“Type”:变量数据类型“Initialization”:变量的初始值注意:变量名不允许包含空格与特殊字符,不能与关键字相同;变量名不区分大小写,允许包含至多一个下划线;变量名最大为32个字符。在声明过程中可以为变量赋初值,如果省略,系统默认初始值为“0”。使用“AT”关键字可以将变量连接到硬件地址。连接到硬件地址的变量