TWINCATPLC编程手册2.7版本控制工程师论坛

1.TWinCATPLC概述............................................................................................................3

2.TWinCATPLC要点............................................................................................................5

2.1.程序的组成部分.............................................................................................................................................5

2.3.调试,在线功能......................................................................................................................................................17

2.4.标准............................................................................................................................................................................18

3.让我们写一段小程序...............................................................................................................19

4.TWinCATPLC的详细组成部分............................................................................................30

4.1.操作项目...................................................................................................................................................................30

4.2.操作目标...................................................................................................................................................................42

4.3.常用编辑命令...........................................................................................................................................................45

4.4.常用在线命令...........................................................................................................................................................46

4.5.关于视图...................................................................................................................................................................53

4.6.编排窗口...................................................................................................................................................................54

4.7.求助信息!................................................................................................................................................................55

5.TWinCATPLC编辑器...........................................................................................................57

5.1.说明语句编辑器......................................................................................................................................................57

5.2.文本编辑器〔常用功能〕.....................................................................................................................................60

5.3.指令表编辑器...........................................................................................................................................................64

5.4.结构化文本编辑器..................................................................................................................................................66

5.5.图形编辑器...............................................................................................................................................................76

5.6.功能块图编辑器......................................................................................................................................................77

5.7.梯形图编辑器...................................................................................................................................................81

5.8.用LD编写的一个POU:.................................................................................................................................81

5.9.顺序功能流程图编辑器...................................................................................................................................85

5.10.用SFC编写的一个POU:...................................................................................................................................85

5.11.PLC组态.............................................................................................................................................................91

5.12.全局变量.............................................................................................................................................................91

5.13.库管理器.............................................................................................................................................................93

5.14.变量观测窗口....................................................................................................................................................94

5.15.采样跟综...............................................................................................................................................................95

5.16.任务编辑器..........................................................................................................................................................99

6.可视化..................................................................................................................................101

7.DDE接口..............................................................................................................................104

8.附录......................................................................................................................................105

A.键盘操作.................................................................................................................................................................105

B.IEC运算.................................................................................................................................................................105

B.1.算术运算......................................................................................................................................................105

B.2.位串运算......................................................................................................................................................107

B.3.选择函数......................................................................................................................................................108

B.4.比较函数......................................................................................................................................................110

B.5.地址函数......................................................................................................................................................113

B.6.调用操作符CAL........................................................................................................................................113

C.标准的库函数........................................................................................................................................................113

C.1.类型转换函数..............................................................................................................................................113

C.2.数值函数......................................................................................................................................................114

C.3.位移函数......................................................................................................................................................116

C.4.字符串功能..................................................................................................................................................117

C.5.双稳态功能块..............................................................................................................................................120

C.6.边沿检测......................................................................................................................................................121

C.7.计数器...........................................................................................................................................................122

C.8.计时器...........................................................................................................................................................123

D.TWinCATPLC中的操作数...........................................................................................................................................126

E.错误信息参考...................................................................................................................................................................130

TWinCATPLC是什么?

TWinCATPLC是一个完整的用于逻辑控制器的开发系统。

TWinCATPLC具有功能强的语言结构,符合IEC国际标准。这些使你易于进行程序的开发。就像VisualC++一样,具有高级语言编程系统的开发环境,可为编辑器的操作和调试功能设置模式。

程序的结构是什么?

所有的项目数据存在一个有项目名称的文件中。一个新项目的第一个POU,系统会自动地给定名称MAIN,这是程序的起点。(在C程序中,这是一个主函数。〕从这里开始,你可以调用其它的POUs(程序,功能块和函数〕。

TWinCATPLC区分一个项目中的三种不同目标:POUs,结构和可视化元素。利用这些目标,你可以创建你的项目。在目标表中,你可以看到你的项目目标。

怎样写程序?

首先,当你开始开发一个新程序时,你必须对你的硬件系统进行组态。这对于检查使用的地址是否正确是必要的。

现在你可以对你的问题组态必要的POUs。然后,你开始用你选择的语言对你的POUs进行编程。

在编辑完项目的所有目标后,编译你写的程序并去掉语法错误。

怎样测试程序

你可以打开图形硬件组态窗口,强制给定输入,然后观察输出。在每个POU的说明语句部分以及全局变量表中,你能够看到项目数据的当前值,你也可以去写,强制给定数值。在另一个观察窗口中,你可以组态你想要检查的数据单元。

用TWinCATPLC进行调试

在发生程序错误的地方,你可以设置中断点。程序停止执行后,你可以在这个中断点上检查所有的程序数据。单步功能允许你一步一步地检查程序的逻辑是否正确。

进一步的在线功能

TWinCATPLC支持进一步的调试功能。允许按照一定数值强制改变程序变量和输入/输出值。流程控制使你能够检查哪一行程序被执行,并且当运行编码时,向你显示该行所用的每个变量的数值。

采样跟综用于跟综变量并以曲线方式显示数值。

在编写和测试程序后,你可以把程序下装到你的硬件系统中,并继续测试。这时,像用模拟方式调试一样,你可用同样的调试方法。

TWinCATPLC的其它功能

在任何时候,可以将整个项目存档或输出到一个文本文件中。

总结

为了便于你掌握TWinCATPLC,请阅读下面的基本TWinCATPLC术语表:

项目(Project)

一个项目包括控制器程序的所有目标,保存在有项目名称的文件中。一个文件由以下目标组成:PLC-Configuration,Tasks,POUS,结构,全局变量表,库,观测变量,可视化元素。

编程组织单元(POUs)

POUs由函数,功能块和程序构成。

每个POU由说明语句部分和语体组成。语体用IEC编程语言编写:

指令表InstructionList(IL),结构化文本StructuredText(ST),功能块图FunctionBlockDiagram(FBD),梯形图LadderDiagram(LD)或顺序功能流程图SequentialFunctionChart(SFC).

TWinCATPLC支持所有的IEC标准POUs。

POUs可以调用其它POUs.然而,被调用的POUs不允许再调用其它的POUs.

函数(Function)

一种函数是一个POU,当执行这种函数时,它精确地提供一个数据元素(也可以像数列或结构数据那样由多个数据元素组成〕。

一种函数总是用一定的形式来说明。即:在功能名称的后面是一个冒号和类型符。

一个正确的函数说明语句如下:

FUNCTIONFct:INT

另外,一个数值被分配给函数。即,函数名称可以像一个输出变量那样使用。函数数值必须与它的说明类型相一致。

下图举例说明函数FBD-Example。该函数用FBD语言编写,有三个BOOL输入和一个BOOL输出:

图2.1.1功能

在ST语言中,调用一个函数,如同使用一个表达式中的操作数。

函数不含有内部的状态信息。这就是说,调用具有相同自变量(输入参数〕的一个函数,总是产生相同的数值(输出〕。

举例调用上面所描述的函数:

用IL语言编写:

LD7

FBD_Example2,4

STResult

用ST语言编写:

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

用FBD语言,可这样调用功能:

在SFC语言中,一个功能公可以在一步或一个转换内调用。

功能块(FunctionBlock)

一个功能块是一个POU,当执行该功能时,它产生一个或多个数值。

功能块没有类型说明。

功能块的例程(InstancesofFunctionBlocks〕

像变量一样,功能块例程可被定义在局部变量表中。其方法是用标识符表示,用功能块名称作为类型。

下面是功能块FUB,例程名称为INSTANCER:

INSTANCE:FUB;

一个功能块的所有数值保持到下一次功能块执行之前。因此,调用同样的功能块,尽管它们有相同的自变量〔输入变量〕,但是,功能块的输出值并不总是相同。

下图是一个名称为IL_EXAMPLE的功能块,用IL语言编写,有一个输入变量,二个输出变量。

图2.1.2.功能块

调用功能块的方法,是使用功能块的例程名称。

访问功能块变量的方法,是输入功能块的例程名称,其后是一个点和变量名。

下面举例说明怎样调用上图描述的功能块IL-EXAMPLE。

图2.1.3.用IL语言调用一个功能块

用ST语言调用同样的功能块:

图2.1.4.用ST语言调用一个功能块

用FBD语言调用功能块:

图2.1.5.用FBD语言调用一个功能块

在SFC语言中,仅可以在步骤或传送内调用功能块。

有关功能块用法的举例见第三章。

程序

一个程序就是一个POU。当执行该程序时,它产生一个或多个数值。不允许像功能块那样产生一个程序的例程〔见功能块)。一个程序的所有数值保持到下一次执行程序之前。

一个简单程序举例:

图2.1.6.程序

在程序和功能块内,可以调用程序。在一个函数内不允许调用程序。不存在程序例程。

如果一个POU调用一个程序并且改变了程序的数值,这些变化将保持到下一次调用程序之前,即使是一个不同的POU调用该程序。

这与调用功能块是不同的。调用功能块的POU仅可以改变功能块的某一例程的数值(局部或全局数值〕

举例说明上面所描述的调用程序:

用IL语言编写程序:

CALPRGexample

用ST语言编写程序:

PRGexample;

用FBD语言编写程序:

MAIN

名称为MAIN的POU是一个特殊的程序。它是一个新项目中产生的第一个POU。在每个控制器运行周期中,这个POU被调用一次。如果你不使用任务(看5.14节),那么就决不能删除这个POU,也不能给它重新命名!!!

PLC组态(PLCConfiguration)

你可以使用PLCConfiguration组态你的控制器。为了检查一个程序,有必要知道哪些地址是有效的。一个项目的有效地址在PLCConfiguration中定义。

库(Libraries)

结构(Structure)

一个结构总是由多个基本的数据元素组成。一个结构的组成部分可以是任何类型的数组,其中包括结构。

结构定义举例:

多边形

STRUCT

Start:ARRAY(1..2)OFINT;

Point1:ARRAY(1..2)OFINT;

Point2:ARRAY(1..2)OFINT;

Point3:ARRAY(1..2)OFINT;

Point4:ARRAY(1..2)OFINT;

End:ARRAY(1..2)OFINT;

END_STRUCT

任务

指令表InstructionList(IL)

指令表(IL〕由一系列的指令组成。每条指令从新的一行开始,并根据操作指令,由操作符,一个或多个操作数组成,这些操作数用逗号分开。

一条指令可用一个标号引导。该标号由标号名和一个冒号组成。

一条注释必须是在一行的最后,两条指令之间可以插入空行。

举例:

LD17

STlint(*Comment*)

GE5

JMPCnext

LDidword

EQistruct.sdword

STNtest

next:

结构化文本StructuredText(ST)

结构化文本由一系列语句组成。这些语句可以有条件地(“

举例:

IFvalue<7THENWHILEvalue<8DOvalue:=value+1;END_WHILE;END_IF;

顺序功能流程图SequentialFunctionChart(SFC)

用SFC语言编写,用TWinCATPLCSFC编辑器进行编辑的例子:

图2.2.1:用SFC编写的网络

步和动作(StepsandActions〕

用SFC编写的POU由一个步的序列组成(如图2.21中的permanent,Init),这些步直接连接。这里所说的动作可附着在每一步上,Action意味着与动作有关的编码。

传送(Transition〕

步与步之间存在着传送(如图2.21中的TRUE,sin_test),一种条件被附着在转换上,这种条件或是一个布尔变量,一个地址,或是一个有布尔结果的表达式,也可能是一个布尔常量(TRUE,FALSE).

激活步(ActiveStep〕

当执行一个SFC-POU程序时,首先执行的动作是初始步(双边框〕。当一个步的动作被执行时,称该步为激活步。

每个步有一个标记。这个标记存储步的状态.当步处于激活状态时,标记为TRUE,否则为FALSE。标记的标识符就是步的名称。它在SFC-POU程序中被说明。

执行完一步后,接着执行下面的传送。如果结果值是TRUE,则激活下面的步,并在下一个处理器周期中执行。

功能块图(FBD)

功能块图是一种图形编程语言。它由一个网络序列组成。每个网络含有一种结构,这种结构代表了一个逻辑或一个算术表达式,一个功能块的调用,一个跳转或一个返回语句(图2.2.2).

用FBD编写的典型的网络例子:

图2.2.2.:用FBD编写的网络

梯形图LadderDiagram(LD)

梯形图是一种图形编程语言,类似于电路原理图。一方面,你可以用LD语言去设计逻辑电路,另一方面,你可以用LD语言设计FBD所编写的网络。因此,你可以使用LD语言去控制调用其它的POUs.

触点〔Contacts〕

触点可并联连接。在这种情况下,并行支路中的任一分支传送数值ON就能使并行网络传送ON状态。触点也可以串行连接。在这种情况下,所有触点必须传送数值ON,才能使最后的触点传送ON状态。这一点和电路图中的并联或串联连接原理相一致。

线圈〔Coils〕

在梯形图的右侧是一个线圈网络。这些线圈不能用水平线连接在一起。一个线圈能不加修改地考贝从线圈左侧到右侧的状态,并把这一状态值存入相联的布尔变量中。

当一个线圈为“非”运算时,它把这一“非”运算值存入一个相联的布尔变量中。当一个触点为“非”运算时,只有与之相联的布尔变量值为FALSE时,这个“非”运算触点才能传送数值。

用LD语言编写的网络例子.

图2.2.3用LD语言编写由触点和线圈组成的网络

梯形图中的连接

网络中的连接可以是水平的或垂直的。

水平连接用水平线表示,水平连线将它左边的元件状态传送到它右边的元件。

垂直连接用垂直线表示。垂直连线传送如下状态:

-OFF,位于垂线左侧的所有水平连线的状态是OFF。

-ON,位于垂线左侧的一条或多条水平连线的状态是ON。

梯形图中的功能块

在梯形图中,除了使用线圈和触点外,你还可以插入功能块和程序。被插入功能块的第一个输入和第一个输出与梯形网络相连接。因此,第一个输入变量和第一个输出变量必须是布尔型变量。

功能块可用在与触点相同的位置上。这就是说,功能块梯形网络的左侧。

置位/复位线圈

把LD用作FBD

当使用LD语言工作时,你常希望用触点网络去控制调用其它的POUs程序。在这种情况下,你可以把一个线圈的结果值存入一个全局变量中,并在其它地方使用这个变量。你也可以使用这个结果值去直接调用一个FBD网络。

一个EN元件与线圈并联连接。EN-INPUT端连接到触点与线圈之间的连线上。当这条连线传送ON状态时,才能调用EN-component元件。

从这样一个EN-component元件开始,你可以像用FBD语言那样去开发你的网络。

图2.2.4.使用EN-operator运算元件的局部LD网络。

采样跟综〔SamplingTrace〕

采样跟综使你有可能跟综程序的数值变化过程,采样跟综依赖于所谓的触发器事件。这就是事先定义的布尔变量(触发变量〕的下降或上升边缘。

TWinCATPLC使你能够跟综20个变量的500个数值。

调试(Debugging)

断点(Breakpoint〕

TWinCATPLC支持中断点的设置。当程序遇到中断点时,停止执行。这时你可以查看中断点处所有的程序数据〔即变量值〕。

在所有的TWinCATPLC编辑器中可以设置断点。在文本编辑器中,可以在行号上设置断点。在FBD和LD中,中断点设置在网络号上。在SFC中,中断点设置在步上。

单步〔Singlestep〕

单步的含义:

在IL中:程序一直执行,直到遇到下一个CAL,LD或JMP指令。

在ST中:执行下一个指令。

在FBD,LD中:执行下一个网络。

在SFC中:执行下一步的动作。

通过步进方式,你可以检查程序的逻辑是否正确。

单循环〔Singlecycle〕

监视〔Monitoring)

采用在线方式,在可视变量说明语句的后面,对控制器中的现行值进行监视。

流程控制(FlowControl〕

采用快照的方法,通过定义快照区并产生快照,你可以显示一个循环周期内的变量值。这样,在不停止执行程序的情况下,快照区中的一行内的任一变量都可采用现行值来进行监视。

仿真〔Simulation〕

采用仿真方式,用户程序可以在PC机上运行,而代替PLC。在这种方式下,所有在线功能都在工作,不用任何硬件你就能够对你的程序进行逻辑校验。

IEC1131-3

IEC1131-3是PLC编程语言的国际标准。

TWinCATPLC提供了国际标准中所描述的所有编程语言。

建立POUs

我们选择顺序功能流程图〔SFC〕来编写这个POU。

现在我们建立另外两个目标。用功能块图(FBD〕语言编写的块PHASES和用指令表(IL)编写的功能块POUWAIT。.

功能块PHASES的用途

在PHASES中,交通灯的每个阶段将变换为正确的颜色。这就是说,在红色阶段和黄/红阶段中,红灯一直亮着,在绿色阶段中,绿灯一直亮着,等等。

功能块WAIT的用途

PLC_PRG的用途

"PHASES”说明语句

现在让我们写PHASE。在说明语句部分,你必须说明一个输入变量STATE,其类型为INT〔在关键词VAR-INPUT和END-VAR之间〕。STATE将有5个可能的状态,也就是每一个阶段有一个状态〔绿,黄,黄/红,红和断开〕。

相应地,交通灯有四个输出变量,名称为RED,YELLOW,GREEN和断开。请你按照图3.1中所看到的那样来说明这四个变量。

PHASES的说明语句部分如图所示:

"PHASES”文本

现在我们根据输入变量的状态来确定输出变量.为此,你用鼠标器在第一个网络的网络号上击一下〔左边的灰色区域,包括号码0001〕。现在你已选择了第一个网络。

用你的鼠标器选择AND,将其文本改为EQ。现在把上面的TRUE改为STATE,下面的TRUE改为1。这样你就建好了下面的网络:

STATE与1进行比较,其结果。赋值GREEN:如果STATE值为1,则网络将使GREEN接通.

图3.2:功能块PHASES的文本

这样就完成了第一个POU。根据输入值STATE,PHASES控制交通要求的颜色。

"WAIT"说明语句

这个变量的初始值是FALSE,它的设置方法是在说明语句后面〔分号前面〕插入":=FALSE".

连接标准库

根据我们的用途,我们需要POUTP,一个脉冲记时器,这个POU有两个输入(IN,PT)和两个输出(Q,ET).TP有如下功能:

注意:在附录B节中,你可以找到标准库中所有元素的简要描述。

WAIT的说明语句部分如下图所示:

图3.3.:功能块WAIT的说明语句部分

为了实现所期望的记时器,POU的文体必须按下面的方法编程:

"WAIT"的文体

图3.4.:功能块WAIT文体

现在记时器已编写完。主程序PLC-PRG将把前面的两个功能块WAIT和PHASES连在一起.

"MAIN"程序的第一步开发

首先我们要说明所需要的变量表。这些变量包括功能块PHASES的二个状态(LIGHT1,LIGHT2),以及功能块WAIT状态(DELAY)我们得到下面的说明语句:

图3.5.:程序PLC_PRG的第一层,说明语句

怎样用SFC语言建立一个图形

首先我们确定图形的结构。然后我们可以对不同的动作和转换进行编码。

最后,把跳转目标Init改为Switch1.如图所示:

图3.6.:程序MAIN的语体,第一次开发

现在我们必须填写步骤的动作。如果你双击一个步,那么你得到一个打开新动作的对话框。在我们的例子中,总是选择IL(指令表)编写程序。

动作和传送条件

Init步的动作是使变量初始化。LIGHT1的变量STATE被赋值为1(绿色〕。LIGHT2的变量STATE被赋值为3〔红色〕。

图3.7.ActionInit

图3.8.ActionSwitch1

在Green2,LIGHT1是红色(STATUS:=3),LIGHT2是绿色(STATUS:=1),

图3.9.ActionGreen2

图3.10.ActionSwitch2

图3.11.ActionGreen1

现在,已经编写完程序的第一层。你可以编译程序,并用模拟方式测试程序.

MAIN程序的第二步开发

现在所要考虑的问题是,在经过若干周期以后,即在夜里,你想要关断交通灯。为此,在程序中我们插入一个记数器,该记数器向上记忆交通灯的运行周期数,并且当记数器达到一定的数值时,交通灯断电。

首先,我们需要一个变量类型为INT的新变量COUNTER。在程序PLC-PRG的说明语句中说明这处变量,并在动作Init中,使它的初始值为0。

LD0

STCOUNTER

现在选择Switch1后面的转换,并在这个转换后面插入一个步/转换。

给新增加的部分定名如下:

在新增的二个步中,上面的一个定名为"Counting".另一个定名为"Off".

新的转换(从上到下,从左向右)分别被称为“FINISH”,"TRUE"and"DELAY.OK".

现在,修改后的结构图如下所示:

图3.12.交通灯MAIN程序

如同你所看到的,另外两个新增加的动作和一个传送条件已经编写完。.

在Counting步中,记数器每次增加1.

图3.13.ActionCounting

在传送FINISH中,检查记数器是否比某一数值在,比如说与数值7比较:

图3.14.TransitionFINISH

图3.15.ActionOff

结果

在交通灯运行了七个周期以后,天黑下来。在黑暗持续了10秒钟以后,交通灯再次被点亮,等等。

交通灯的仿真

在下面的章节中,你将找到对TWinCATPLC特性的详细说明。我们将仔细研究每个菜单项以及它们的用途。

用这个命令打开已有的项目。如果一个项目已被打开并修改,那么,TWinCATPLC询问是否存这个项目。

为了打开最近使用的一个项目,使用File菜单中Exit命令后面的菜单项。

这个命令用于关闭正打开的当前项目。如果当前项目被修改,那么TWinCATPLC询问是否存这个项目。

如果项目已被修改,那么用这个命令存当前项目.

快婕键:+.

这个命令用于把当前的项目存到一个不同的文件中,原有的项目文件不被改变.

选择这个命令以后,标准窗口SaveDialog打开。选择已有的文件各或输入一个新的文件。灰后击一下OK按钮。当前的项目就被存到指定的文件中。

如果文件名已经存在,TWinCATPLC提示你是否覆盖这个文件。

这个命令用于把当前项目作为库文件存起来,以便在其它的项目中使用.

首先,标准窗口SaveDialog出现。选择一个已有的文件名或输入任何一个文件名。然后击一下OK按钮。

重新建立整个项目。如果出现任何错误,则TWinCATPLC显示一个有关的信息。含有错误的项目是不能作为库文件存入的。

如果没有错误发生,那么当前项目作为库文件存入指定的文件中.

如果文件名已存在,那么TWinCATPLC提示你是否覆盖这个文件。

一个用途在库管理器一章中描述。

这个命令用于打印激活窗口的内容.

快捷键:+

.

选择这个命令后,标准窗口PrintDialog出现。选择你需要的选项或组态打印机,然后击一下OK按钮。

打印激活窗口中所显示的目标。

把一个外部文件的注释插到一个目标资料中是可能的。具体做法在全局变量一章中描述.

这个菜单选项允许你设置打印的脚文和标题,以及确定打印机的选项,如使用主象或风景画式的格式等等.

选择这个命令后,printerSetup话框出现.

图4.1.1PrinterSetup对话框

对每一页输入脚文和标题。可插入下面的文本符号:

(Page)打印当前页

(Date)当前日期

(FileName)项目文件的路径

(POUName)当前打印的目标名

键输入标记.

你可以选择是否每一页有一个边框,是否每一个新目标另起一页,并且你可以调整左边框的宽度。缺省值是10mm.

最下面的PrinterSetup按钮是用于打开标准的WindowsPrinterSetup对话框,这个对话框的内容取决于你的打印机类型.

这个命令用于退出TWinCATPLC.

快捷键:+.

如果一个项目已经打开并被修改,则TWinCATPLC询问是否存这个项目

这个命令用于检查你的程序是否有语法错误.发生的每一错误显示在另一个窗口上,该窗口称为信息窗口。

对所有更改的POUs和结构产生编码.

打开信息窗口,显示编译的过程和发生的错误.

注意:

如果PLC支持onlinechange功能,那么,Build功能才能被支持.

Onlinechange功能的含义是,在PLC运行期间可以改变PLC中程序的某些部分,而不用中断执行程序,所有的数据尽可能保留。

信息窗口:

信息窗口显示编译的过程。显示错误所在的POU行和类型。在信息窗口中,选择显示错误的那一行,并敲键(或双击鼠标).POU的一个窗口打开。选择网络,现在你可以容易地修改错误.

使用(+)键,你可以得到下一个(或前一个〕错误。

图4.1.2.信息窗口:编译10个POUs,产生4个错误.

在附录中,你可找到所有的错误信息表。

这个菜单包括所有的项目选项。可被设定的选项在下一页中描述:

这个命令允许对产生编码的选项进行设置.

选择这个命令后,出现一个对话框.

图4.1.3.BuildOptions对话框

EnableDebugging

选择这一选项,使得产生附加的调试编码。

当有C-Code编码产生时,才选择这一选项.

EnableMonitoring

选择这一选项,使得产生附加的监视编码

EnableOnlineChanges

你可以选择是否在线更改你的程序。当有C-Code编码产生并且PLC允许在线更改程序时,选择这一选项才是恰当的.

NumberofDatasegments

这个号码决定控制器为你的项目所留出存储空间。一个数据存储区等于32Kb。当有可能在线更改程序时,选择这一选项才是恰当的.

编译前自动存储Autosavebeforecompilation

如果选择了这一选项,那么在做任何编译之前,你的程序被自动存储.

询问项目信息AskforProjectinfo

如果选择了这一选项,那么当一个项目第一次被存储或者用新的名称存项目时,项目信息对话框便自动打开。

这一选项对工作区来说是特殊的。它不能存在项目文件中,而存在TWinCATPLC.ini信息文件中。

用户信息UserInfo

用这个命令打开一个窗口,该窗口中有项目的用户信息.

图4.1.4.UserInformation窗口

用户信息由用户名,名称的开头字母和公司名称组成。这些选项对一个工作来说是特殊的。它们不能存在项目文件中,而存在TWinCATPLC.ini信息文件中.

目录Directories

用这个命令打开一个对话框,你可以插入目录路径,在这里有TWinCATPLC的库文件和编译文件.

图4.1.5.目录路径

这些路径对一个工作区来说是特殊的。它们不能存在项目文件中,而存在TWinCATPLC.ini信息文件中.

存储选项Saveoptions

图4.1.6.SaveOptions对话框

你可以选择TWinCATPLC是否在下次存储项目时,建立项目的备份版本。如果选择了这一选项,那么TWinCATPLC将把实际项目存到扩展名为。bak的文件中。这样,你可以在最后的安全期之前,恢复这个版本文件。已有的备份文件不能重写。为了得到一个新的备份文件,就要删除或移走已有的备份文件。

图4.1.7.打开一个用项目的对话框

你可以选择是打开自动存储的备份文件还是最后一次存储的项目文件。.

自动存选项是非常受欢迎的。因为当你的计算机出现故障(不是由TWinCATPLC引起)或是当电源出现故障时,自动存选项存储你所做的工作.

TWinCATPLC提供数据保护

图4.1.8.回令Password对话框

在passward栏中输入你的口令,该口令用于打开你的项目。每输入一个字母,屏幕上出现一个星号。在ConfirmPassword一栏中确认你的口令。用OK按钮关闭对话框。如果出现下面的信息:

这是因为你的口令和确认的口令不一致。你要重新输入口令并确认。.

现在,如果你正存文件并且要再次打开它,那么TWinCATPLC提示你输入口令,在输入了正确的口令后,项目才能被打开.

除了这个一般的口令外,你还可以定义写保护口令。因此,在上面对话框〔图4.1.8〕的有关栏目中输入写保护口令,并确认你的口令.

不知道写保护口令,也可以打开一个有写保护的项目。因此,当TWinCATPLC要求你输入写保护口令时,在Cancel按钮上击一下。现在你可以编译项目,装入项目,仿真项目等等。但是,你不能存项目.

要小心不要忘记不的口令!否则你要去找系统管理员。

自动格式化Autoformat

如果选择这一选项,该菜单命令前显示(ü)。用IEC1131-3指令表(IL)语言所写的程序将被自动格式化。空格被插入并且关键字被大写。这将有助你写出更为可读的程序。试试看。

自动装入Autoload

如果选择这一选项,该菜单命令前显示(ü)。那么每次你启动TWinCATPLC时,上次工作的项目被打开〔显示上次存项目时所占有的工作空间〕.通常这是很有用的。

自动说明Autodeclare

如果选择这一选项,那么当你输入一个还没有进行说明的变量时,一个用于说明变量的对话框打开。

现在已经解释了所有的选项,接着我们继续研究Projict菜单。

这个命令允许你打印整个项目的资料或部分项目资料.

一个完整的项目资料由以下部分组成:

-POUs

-Structures结构

-Taskconfiguration任务组态

-SamplingTrace采样跟综

-CrossReferences交叉参考

-ThecalltreesofPOUsandStructuresPOUs和结构的调用

-TheGlobalVariableList全局变量表

-ThePLCConfigurationPLC组态

-Atableofcontents目录表

选择这个命令后,出现一个对话框,你可以在对话框中选择你想要打印的资料:

图4.1.6DocumentProject对话框

项目的输出和输入

TWinCATPLC提供了输出或输入项目的可能性。因此,你有机会在不同的IEC编程系统之间进行项目的交换。到目前为止,只有IL和ST语言有标准的交换格式。由于这个原因,TWinCATPLC使用自己的图形语言格式.

所有的POUs,PLC组态和一个程序的结构都保存在一个ASCIIFile文件中,这些元素的格式有IEC1131-3的通用元素格式.

PLC组态和用FBD或LD编写的POUs有TWinCATPLC的特殊格式。

一个输出文件被输入到一个项目中

如果被输入的POU与已有的POU名称相同,那么它的名称有一个引导线。

Merge命令允许你把其它项目的目标拷贝出来。

标准窗口文件对话框打开,你必须从中选择想要的项目。然后打开另一个对话框,这个对话框允许你选择你想要拷贝的目标:

图4.1.7.MergeProject对话框

从POU表中,你可以选择想要的POUs;从结构表中,你可以选择想要的结构。此外,你可以选择是否拷贝SamplingTrace采样跟综,GlobalVariables全局变量或PLCConfigurationPLC组态

用OK按钮.确认,这样选择的目标从被选的项目拷贝到当前的项目中。

如果一个合并的POU与已有的POU名称相同,那么它的名称有一个引导线。

用这个命令,你可以把信息存到你的项目中。选择这一命令,出现下面的对话框:

图4.1.8.项目信息对话框

一个完整的项目信息包括以下内容:

-文件名File

-目录Directory

-最后更改的日期Thedateofthelastchange

这些内容由TWinCATPLC给出.你不能改变信息对话框中的这些内容。

你可以增加下面的内容:

-项目的标题title,

-作者的姓名author,

-版本号version

-项目的描述description.

全局检索允许寻找整个项目或部分项目中的某一字符.

全局替代允许代替整个项目或部分项目中的某一字符.

目标/目标表

一个目标"Object"表示一个POU,一个结构或一个可视化元素。目标表Objectlist〔在屏幕左侧的小窗口〕包括一个项目的所有目标。目标的类型可在目标表上方的组合箱中选择。

这个命令删除目标表中当前选择的目标(POU,Structure或可视化元素)快捷键.

如果目标的编辑窗口是打开的,那么在删除目标以后,编辑窗口将自动关闭.

建立一个新目标〔快捷键).新目标的类型取决于在Object类选择窗口表中的当前选项。.

选择这个命令后,出现一个对话框,该对话框取决于新的目标类型.

如果新目标是一个POU,那么必须选择新目标的类型〔函数,功能块或程序〕以及想要的编程语言。

图4.2.1.建立POU的对话框

这个命令是给目标表中当前选择的目标(POU,Structure或可视化元素)重新定名.

用这个命令,你可以把一个用ST,FBD,LD或SFC语言编写的程序转换成用IL和FBD语言编写的程序。在下一个版本中,可以转换成梯形图语言

在转换目标之前,必须要编辑项目,选择了这个命令以后,下面的对话框对开:

图4.2.2.转换POUs对话框

选择要将POU转换成的目标语言,给新的POU起一个新名〔或者新的POU代替原有的POU〕。按OK按钮,一个新的POU就加到你的项目中.

注意:转换一个POU要丢失一些注释。把一个用IL语言编写的POU转换成用FBD语言编写的POU,然后再把它转换回用IL编写的POU,结果,看上去这个POU与原来的POU是不同的,其实它们所做的工作却是相同的.

这个命令把目标表中当前选择的目标(POU,Structure或可视化元素)装入编辑器中。

这个命令打开一个窗口,该窗口是目标表中当前所选目标(POU,Structure)的调用树形图

注意:必须要编译项目!

图4.2.2.调用树形图举例

用这个命令你得到一张所有初始定义而未被使用的变量表.

用这个命令,编辑的目标〔被装到激活窗口中〕复位到上次存储的状态。这个状态可以是手动存也可以是自动存。因此,如果你选择了自动存,那么使用这个命令时,则有可能改变了不想要改变的目标状态.

该命令表示,在当前打开的编辑窗口中,不做最后一次所做的操作。

快捷键:+.

注意:不是所有的编辑器都支持undo功能,undo功能不可以用于整个项目的插入,删除或重新给一个POU或一个结构定名。

如果使用两次undo,那么第一次使用undo之前的状态被存储。.

把编辑窗口中的当前选项移到剪贴板〔Clipboard)上.选项在编辑窗口中被删除。

快捷键:+.

把编辑窗口中的当前选项拷贝到剪贴板上。编辑窗口的内容不被修改。

快捷键:+.

把剪贴板上的内容插到编辑窗口中当前光标位置上。在图形编辑器中,如果图形结构句法正确,才能执行该项命令

快捷键:+.

删除编辑窗口中的当前选项,不改变剪贴板上的内容

快捷键:.

对话框选项:

FindWhat

在这个框中输入你想要寻找的文本.

MatchWholeWordonly

如果选择这一项,则查找命令按照整个单词来查找文本而不是按照单词的一部分来查找文本。

MatchCase严格大小写

Direction

Findnext

Cancel/Close

退出查找命令。.

输入参数〔查找的文本,检索的方向等等〕,重复查查找操作.

快捷键:.

这个命令用于检索一个文本并用不同的文本业替代.

输入某一指令时,将给PLC输送一次服务,对此,PC机也会获得一个响应。

在仿真状态下,你的程序是在PC机内执行。因为所有在线功能都具备,你不需要特殊硬件即可对你的项目进行调试。这是一个非常有用的功能,该功能不仅仅适合于你刚开始的一些小项目。

这个命令把系统与PLC连接起来。如果项目没有建立,则自动建立。如果编译产生错误,则TWinCATPLC不处于在线方式.

在线方式意为:

"CommunicationError:LogoutPerformed"

通讯故障:退出系统.

程序已改变!下装新的程序码?

现在你可以选择’NO’,并处于在线方式,或者你输入‘YES’,把当前被装入TWinCATPLC中的项目下装到PLC中。

用这个命令,则由在线方式回到编辑方式。关闭与控制器的连接,退出仿真.

这个命令用于运行你用TWinCATPLC编写好的程序。

快捷键:.

停止执行装入PLC中的程序.

把PLC中的数据初始化。这些数据或者是POUs说明语句中赋给的数值或者为0.为安全起见,在PLC复位前,你必须确认这个命令。

复位后,不执行〔stop〕用户程序。

这个命令的作用取决于当前光标的位置。如果光标在一个有效的中断点位置上,那么在这个位置设置或清除一个断点.

有效的中断点位置:

快捷键:orand并双击鼠标.

中断点用青蓝色表示.

程序执行到中断点停止。中断点变为红色。为了继续执行程序,使用Run,SingleCycle,StepIn或者StepOver命令〔所有这些命令在Online菜单中〕.

有这个命令打开一个对话框,设置和清除整个项目中断点。这个对话框显示所有的断点并允许找查断点设置的位置.

图4.4.1:中断点对话框

POU的下拉表包括项目的所有POUs,Location下拉表包括你选择的POU的所有有效断点的位置.

Add是把一个中断点加到所选POU的某一行上〔网络或步〕.该中断点加到中断点列表中。

Delete是删除在中断点列表中所选择的中断点.

Deleteall是删除所有的中断点.

Goto是打开某个POU,并在某个中断行上设置光标。该中断行在中断点列表中选择.

该命令是执行一个单步。一个POUs的调用被看成一步〔在执行这个POU以后,停止执行〕。在SFC中,该命令是执行一个完整的动作.

快捷键:.

步进到下一个语句。即使这一语句是在一个不同的POU。如果下一个语句是调用另一个POU,那么在所调用的POU第一个语句之前,程序停止执行

快捷键:.

开始执行程序,然后停在一个PLC循环周期的末端〔或者停在下一个中断点上〕.

and

为了改变一个变量的值,在变量的说明语句上双击鼠标键或者选择这个变量,然后按键.

你将得到一个对话框,可用来改变所选变量的值.

图4.4.2.用于写新的变量值对话框

你按OK按钮以后,该数值被标记做出更改。实际上,在控制器中并未更改。所有被标记的变量数值用红色显示。这就使你有可能一次更改几个变量〔在二个控制器周期之间〕。

PLC中的Force表被释放。数值不再强行设置.

当程序停在中断点上时,你可以执行这一命令,这时,打开一个对话框,该对话框有一个调用堆栈中当前POUs的列表和行〔网络〕号,以及下一个被调用的POU.

图4.4.3.调用堆栈举例

第一个POU总是PLC_PRG,因为程序从这里开始执行.

最后的POU总是某个POU,在这里程序停止执行.

流程控制帮助你调试你的项目,而不用使程序停止执行。

当检查到菜单项为(ü)时,流程控制被激活。

流程控制在所选择的激活编辑窗口上工作。并取决于编写POU所使用的语言。如果激活窗口不是用IL,ST或FBD编写的一个POU,则不能显示流程控制。

用IL编写POU的流程控制:

图4.4.4:用IL编写POU的流程控制

在每行的左侧显示了另一个区域。当控制器正在运行以及某行被执行时,该行的号码区被标记〔绿色〕,并且显示累加器的内容。

用FBD编写POU的流程控制:

图4.4.5:用FBD编写POU的流程控制

在FBD中,程序通过的每一行,其网络号区被标记〔绿色〕.

对于每一行,你得到通过‘passed’这一行的实际数值。对于布尔数值,当TRUE通过时,这一行加亮显示〔蓝色〕,否则为一般显示。对于不是布尔数值来说,插入一个文本区,该文区含有通过这一行的实际数值.

如果选择仿真方式,则在线服务不在PLC上工作,而是在仿真程序上工作。仿真程序如同编程系统一样,在相同的PC下运行.

这条命令允许你设置串行接口的参数。

当通过串行接口进行通讯时,有下面的对话框出现:

图4.4.6.通讯参数对话框

PLC中的通讯参数和控制器中的通讯参数要一致,这一点很重要。

所选择的参数与项目一起保存起来.

使用这条命令,TWinCATPLC工作区上方的工具条出现或移走。当检查到菜单命令后面的标记(ü)时,工具条就出现。

使用这条命令,下方的状态条出现或移走。当检查到菜单命令后面的标记()时,状态条就出现。

图4.5.2.表示当前项目和在线状态的状态条

通常,状态条显示当前项目的文件,如果选择一个菜单命令中要按一下鼠村键,则状态条就给出这条命令的主要功能描述。如果不选择这条命令,你可以移动鼠标,按放弃键.

所有的说明语句可以用通常的文本方式显示或者用表格表示。使用这条命令,你可以在文本和表格方式之间进行转换.

用这条命令,你可以选择TWinCATPLC编辑器的所有字型。且字型的尺寸可增大显示并加大TWinCATPLC编辑器的打印输出。

用这条命令,你可以编辑TWinCATPLC的颜色设置。你可以设置行号区〔TheLineNumber〕的颜色,中断点〔BreakpointPositions〕位置的颜色,一个激活的中断点〔ActiveBreakpoint〕颜色,布尔值监视,〔TheMonitoringofBOOLValues〕的当前位置颜色,或通过位置〔thePassedPosition〕的颜色.

选择上面的某一菜单项,则用于编辑颜色的标准对话框打开.

在这条菜单命令的下面,你可以选择想要的当前选项是用虚线框显示,还是用实线框显示或者是用填充框显示.

BYTE,WORD或DWORD类型的变量值可用十进制,十六进制或二进制显示.

用这条命令,所有打开的窗口并排摆放。这样就使打开的窗口不重迭,并覆盖整个工作区.

用这条命令,所有打开的窗口上下摆放,这样就使打开的窗口不重迭,并覆盖整个工作区.

所有打开的窗口以阶形连接方式排列.

所有显示记号的窗口在主窗口工作区的底部排成一行.

选择这条命令后,会有上一次编译信息的窗口打开。在一条信息上单击一下,你可以打开某个POU的窗口用于查阅信息。如果你在一个错误信息上单击一下,产生错误的某行为蓝色显示.

用这条命令,你可以把一个打开的项目与另一个项目进行比较。例如,如果你要存一个目标,而你不能确信自从上次保存以来,你在哪个地方做了更改,这时,你可以把项目与它自身进行比较。

选择这条命令后,用于打开项目的标准对话框出现。选择你要与当前项目进行比较的项目,按OK按钮,一个窗口打开,在这个窗口里显示比较的结果。被选项目的所有POUs排列成表,在每个POU的后面,你可以在括号中找到这个POU的更改信息、

有五个不同的信息:

在当前的POU中,这个POU不存在.

当前POU的说明语句部分与被比较的POU不同。

当前POU的说明语句部分以及实施部分与被比较的POU不同。

选择这一命令后,用于组态控制器的编辑器打开〔见5。9节〕。.

选择这一命令后,编辑全局变量的窗口打开(见5.10节〕.

选择这一命令后,库管理器窗口打开〔见5.11节〕.

选择这一命令后,任务组态编辑器窗口打开(见5.12节).

选择这一命令后,观测变量窗口打开(见5.13节).

选择这一命令后,定义采样跟综的窗口打开〔见5.14节〕.

如果你对怎样使用TWinCATPLC以及IEC1131-3语言元素有什么问题,可以请求,TWinCATPLC在线帮助。在这里你将找到这本手册的所有信息。你可以用两种不同方式使用Help.

键打开帮助对话框,该对话框向你提供实际所选标题〔关键词,菜单项,对话框等等〕的帮助。

TWinCATPLC的在线帮助(onlinehelp)与大多数Windows操作系统的在线帮助是一样的。所以,如果你有使用Windows操作系统的经验,那么可以跳过下面的内容.

使用这条命令,你进入TWinCATPLC在线帮助的首页。用鼠标器在一个绿色的有下划线的标题上单击一下,那么一个新的求助框打开,在这里有对这个标题的解释。仅仅用你的鼠标器击几下,你就将得到任何想要的信息.

TWinCATPLC的所有语言编辑器都由一个说明语句部分和一个语体部分组成。它们之间用一条分隔线分开。为了移动分隔线,用鼠标器在分隔线上单击按下,然后拖动,在移动时,你要始终按着鼠标键.

关键词KEYWORDS

在所有的TWinCATPLC编辑器中,关键词都要大写。

说明语句部分

在说明语句中,说明所有的变量。这些变量仅在这个POU中使用。说明语句的句法符合IEC1131-3的标准句法

举例说明TWinCATPLC编辑器中变量说明:

图5.1.1.说明语句编辑器

输入变量

在关键词VAR_INPUT和END_VAR之间说明所有的变量,它们作为输入变量使用。这就是说,在起动程序时,设置这些变量的数值.

输出变量

在关键词VAR_OUTPUT和END_VAR之间说明所有输出变量。在正调用的POU内,这些变量易受影响.

局部变量

在关键词VAR-END_VAR之间,说明所有局部变量。这些变量不能在POU以外使用。在POU内它们被说明.

TWinCATPLC支持下面基本的数据类型:

BOOL(8Bit),SINT(8Bit),USINT(8Bit),INT(16Bit),UINT(16Bit),DINT(32Bit),UDINT(32Bit),REAL(32Bit),STRING(variablelength),BYTE(8Bit),WORD(16Bit),DWORD(32Bit),TIME(32Bit),DATE(32Bit),DATE_AND_TIME(32Bit),TIME_OF_DAY(32Bit).

除此以外,TWinCATPLC支持一维,二维和三维数组。使用下面的句法说明一个二维数组:

<数组名>:ARRAY[..,..]OF<元素类型>.

lb1,lb2代表数组的下边界,ub1,ub2代表数组的上边界.

例如:

pack_of_cards:ARRAY[1..13,1..4]OFINT;

快捷键的扩展性能

在离线方式下,用+键退出一行,激活说明语句编辑器快捷键的扩展性能。

当输入说明语句时,使用下面的快捷键。

几乎一行的最后一个标识符是说明语句的变量名,说明语句的类型由一行的最后一个标识符来确定。

Fehler!Textmarkenichtdefiniert.BorBOOLBOOL

Fehler!Textmarkenichtdefiniert.IorINTINT

Fehler!Textmarkenichtdefiniert.RorREALREAL

Fehler!Textmarkenichtdefiniert.SorSTRINGSTRING

如果不能通过最后的标识符确定数据类型的话,则数据的类型为BOOL.最后的标识符有作为类型使用〔见下面的第一个例子〕。

Fehler!Textmarkenichtdefiniert.任何一个整数作为一个初始值或是一个字符串的字长。该字长取决于说明语句的类型〔第二和第三个例子〕.

Fehler!Textmarkenichtdefiniert.一个地址(%IX0.3)增加一个AT...修改量〔第四个例子〕.

-后面带一个分号(;)的文本是一个注释〔第三和第四个例子〕.

Fehler!Textmarkenichtdefiniert.在一行内的所有其他字符可被忽略〔例如:最后一个例子中的感叹号〕。

例子:

A

A:BOOL;

ABI2

A,B:INT:=2;

STS2;Thisisastring

ST:STRING(2);(*Thisisastring*)

X%MD12R5;realvalue

XAT%MD12:REAL:=5.0;(*realvalue*)

B!

B:BOOL;

说明语句编辑器中的行号

用离线方式,在某一行号上单击一下就标明整个一行。

用在线方式,假如变量是一个结构变量,则在某一行号上单击一下就扩大或压缩这一行的变量〔你可以用变量前面的菱形来辨别结构变量〕.

用这个命令,你得到用表格显示的说明语句编辑器,好像你在一个卡片索引箱中,可以选择输入变量,输出变量,局部变量和输入以及输出变量各自的卡片。

对每一变量,你可在下面的区域中输入如下内容:

Name:插入变量名

Address:插入变量地址(AT-说明语句)

Type:插入变量类型〔如果变量是一个功能块的状态,那么插入功能块〕。

Initial:插入变量的初始值〔类似于赋值运算符":="〕.

Comment:在这个区域里插入一个注释.

在说明语句中输入新变量

图5.1.2.表格式说明语句

地址〔Address〕,初始值〔Initial〕和注释〔Comment〕为可选项。一个正确的变量说明语句仅仅需要变量名和类型。在任何时候,你可以毫无问题地在变量的表格式和文本式之间进行转换。在线方式时,两种表达方式是相同的。

在线方式的说明语句编辑器

在在线方式时,说明语句编辑器成为一个监视窗口。每行有一个变量,后面是等号(=)和变量当前值。如果这个变量没有被定义,则显示三个问号().

每个多元素变量的前面是一个菱形,例如:

在菱形上双击鼠标扩展变量,在下面的例子中,结构变量BAND3和子结构变量TIMER被扩展如下:

如果一个变量被扩展,那么所有它的组成成分列表于下。变量前的变成单线菱形。在这个菱形上再双击键,则变量被压缩,菱形再次为填充菱形.

在单元素变量上双击鼠标,一个写变量对话框打开。在对话框中,可以改变变量值。

TWinCATPLC文本编辑器具有Windows文本编辑器中的常用功能。

下面的菜单命令专用于文本编辑:

图5.2.1:两个POUs文本〔InstructionList和StructuredText)的打开窗口.

显示在这个语言中可使用的运算符列表。如果选择其中一个运算符并用OK按钮关闭列表,则所选的运算符插在当前光标位置上。

用这条命令,你打开一个操作数帮助对话框,上面包含所有被定义的变量〔快捷键:〕.

图5.2.2:插入操作数帮助对话框。最后一行显示变量的注释.

显示所有可使用函数列表.你可以在其中选择标准的或用户定义的函数。如果选择其中一个函数,并用OK按钮关闭对话框,则被选择的函数插入到当前光标位置上。

显示所有可使用功能块列表.你可以在其中选择标准的或用户定义的功能块。如果选择了其中一个功能块,并用OK按钮关闭对话框,则被选择的功能块插入到当前光标位置上。

在线方式的文本编辑器

编辑器的在线功能是设置中断点和程序步。与监视相结合,用户就有了现代化的高级语言调试功能。

采用在线方式,文本编辑器窗口用一条垂线分成两部分。窗口的左侧是常用程序文本。另一侧是显示左侧所使用的变量以及它们的当前值。在每个多元素变量的前面是一个菱形。在菱形上双击鼠标键,则菱形被扩展或压缩。〔见监视窗口,5.12节〕.

使用这条命令,你可以用在线方式组态你的文本编辑窗口,你可以调整文本窗口的哪一部分留作监视变量,以及一行中两个监视变量之间的距离。距离1个单位等于所选字型的行高.

图5.2.3.MonitoringOptions对话框

中断点可被插在哪里

在IL中不是每一行都是中断点的位置.中断点的位置是在这样的行里。即在这些行的后面数值被改变或者程序的执行在这里出现分支。这些行是插入中断点的位置。

在IL中,我们有如下的中断点位置:

-一个POU的开头

-在每个LD,LDN上

-在每个JMP,JMPC,JMPCN上

-在每个CAL,CALC,CALCN上

-在每个RET,RETC,RETCN上

-在POU的结尾上

在ST中,我们有如下的中断点位置:

-在每个赋值语句上(:=)

-在每个RETURN和EXIT语句上

-

在WHILE,IFELSEIF,UNTIL语句中被赋值的条件句上

你可以用行号区的颜色来识别中断点的位置。它的颜色比其它行的颜色深,为黑灰色。〔见图3.2.2.〕.

怎样设置一个中断点

在一个行号区上单击鼠标来设置一个中断点。如果这一行是中断点位置,那么它的颜色由黑灰色变为青蓝色.在PLC中,中断点立即被激活。

删除中断点

在设置中断点的行号区上单击一下,则中断点删除。

当程序执行到中断点时,将发生什么

当用户程序执行到中断点上停止时,TWinCATPLC显示停止执行程序的POU和POU的中断行。

图5.2.4.有中断位置〔较黑的网络号区〕的IL编辑器

指令表IL是PLC的汇编程序语言。它易于理解,但属于低级语言。

IL编辑器是文本式编辑器。在IL中,使用下面的运算符和修改量:

修改量是:

CwithJMP,CAL,RET:如果前一个表达式的结果是TRUE,则执行指令.

NwithJMPC,CALC,RETC:如果前面的表达式结果是FALSE,则执行这条指令.

NwithAND,OR,XOR:最后操作数的非运算〔不是堆栈内容的非运算〕。

左括号修改量"("表明运算符的赋值推迟,直到遇到右括号")"。例如,指令的顺序

AND(%IX1

OR%IX2

)

被看作为:

result:=resultAND(%IX1OR%IX2)

IL运算符的完整内容列表如下:

运算符〔operator〕

修改量〔Modifiers〕

语义〔Semantics〕

LD

N

设置当前结果等于操作数

ST

把当前结果存到操作数位置上

S

如果并且只有当前结果为TRUE时,设置布尔操作数为TRUE

R

如果并且只有当前结果为TRUE时,设置布尔操作数为FALSE

AND

N,(

以位为单位“与”运算

OR

以位为单位“或”运算

XOR

以位为单位“与非”运算

ADD

(

加法

SUB

减法

MUL

乘法运算

DIV

除法运算

GT

>大于号

GE

>=大于等于号

EQ

=等于号

NE

<>不等于号

LE

<=小于等于号

LT

<小于号

JMP

C,N

跳向标号

CAL

调用功能块

RET

从被调用的功能块返回

推迟求值运算符

IEC的所有运算符列表可在附录中找到.

使用某些修改量的IL程序举例:

LDTRUE(*LoadTRUEintotheaccu*)

把TRUE装入累加器中

ANDNBOOL1(*executeANDwiththenegatedvalue*)

(*ofthevariableBOOL1*)

与BOOL1变量的“非”值进行“与”运算

JMPCend(*iftheresultwasTRUE,jump*)

(*tothelabel"end"*)

如果结果是TRUE,则跳到‘END’标号

LDNBOOL2(*Storethenegatedvalueof*)

STERG(*BOOL2toERG*)

把BOOL2的“非”值存入ERG中

end:

LDBOOL2(*Storethevalueof*)

把BOOL2的值存入ERG

流程控制:

在IL中,流程控制显示被执行程序行中累加器的值。

注意:只有激活窗口才能显示一个流程控制。在你的IL编辑窗口任一地方单一下,使窗口被激活。

结构化文本是IEC11313的一种高级语言。在某些方面类似于PASCAL语言,但是了解C语言的人对于理解这种语言也是没有问题的。

下面的定义来自IEC11313标准。如果你司惯于使用高级编程语言,那么只是看一看例子就行了。

结构化文本语言是一种结构式编程语言。这就是说,ST提供的某些结构应用于常用结构的编程,像循环或条件表达式。这种语言的优点是,程序出错率低,可读性高。

让我们看一个例子,比较两个程序,一个程序用ST编写,一个程序用IL编写,两个程序的作用相同。

用IL语言编写计算2的乘方的循环语句:

loop:

LDCounter

EQ0

JMPCend

LDVar1

MUL2

STVar1

SUB1

STCounter

JMPloop

用ST语言编写计算2的乘方的循环语句:

WHILECounter<>0DO

Var1:=Var1*2;

Counter:=Counter-1;

END_WHILE

Result:=Var1;

显而易见,用ST语言编写的循环语句比较短,易于理解。当你必须写一个需要许多执行控制(if..then,while,for)的程序时,则用ST语言编写,因为和其他语言相比,ST有很大的优点.

表达式

一个表达式是一个结构,在执行表达式以后,产生一个数值。

表达式由操作符和操作数组成。一个操作数可以是一个直接量,一个变量,一个功能的调用或者其它的表达式。

表达式的计算值

一个表达式的计算是由一序列操作符组成。操作符的计算顺序是由操作符的优先级确定。在一个表达式中,首先使用有最高优先级的操作符,接下来是使用有较低优先级的操作符。。。等等,直至完成整个表达式的计算。

具有相同优先级的操作符,其计算顺序是从左到右。

如果A,B,C,D是INT型变量,其值分别为1,2,3,4,那么,

A+B-C*ABS(D)

计算值为-9

(A+B-C)*ABS(D)

计算值为0

ST运算符列表如下:

Operation〔操作〕

Symbol〔符号〕

Precedence〔优先级〕

Parenthesis〔括号〕

(Expression)〔表达式〕

HIGHEST〔最高〕

Functionevaluation〔函数计算〕

Functionname(argumentlist)函数名〔自变量表〕

Exponentation指数运算

**

Negation“非”运算Complement补码运算

NOT

Multiply乘法

Divide除法

Modulo模数计算

*

/

MOD

Add加法

Subtract减法

+-

Comparison比较

<,>,<=,>=

Equality等于Inequality不等式

=<>

BooleanAND布尔“与”

BooleanXOR布尔“与非”

BooleanOR布尔“或”

LOWEST最低

ST语句表:

语句的类型

举例

赋值语句

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

功能块的调用和FB的输出

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

A:=CMD_TMR.Q

RETURN语句

RETURN;

IF语句

D:=B*B;

IFD<0.0THEN

C:=A;

ELSEIFD=0.0THEN

C:=B;

ELSE

C:=D;END_IF;

CASE语句

CASEINT1OF

1:BOOL1:=TRUE;

2:BOOL2:=TRUE;

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;

空语句

;

赋值运算

在一个赋值语句的左边是一个操作数〔变量,地址〕,在右边是一个表达式的值,赋值给操作数。

语法:

<操作数>:=<表达式>;

含义:

把表达式的结果赋值给操作数。

Var1:=Var2*10;

调用的功能块:调用功能块只是简单地写功能块的名称。你可以给功能块的输入参数写赋值语句并用括号括起来。输入参数赋值语句的顺序是可选择的。

(Input1:=,...,Inputn:=);

在下面的例子中,调用一个记时器,并给参数IN和PT赋值。然后将结果值Q赋值给变量A.

访问功能块结果值的方法是:写出功能块的名称,然后写一个点。再写变量名。

TheRETURN语句t

当程序执行到"RETURN"语句时,事实上,被执行的POU被放在一边。

把POU放在一边,然后回到调用它的地方。

下面的例子表示一个功能的第一条语句,该功能需要一个正的输入变量var1。

func:=FALSE;

IFvar1<0THEN

TheIF语句t

IF语句允许在一定的条件下执行某些表达式。.

IF<条件>THEN

<语句1>;

ELSE_IF<条件2>THEN

<语句2>;

.

ELSE_IF<条件n>THEN

<语句n>;

<语句n+1>;

TheELSE_IF分支是可选择的,ELSE分支也是可选择的.

如果〔条件〕是TRUE,那么执行语句1,如果条件是FALSE,而条件2是TRUE,那么执行语句2等等.如果没有条件是TRUE,那执行语句n+1。

IFtemp<17THEN

heating_on:=TRUE;

heating_on:=FALSE;

如果温度降到17度以下,加热器开关闭合,否则打开。ELSE分支是可选择的。通过使用ELSE_IF,你可以组合几种条件.

TheCAS语句

用一个CASE语句,可以把几个条件语句与一个相同的条件变量结合起来成为一个结构.

CASEOF

<数值1>:

<数值2>:

...

<数值n>:

;

ELSE语句是可以选择的。数值1函数值n必须是变量Var1的常数.除字符串和BOOL以外任一类型都可以。

如果的值是<数值i>,那么<语句i>被执行。如果没有给出值,那么被执行.

如果几个数值有同样的语句,那么这些数值可被组合起来,用,号分开.

1,5:BOOL1:=TRUE;

BOOL3:=FALSE;

2:BOOL2:=FALSE;

BOOL3:=TRUE;

BOOL1:=NOTBOOL1;

BOOL2:=BOOL1ORBOOL2;

FOR循环语句

如果一个语句必须要重复几次,那么你可以使用循环语句。而不用跳跃句。ST语言提供了三种不同的循环语句。如果事先已确定重复的次数,那么使用FOR语句,否则,使用WHILE或REPEAT语句.

FOR:=TOBYDO

<语句>;

Index必须是一个ANY_INT类型的变量,consts是整数常量.

Index_Var初始值是CONST1.在关键词TO后边,确定了Index_Var变量的上限值,当Index_比CONST2值大时,停止循环.

在关键词BY后面,确定了记数器的增量值,在每次执行语句以后,Index_Var的增量为这一数值。缺省增量值为1,因此,在下面的例子中,可省去"BY1".

在关键词DO的后面是将被执行的语句。每次执行完这些语句后,检查Index_Var是否仍然小于等于CONST3值。.

关键词END_FOR结束FOR循环语句.

例子:

使用FOR循环语句,计算2的乘方的运算例子可编程如下:

FORCounter:=1TO5BY1DO

考虑到Var1的初始值为1.在FOR语句执行完以后,Var1的值将为32.

注意:循环语句是一个非常危险的结构。它易于使程序进入死循环,为了找出这样的错误,用模拟方式运行你的程序,TWinCATPLC将向你显示出哪里有一个死循环程序。死循环的含义是:IndexVar永远不能达到CONST3值。设想这样一个循环语句,Index-Var的增量为1,而其中一个语句使它减少1.

WHILE循环语句

在关键词WHILE与END_WHILE之间有一序列语句。这些语句反复被执行,直到有关的布尔表达式为FALSE.如果表达式的初始值为FALSE,那么这组语句根本不能被执行.

WHILE<条件>DO

END_WHILE;

只有条件为TRUE时,语句才能被执行.

关键词WHILE的后面是一个可执行的条件,在上面例子中Counter与0进行比较,只要counter不等于0,那么在DO与END_WHILE之间的所有语句被执行.

注意:必须注意条件有时变为FALSE。否则,循环语句将不停地执行。用TWinCATPLC模拟方式,你可以很容易地找出这样的循环语句。这时模拟方式停止,并告诉你出错信息WATCHDOG.通过调用堆栈,你找到程序被挂起的地方。

TheREPEAT循环语句

REPEAT循环语句与WHILE循环语句相同。所不同的是被检查的条件放在最后。在执行循环语句以后,赋值给REPEAT循环语句的终止条件。即,既使条件的初始值为FALSE,但循环语句也被执行一次.

<语句>

UNTIL

<条件>

关键词REPEAT和UNTIL之间的语句一直被执行,直到UNTIL后面的条件被赋值为FALSE.

Counter=0

注意:必须注意REPEAT循环语句不能无限地重复执行。因此,你必须写一个语句,在这个语句中,条件不断更新.比如:一个记数器必须用语句表中的一个特殊语句不断使其更新。然后要再次使用模拟方式检查循环。

TheEXIT退出语句

EXIT语句放在一个循环语句中,使最里面一层的循环语句终止,而不考虑条件。

在某一点上终止里面一层的循环语句:

IFVar1>1000000THEN

流程控制〔FlowControl〕

在ST中,流程控制显示最后的PLC周期所执行的程序行。

注意:只有激活的窗口才能显示流程控制.在你的ST编辑窗口上的任一栏单击一下,使窗口激活。

在这一章中,我们集中讨论两种图形语言LD(梯形图)和FBD(功能块图)的共有性能.

网络

用FBD或梯形图编写的POUs是由网络组成的。所谓网络是用线连接起来的模块和操作数的集合。POU从第一个网络开始执行,并且如果程序没有跳转,则程序从网络X到网络X+1顺序执行.

标号

网络中的注释

比如,如果最小的行数调整为2,那么每个网络在标号的后面有两行空的注释行。这个选项的缺省值为0,它的优点是在屏幕上可以看到较多的网络。

插入网络

当前网络

在线方式的图形编辑器

在FBD和LD中,中断点仅可以设置在网络上。如果一个中断点设置在一个网络上那么这个网络号区显示为青色。在执行网络以前,程序中止。网络号区的颜色变为红色。程序的执行采用从网络到网络的步进方式.

用FBD编写的一个POU:

图5.6.1用FBD编写的一个POU

FBD编辑器是一种图形编辑器,工作对象是网络表。所谓网络是一种被连接的结构,它由逻辑和算术表达式,功能,跳转和返回语句组成(见图5.6.1.).

网络中的光标位置,键盘接口

光标位置

任何一个文本都是一个可能的光标位。文本的选择用蓝色背景作为标记.

否则光标位用虚线框重新标记。

接下来,你可以看到一个所有光标位的列表:

1)任何文字(用黑色框围住):

2)任何输入:

3)任何运算符,功能或功能块:

4)输出,如果一个赋值或一个跳转如下所示:

5)在一个赋值,一个跳转或一个返回的上方的一点:

7)恰好在赋值前的一点:

怎样设置光标

用鼠标点一下或使用光标键可设置光标。使用光标键,沿着所需的方向选择下一个光标位。用这种做法,任何可能的光标位都能达到。如果选择最后光标位,你可以用”光标上“和”光标下”键把光标移动到上面网络的最后光标位。或下面网络的最后光标位。

为了逐渐习惯正确的光标位,在开始使用TWinCATPLCFBD时,建议使用键盘接口。.

插入元素

一个空网络仅含有一个操作数TRUE。用鼠标在这个TRUE的右侧击一下,则最后的光标位被选择.

插入一个赋值一个跳转或一个返回语句

插入的地方取决于所选择的位置。即在所选的输入的前面,所选的输出的后面,所选的交叉线的前面或在网络的末端。

插入一个运算符

被插入的运算符总是一个AND运算符,通过选择和输入想要的新的运算任,来修改所插入的运算符。使用〔F2〕键,你得到一个所有运算符的列表。如果新的运算符较少的输入端,则删除多余的输入端和所有被连接的支线。

如果被插入的运算符左侧有一条支线,则这条支线与第一个输入连接。如果被插入的运算符右侧有一条支线,则这条线与输出连接。未被连接的所有新的输入端与TRUE值连接。像网络中的任何其它文本一样,这个TRUE值可被改为所需要的值。

在2)的光标位置上,被选择的运算符,函数或功能块将被改为AND运算符。输入端的数量至少为2。所有大于2的原有输入端不能被去除。

插入函数或功能块

完成插入的方法与插入运算符的方法相同,包括直接输入和输出。如果被插入的功能块是有一条支线,则该支线与第一个输出连接,与其他的输出端不做连接。

插入一个输入

插入一个输出

为了在一个已有的赋值句中插入一个另外的赋值句,选择赋值变量前的一点,赋值句上方的交叉线,或赋值句前的一个输出.

赋值变量名是result,你必须将它改为实际变量名。

输入的“非”运算

剪裁,拷贝,粘贴,删除

否则,左侧的所有支线将被剪贴板中的内容所代替。

注意:你可以很容易地改变与方框相连的输入的顺序。

在线方式的功能块图

在FBD中,中断点公能设置在网络上。如果一个中断点设置在一个网络上,那么这个网络号区显示为青色,当程序执行到有中断点的网络时,程序停止执行。这时网络号区的颜色变为红色.

功能块图中使用的所有变量值在与变量相邻的一个文本区中显示。这些值并不是执行相应运算以后变量的值,而是控制周期被执行以后变量的值。

图5.8.1.用LD编写的POU

LD中的光标位置

在下面你可以看到所有可能的光标位置表。调用功能块和程序如同对待触点那样.

1.任何文本(用黑色椭园形围起)

2.每个触点或功能块

4.线圈和触点之间的连接线.

下面是梯形图编辑器的特殊菜单命令.

用这个命令,一个新触点插到所选位置的前面。触点的缺省值是TRUE。你可以选择这个值并把它改为所需要的变量或常量.

在梯形图编辑器中,可将并联的触点插到所选位置的下方。如果选择了一个线圈或线圈与触点之间的连线,那么所插入的新触点与整个触点网络并联连接。新触点的缺省值是TRUE,你可以选择这处触点的文本并把它改为正确的变量或常量.

把用于选择功能块或程序的对话框打开。从对话框中,你可以选择标准的POUs或用户定义的POUs.

被插入的新的POU相当于一个新触点,新功能块或程序的第一个输入与输入连接线相连,程序的第一个输出与输出连接线相连。这些输入输出的参数必须是BOOL型。所有其它输入输出的缺省值是TRUE。你可以选择这些缺省值,把它们改为正确的变量,地址或常量。

把一个线圈插入梯形中。如果当前的选择是整个网络,那么线圈插到最后一个线圈的下方,如果是选择了另一个线圈,那么新线圈插到所选线圈的上方。如果选择了一个触点,那么不能执行这个命令。新线圈的缺省名称是“out”。必须修改这个名称。

带一个使能输入端的LD部件

一个带使能输入的运算器,功能块或功能其作用如同不带这一特殊输入的部件一样.所不同的是,这种部件的运算是受使能输入端控制的。使能输入端连接到线圈与触点之间的连线上。当这一连线传输的信息为ON时,使能部件开始运算。

一旦一个使能部件插入到梯形图中,如同FBD一样,可以从这个部件开始开发网络。

使用这个命令,带使能输入端的运算行到LD网络中,新的运算器并联连接到线圈下面,并用AND作为标号.你可以更改这个名称代之为所需要的名称。

选择这个命令以后,一个对话框打开,如果你想要插入一个标准功能块或程序或者一个自定义功能块或程序,那么你可以在对话框中进行选择。从合适的表中选出想要的部件。做出选择以后,用OK按钮关闭对话框。一个新的部件并联插入到线圈的下方.

选择这个命令以后,一个对话框打开,如果你想要插入一个标准函数或自定义函数,那么你可以在对话框中进行选择。从合适的表中选出想要的部件。做出选择以后,用OK按钮关闭对话框。一个新的函数并联插入到线圈的下方.

用这个命令,你可以把一个新的部件与一个已有的部件相连接。执行这个菜单项下的命令,其光标位置与FBD(见5.7节)中的相应命令的光标位置相同.

用Input命令,一个新的输入加到部件上.

用Output命令,一个新的输出加到部件上。

用Operator命令,一个新的运算器插在部件上。运算器的输出与所选择的输入相连接.

用Assignment命令,赋值给所选择的输入或输出.

用Function命令,一个对话框打开,从自定义或标准功能表中选择一个功能。新的功能与选择的输入相连接。

用FunctionBlock命令,一个对话框打开,从自定义或标准功能块〔或程序〕表中选择功能块。新的功能块与选择的输入相连接。

如果跳转的输入状态为“ON”,则执行跳转命令。

一个返回可以插到3,4,的光标位置上。返回插到线圈的下面.

如果返回的输入状态为“ON”,则在这个网络上将使POU中断执行。

用这条命令,剪贴板上的内容插到所选部件的右侧。所选部件的输出与插入部件的输入相连接。如果剪贴板上的内容和所选部件上的内容由触点组成,才可执行这条命令.

用这条命令,剪贴板上的内容并联插到所选部件的下方.如果剪贴板上的内容和所选部件上的内容由触点组成,才可执行这条命令。

用这条命令,剪贴板上的内容并联插到所选部件的上方。如果剪贴板上的内容和所选部件上的内容由触点组成,才可执行这条命令.

用这条命令,当前光标位置上的触点和线圈进行“非”运算。在线圈的括号之间,触点的垂直线之间出现一条交叉线(()或|/|).如果当前的光标位置在触点和线圈之间的连线上,则不执行这条命令.

一个“非”运算线圈拷贝与布尔变量有关的左侧连接线的“非”运算值。如果一个和“非”运算触点有关联的布尔变量的值是FALSE,那么这个“非”运算触点拷贝从左侧连接线到右侧连接线的数值。

在一个普通线圈〔不做“非”运算〕上执行这条命令,你得到一个置位线圈。一个置位线圈不能改变有关的布尔变量的TRUE值。这就是说,如果这个变量值一旦变为TRUE,那么线圈保持为TRUE状态。一个置位线圈符号“S”表示.

在一个做“非”运算的线圈上执行这条命令,你得到一个复位线圈。一个复位线圈不能改变有关的布尔变量的FALSE值。这就是说,如果这个变量值一旦变为FALSE,那么线圈保持为FALSE值,一个复位线圈用线圈符号”R“表示。

在一个置位或一个复位线圈上执行这条命令,则线圈分别为普通线圈和做”非“运算的线圈。

在线模式下的LD

在线模式时,所有连接线和状态为ON的所有触点和线圈用青色显示。功能块的输入和输出显示相应的变量值.

在网络上可以设置中断点。从网络到网络完成步骤操作。

在LD中,中断点仅可以设置在网络上。如果一个中断点设置在一个网络上,则网络号区显示为青色。当程序到达中断网络时,停止执行。在这种情况下,网络号区的颜色变为红色。程序采用从网络的方式完成步进操作。

图5.10.1.用SFC编写的一个POU和其中的一个动作

作为编程语言的顺序功能流程图主要在第二章中描述。SFC的编辑器必须支持SFC的特征。因此,下面的菜单命令对SFC来说是特殊的:

MenuInsert

Selections

通过在元素上移动光标并击一下鼠标的左键,或者使用光标键,你可以选择一个元素〔一个步,一个转换或一个跳转〕.

+鼠标键在上次所选的元素和最新所选的元素周围选择一个区。

如果编好的程序符合语法,那么下面的命令才能被执行。

Step-Transition(before)

在所选择的方框前插入一个步骤,其后是一个传送。被选择的方框必须有一个传送作为被取代的对象.

Step-Transition(after)

在所选方框内的第一个传送的后面,插入一个步骤和一个传送。被选择的方框必须从一个传送开始。

Transition-Step(before)

在所选择的方框前插入一个传送和一个步骤。被选择的方框必须有一个步骤作为被取代的对象。

Transition-Step(after)

在所选方框内的第一个步骤的后面插入一个传送和一个步骤。被选择的方框必须从一个步骤开始.

AlternativeBranch(right)

插入一个选择分支作为被选方框的右分支。所选择的方框的开始和结尾必须是一个转换。新的分支由一个传送组成。

AlternativeBranch(left)

插入一个选择分支作为所选方框的左分支。所选择的方框的开始和结尾必须是一个传送。新的分支由一个传送组成。

ParallelBranch(right)

插入一个并联分支作为所选方框的右分支。所选择方框的开始和结尾必须是一个步骤。新的分支由一个步骤组成。

ParallelBranch(left)

插入一个并联分支作为所选方框的左分支。所选择方框的开始和结尾必须是一个步骤。新的分支由一个步骤组成。.

Jump

把一个跳转插到所选方框的某个分支的末端。该分支必须是一个选择分支。

Transition-Jump

插入一个传送,其后是一个位于所选择分支末端的跳转。该分支必须是一个并联分支。

MenuExtras

PasteParallel(right)

插入剪贴板的内容,作为所选择的方框右边的并联分支。因此,所选择方框的开始和结尾必须是一个步骤。剪贴板的内容必须是一个SFC方框,该方框的开始和结尾必须是一个步骤。

Pasteafter

在所选择方框的第一步骤或第一个传送的后面,插入剪贴板中的SFC方框〔通常的粘贴是把它插在所选择方框的前面〕。如果编好的程序结构是一个语法正确的SFC结构,那么才能执行此项命令。

ZoomAction/Transition

把所选择方框的第一步骤的动作或第一个传送的文体装入合适的编辑器中,如果该动作或传送文体的内容是空的,那么必须选择对它们进行编程的语言.

对于一个已经编好程序的动作,用动作方框内右上角的黑三角表示。

对于已有转换文体的一个转换,用转换位置上连线左侧的黑三角表示。

ClearAction/Transition

所选择方框的第一步骤动作或第一个传送的文体被清除。

表示一个动作或一个传送文体存在的黑三角被移去。

StepAttributes

为了执行这条命令,你必须选择一个步。选择这个命令以后,一个对话框打开,在对话框中你可以编辑所选择的步的属性。

图5.10.2.编辑步的属性对话框

SFC标记

SFCInit:这个变量的类型是BOOL。当它为TRUE时,在Init-step步骤上,SFC-POU被复位。只要这个变量是TRUE,那么这一步就一直处于激活状态。

SFCError:当发生超时,这个BOOL型变量被设置。

SFCErrorStep:这个变量的类型是字符串(STRING).当一个POU发生超时,则把这个POU的名称存入该变量中。

只要把变量SFCError复位为FALSE,那么当发生一次超时,则不被记录.

图5.10.4.SFC中的TimeLimitOverview图

Options

选择这一命令后,一个对话框打开。在对话框内,你可以为你的SFC-POU设定几个选项.

图5.10.5.SFC-Options对话框

在线方式的SFC

中断点

如果存在一个以上的激活步骤〔在并行分支中,程序分路执行〕,那么下次被执行的动作步骤用红色表明.

图5.10.6.有激活步(Parallel1andParallel2),在线方式下的SFC

PLC组态(PLC-Configuration)依赖于被组态的硬件。使用PLC-Configuration,一个IEC地址和它在控制器中的地中被离线赋值。

编辑全局变量

全局变量必须在关键词VAR_GLOBAL和END_VAR之间进行说明。全局变量可以在整个项目中被使用。

保持性全局变量

保持性全局变量是指它的值不能重新初始化的一种变量.

该全局变量必须在关键词VAR_GLOBALRETAIN和END_VAR之间加以说明。

VAR_GLOBALRETAIN

(*变量说明语句*)

END_VAR

全局常数

下面的格式用于定义全局常数:

VAR_GLOBALCONSTANT

DOKUFILE

VAR

GLOB1

COMMENT

GLOB2

GLOB3

GLOB4

BG1

图5.10.1一个docuframe-file文件的摘录

TWinCATPLC的库管理器:

图5.13.1.库管理器

在比较前面的图中,你可以看到标准库POULIMIT的参数.

标准库

用户定义的库

怎样连接一个库

使用库管理器

库管理器窗口被分成四部分(见图5.11.1).在左上角中,你可以看到与项目连接的所有库的一个列表。在左下角中,你可以找到你选择的库的POUs整个的一个列表。在右侧是所选择的POU的接口。右侧的上部分与说明语句编辑器中的标记相同,下部分用一个黑色信箱表示。

怎样删除一个库

观测窗口是一个显示变量值的特殊窗口.

离线方式的观测窗口

在观测窗口中,插入变量的标记如下表示:

.<变量名>

全局变量不用一个POU的名称来说明。各种结构变量〔结构,数组〕也可以被输入到观测窗口中,地址可以直接插入.

一个结构化变量的例子:

PLC_PRG.Instance1.Instance2.Structure.Component

一个全局变量的例子

.Global.component1

帮助管理器

在线观测窗口

图5.14.1.在线方式的观测窗口

强迫赋值

在观测窗口中,你可以对变量强行赋值。如果你在相应的变量名上击一下,那么一个对话框打开,在这个对话框中,你可以插入一个变量值。TWinCATPLC检查这个新值是否与说明语句的限制不一致。若不一致,则去除这个数值。在观测窗口中,被改变的变量用红色显示。

什么是采样跟综

怎样起动采样跟综

跟综组态:

图5.15.1:TraceDefinition对话框

插入跟综变量

最初,跟综变量表是空白的,为了插入一个变量,你必须把变量写入表的下方区域中,然后按"Add"按钮,这样,变量就被插入进去.

在跟综定义对话框中,一个插入变量的标记表示如下:

为了从表中删去一个变量,则选择该变量,然后按"Delete"按钮.

停止跟综

在图5.15.1.定义跟综500个数值,并在对话区"PercentageofValuesrecordedafterTrigger"中输入50%.这就是说,在触发事件发生之前,250个数值将被记录下来,而在触发事件发生之后,记录250个数值。

键打开帮助管理器。它与观测窗口中的管理器相同.

跟综定义中的所有设置与项目一起被保存。

起动和装入跟综Trace:

把跟综组态装控制器中,该组态保留在控制器里,直到完成跟综或跟综停止.

这个命令用于起动PLC中的跟综、

这个命令用于当前的跟综缓冲存储器加载。显示变量值。

停止控制器中的跟综。在执行新的跟综之前,必须下装跟综定义并起动跟综、

选择被显示的变量

在跟综窗口左侧的组合箱允许从跟综组态中所定义的变量表中选择出最多5个变量.

这些变量的跟综曲线将被显示。可以插入新的变量,即使已经有显示的曲线。

采样跟综图

图5.15.2.触发器变量为%IX4.1的五个不同变量采样跟综图

Y轴代表变量值。变量的最高值和最低值限定了最大和最小的比例数。例如,在图5.15.2.中,变量Var3的最低值是-50,最高值是500。

一个已读的缓冲存储器一直保留,进到项目被改变成系统离线。

缺省选择是多通道(multichannel)。跟综窗口被分割成最多5个部分。每一部分用于一条跟综曲线。曲线的最高值和最低值显示在左侧。图5.15.2示出了一个多通道的例子.

用这条命令,你可以改变系统的Y轴比例。打开一个对话框,在对话框中你可以改变Y轴上的旧的最低值和最高值.

.保存跟综组态并把实际装入的跟综映象到一个文件中。

装入一个文件的跟综组态和跟综映象。

用这条命令,你可以把你的跟综映象输出到一个ASCII文件中.曲线的数值被列成表,用逗号分开。这个文件可以用其他的工具装入(如.MathCad).

TWinCATPLC允许对1131-3IEC任务进行定义.

当使用任务时,不要使用MAIN,因为MAIN的定义将不再是你的程序的入口点。

定义一个任务

图5.16.1:任务定义对话框

有三种不同的任务类型:

附加POUs

你也可以把全局功能状态与一个任务甚至是传递的参数相连接。

图5.16.2:有一个周期任务和一个事件任务的任务组态

在你的配置上,TWinCATPLC设置了一个可视化图形工具。由于有了这个工具的支持,你可以画离线的几何图形目标。这些目标在在线方式下,根据某个项目的变量值而改变形状。

图6.1一个可视化图形的例子

例如,如果你想要显示某一变量的增长情况,你可以画一个矩形,根据变量值这个矩形增大或缩小.

为了做一个可视化图形,你必须在目标种类选择组合箱〔目标表上方的区域〕中选择可视化。

插入新的元素

现在,在可视化图形窗口上击一下,并按住鼠标器上的左键移动鼠标,直到目标为想要的尺寸.

在一个已被插入的元素上击一下,那么这个元素就被选择。按住鼠标器上的左键所选的元素就被移动。

在元素的边缘上出现小的黑色正方形〔在周围的矩形边比上,园有这些正方形〕。在右下方的正方形上点一下,按住鼠标器上的左键移动鼠标,那么你可以改变元素的尺寸.

编辑可视化图形元素

在一个可视化图形元素上双击鼠标键以后,你得到下面的多元素对话框:

图6.2.:编辑可视化图形元素的多元素对话框

你的目标可以有下面的功能:

颜色和颜色的变化

当为在线方式时,只要变量保持为FALSE,那么你的目标将是正常颜色,而如果变量是TRUE,那么你的目标将是报警颜色。

在线方式下改变形状

你可以为你的目标的上、下、左、右边缘输入变量。这个边缘将按照有关的分配变量〔每单位一个图象元素〕移动。

用下面的方法输入变量:

.<变量名称>

在全局变量前加上一个点。.

.GlobVar

输入一个变量的最简单方法是使用功能键,并从列表中选出变量.

显示一个变量的值

双向布尔变量

在Input箱中,你可以定义是否能用鼠标器进行输入.

缺省的选择是Noinput,这样,用鼠标器在可视化图形元素上击一下,不执行任何动作。

改变一个模拟变量的值

定义变量的方法见“显示一个变量值”一段中的描述。如果在线方式选择变量值,那么对于输入新值,你得到一种编辑控制,当离开这种编辑控制时,这个新值就被写进去。

放大成另一个可视化图形

如果选择了输入对话框中的放大可视化图形一栏,那么你必须在其后的区域中插入一个可视化图形的名称。在线方式下,当在目标上单击鼠标时,那么含有这个可视化图形的窗口打开。

用这条命令,一个被选择的可视化图形元素放到前景。

.用这条命令,一个被选择的可视化图形元素放到背景。

用这条命令,一个用于打开文件的对话窗口出现,选择扩展名为*.bmp的文件。被选择的bitmap图出现在你的可视化图形的背景上。

用这条命令,你可以删除一个背景的bitmap图.

TWinCATPLC有一个用于读数据的DDE(动态数据交换)接口,通过这个接口,TWinCATPLC向其它应用系统提供控制器变量的内容和IEC地址。其它应用系统也有一个DDE接口.

激活DDE接口

数据的寻址

一个DDE请求由三部分组成,程序名(TWinCATPLC),文件名和将被读出的变量名:

程序名:TWinCATPLC

文件名:你想要读的程序的全路径(例如:C:\example\example.pro).这个文件名必须确实与TWinCATPLC状态行中显示的文件名相同.

变量名:变量名与它们插到观察窗口中的变量名相同.

什么变量可以被读出

可以读出所有的地址和变量。变量和地址的说明语句与观察窗口中的说明语句相同。举例:

%IX1.4.1//读输入变量PLC_PRG.test//读POUPLC_PRG的test变量.GlobVar1//读全局变量GlobVar1

用WORD连接变量

为了在WORD中得到POUPLC_PRG的TEST变量现行值,必须插入一个区,(InsertField).该区必须有下面的文本:

{DDEAUTOTWINCATPLC"C:\\TWINCATPLC\\PROJECT\\IFMBSP.PRO""PLC_PRG.TEST"}

连接的结果是:

Type:TWINCATPLCSourcefile:C:\TWINCATPLC\PROJECT\IFMBSP.PROElement:PLC_PRG.TEST

用Intouch访问变量

使用应用名TWinCATPLC和标题名C:\WINCAPLC\PROJECT\IFMBSP.PRO对你的项目定义一个DDE存取名.现在你可以用存取名定义DDE类型的变量。作为项目名,你必须插入变量名称(在我们的例子中,变量名称是MAIN.TEST).

TWinCATPLC中的所有动作都可以通过操作键盘来执行。为此,你必须使用某些键盘命令,这些命令你在菜单中是找不到的。

-用制表键TAB,使你在对话框中从窗口的一部分转换到另一部分.

所有其它的动作可以通过使用菜单命令来完成,或者使用某个快捷键,你可以在菜单选项的后面找到快捷键.

TWinCATPLC支持所有的IEC运算符。与IEC标准POUs相对照,这些运算符为编程系统所熟知.在POU的文体中,运算符像功能那样被使用。在附录A中,你可以找到一个列表,上面是所有被支持的运算符。

加法运算,变量类型为BYTE,WORD,DWORD,INT,DINT和REAL.

用IL语言编程举例:

ADD2,4,7

STvar1

用ST语言编程举例:

var1:=7+2+4+7;

用FBD语言编程举例:

乘法运算,变量类型为BYTE,WORD,DWORD,INT,DINT和REAL.

MUL2,4,7

var1:=7*2*4*7;

用FBD语言编程举例:

减法运算,变量类型为BYTE,WORD,DWORD,INT,DINT,REAL

SUB8

var1:=7-2;

除法运算,变量类型为BYTE,WORD,DWORD,INT,DINT,REAL.

LD8

DIV2

var1:=8/2;

模数除法运算,变量类型为BYTE,WORD,DWORD,INT,DINT,REAL

LD9

MOD2

STvar1(*Resultis1*)

var1:=9MOD2;

以位为操作数的“与”运算。操作数必须是BOOL,BYTE,WORD或DWORD类型。

Var1:BYTE;

LD2#1001_0011

AND2#1000_1010

STVar1(*结果是2#1000_0010*)

Var1:=2#1001_0011AND2#1000_1010

以位为操作数的“或”运算。操作数必须是BOOL,BYTE,WORD或DWORD类型。

OR2#1000_1010

STVar1(*结果是2#1001_1011*)

Var1:=2#1001_0011OR2#1000_1010

以位为操作数的”或非”运算。操作数必须是BOOL,BYTE,WORD或DWORD类型。

XOR2#1000_1010

STVar1(*结果是2#0001_1001*)

Var1:=2#1001_0011XOR2#1000_1010

以位为操作数的“非”运算。操作数必须是BOOL,BYTE,WORD或DWORD类型。

STVar1(*结果是2#0110_1100*)

Var1:=NOT2#1001_0011

所有的选择函数也可以用在变量上,在下面的例子中,我们用常数作为运算数。

SEL

二进制选择.

OUT:=SEL(G,IN0,IN1)含义是:

OUT:=IN0ifG=FALSE;

OUT:=IN1ifG=TRUE.

IN0,IN1和OUT可以是任何类型的数,G必须是BOOL类型,选择的结果是:如果G是FALSE,那么选择IN0,如果G是TRUE,那么选择INI。

LDTRUE

SEL3,4

STVar1(*结果是4*)

LDFALSE

STVar1(*结果是3*)

MAX

扩展最大值功能。结果值是两个数值中的最大值。

OUT:=MAX(IN0,IN1)

IN0,IN1和OUT可以是任一类变量.

LD90

MAX30

MAX40

MAX77

STVar1(*结果是90*)

MIN

最小值功能。结果值是两个数值中的最小值.

OUT:=MIN(IN0,IN1)

IN0,IN1和OUT可以是任一类型变量.

MIN30

MIN40

MIN77

STVar1(*结果是30*)

LIMIT

限制器.

OUT:=LIMIT(Min,IN,Max)含义是:

OUT:=MIN(MAX(IN,Min),Max)

Max是最大值,Min是最小值.如果IN比Max大,该功能的结果值是Max。如果IN比Min小,那么LIMIT功能的结果值是Min.否则,结果值是IN。

IN,Min,Max和OUT可以是任一类型变量。

LIMIT30,80

STVar1(*结果是80*)

MUX

多路复用器.

OUT:=MUX(K,IN0,...,INn)含义是:

OUT:=INK.

IN0,...,INn和OUT可以是任一类型变量.K必须是BYTE,WORD,DWORD,INT,DINT类型的值。MUX的结果是在一组数值中产生一个第(K+1)的值.

MUX30,40,50,60,70,80

大于.

如果第一个操作数比第二个操作数大,则布尔运算的结果是TRUE,操作数的类型可以是BOOL,BYTE,WORD,DWORD,INT,DINT或REAL.

LD20

GT30

STVar1(*结果是FALSE*)

VAR1:=20>30

小于.

如果第一个操作数比第二个操作数小,则布尔运算的结果是TRUE。操作数的类型可以是BOOL,BYTE,WORD,DWORD,INT,DINT或REAL.

LT30

STVar1(*结果是TRUE*)

VAR1:=20<30

小于等于.

如果第一个操作数比第二个操作数小或者等于第二个操作数。则布尔运算的结果是TRUE。操作数的类型可以是BOOL,BYTE,WORD,DWORD,INT,DINT或REAL.

LE30

VAR1:=20<=30;

大于等于.

如果第一个操作数比第二个操作数大或等于第二个操作数,则布尔运算的结果是TRUE。操作数的类型可以是BOOL,BYTE,WORD,DWORD,INT,DINT或REAL.

GE20

VAR1:=20>=20;

等于.

如果操作数相等,那么布尔运算的结果是TRUE。操作数的类型可以是BOOL,BYTE,WORD,DWORD,INT,DINT或REAL.

LD40

EQ40

VAR1:=40=40;

不相等.

如果操作数不相等,那么布尔运算的结果是TRUE。操作数的类型可以是BOOL,BYTE,WORD,DWORD,INT,DINT或REAL.

NE40

VAR1:=40<>40;

ADR

地址函数

ADR对一个变量类型为DWORD的自变量返回一个地址。这个地址可被传送到用户函数中,在那里,它们将作为地址指示器。

LDvar1

STvar2

man_fun1

调用一个功能块

在IL编程语言中,用CAL调用一个功能块。在功能块状态名称后的括号内可以

赋值给输入参数。

举例:调用一个功能块的状态Inst.参数Par1,Par2分别被赋值为0和TRUE。

CALINST(PAR1:=0,PAR2:=TRUE)

(也可参见2.1节.)

TWinCATPLC支持所有的IEC标准函数。与运算符不同的是系统并不知道这些标准函数。为了使用标准功能项目与标准库standard.lib相连接.

把较大"larger"类型转换成较小"smaller"类型是绝对不可能的。(例如INT转换成BYTE或DINT转成WORD).

为了做到这一点,你必须使用特殊的类型转换功能。转换字符串是不可能的。转换成较大"larger"或相等大小的类型是完全可以做到的(例如INT转成WORD或INT转成DINT).

DINT_TO_INT

从DINT类型转换为INT类型.

让变量Var1的类型为DINT,而变量Var2的类型为INT。编程如下:

STVar2

DINT_TO_BYTE

从DINT类型(或说较小类型"smaller")转换成BYTE类型.

让变量Var1的类型为DINT,变量Var2的类型为BYTE.那么有如下程序:

INT_TO_REAL

从INT类型转换成REAL类型.

LD2

MUL3.7

REAL_TO_INT

从REAL类型转换成INT类型.

REAL_TO_INT(1.5)等于2.

REAL_TO_INT(1.4)等于1.

LD2.7

GE%MW8

TRUNC

TRUNC(1.9)等于1.

TRUNC(-1.4)等于1.

ABS

绝对值

ABS(-2)等于2

SQRT

平方根

操作数的类型必须是REAL(参见INT_TO_REAL).

LN

自然对数

LOG

以10为底数的对数

EXP

自然指数

SIN

用弧度表示的正弦值

COS

用弧度表示的余弦值

TAN

用弧度表示的正切值

ASIN

主弧正弦值

ACOS

主弧余弦值

ATAN

主弧正切值

EXPT

指数:OUT=IN1IN2.OUT,IN!和IN2"的类型可以是BYTE,WORD,DWORD,INT,DINT,REAL.

EXPT2

STvar1(*结果是49*)

var1:=7EXPT2;

下面的函数采用FBD功能块的表达方式来给予说明,在TWinCATPLC的库管理器中,你可以得到同样的表达式.

SHL

向左移位:A:=SHL(IN,N)

A,IN和N的类型必须是BYTE,WORD,DWORD.IN向左移动N位,右面空位用0补充.

LD1

SHL1

STVar1(*结果是2*)

SHR

向右移位:A:=SHR(IN,N)

A,IN和N的类型必须是BYTE,WORD,DWORD.IN向右移动N位,左面空位用0补充.

LD32

SHL2

STVar1(*结果是8*)

ROL

向左旋转移位:A:=ROL(IN,N)

A,IN和N的类型必须是BYTE,WORD,DWORD.IN向左旋转移动N位。

ROL3

STVar1(*结果是2#1001_1100*)

ROR

向右旋转移位:A:=ROR(IN1,N)

A,IN1和N的类型必须是BYTE,WORD,DWORD.IN向右旋转移动N位.

ROR3

STVar1(*结果是2#0111_0010*)

LEN

给出字符串的字长.

LEFT

LEFT(STR,SIZE)从字符串最左边开始给出字长为SIZE的一个字符串.

LEFT3

RIGHT

RIGHT(STR,SIZE)从字符串的最右边开始给出字长为SIZE的一个字符串.

RIGHT3

MID

MID给出字符串的一部分.

MID(STR,LEN,POS)是一个从字符串STR的第POS位开始,字长为LEN的字符串。用IL语言编程举例:

MID2,2

CONCAT

两个字符串的连接

INSERT

INSERT(STR1,STR2,POS)=从字符串STR1的第POS位开始,插入字符串STR2。

DELETE

DELETE(STR,L,P)=从字符串STR的第P位开始,删除L个字符.

DELETE2,2

REPLACE

REPLACE(STR1,STR2,L,P)从字符串STR1的第P位开始用STR2字符串代替L个字符。

FIND

FIND(IN1,IN2)是在字符串STR1中寻找第一次出现字符串STR2时的字符位置。如果没有找到字符串STR2,那么输出OUT:=0.

SR

双稳态功能块,受置位支配:

Q1=SR(SET1,RESET)含义是:

Q1=(NOTRESETANDQ1)ORSET1

Q1,S1和R1的类型是BOOL.

RS

双稳态功能块,受复位支配

Q1=RS(SET,RESET1)含义是:

Q1=NOTRESET1AND(Q1ORSET)

SEMA

一个软件信号(可中断)

BUSY=SEMA(CLAIM,RELEASE)含义是:

BUSY:=X;

IFCLAIMTHENX:=TRUE;

ELSIFRELEASETHENBUSY:=FALSE;X:=FALSE;

END_IF

X是一个内部的BOOL型变量,初始值为0,

BUSY,CLAIM和RELEASE的类型是BOOL.

R_TRIG

上升边沿检测器.

FUNCTION_BLOCKR_TRIG

VAR_INPUT

S1:BOOL;

VAR_OUTPUT

Q0:BOOL;

M:BOOL:=FALSE;

Q0:=S1ANDNOTM;

M:=S1;

END_FUNCTION_BLOCK

只要输入变量S1是FALSE,那么输出QO和变量M为FALSE,只要S1是TRUE,则输出QO被置为TRUE,然后M被置为TRUE,这就是说,对R_TRIG的任何一次调用,QO将是FALSE,直到S1有一个下降并再次上升时。

F_TRIG

下降边沿检测.

FUNCTION_BLOCKF_TRIG

Q0:=NOTS1ANDNOTM;

M:=NOTS1;

只国输入变量S1是TRUE,那么输出Q0和变量M为FALSE,只要S1是FALSE,则输出Q0为TRUE,然后M被置为TRUE,这就是说,对F_TRIG的任何一次调用,Q0将是FALSE,直到S1有一个上升并再次下降时.

CTU

向上计数器:

CTU(CU,RESET,PV,Q,CV)含义是:

IFRESETTHENCV:=0;

ELSEIFCUAND(CV

THENCV:=CV+1;

Q:=(CV>=PV);

CU,RESET和Q的类型是BOOL,PV和CV的类型是INT.

如果RESET是TRUE,只要CV比Pvmax值小(只要CV不引起溢出),那么在调用功能块CTU时,CV值以1为增量递增。

如果CV大于或等于PV,那么Q值为TRUE.

CTD

向下计数器

CTD(CD,LD_,PV,Q,CV)含义是:

IFLD_THENCV:=PV;

ELSEIFCDAND(CV>PVmin)

THENCV:=CV-1;

Q0:=(CV<=0);

CD,LD_和Q的类型是BOOL,PV和CV的类型是INT.(另外:LD_被定名为LD_,因为LD是一个关键词).

如果LD_是TRUE,那么记数器变量CV的初始值被置为PV.如果LD_是FALSE,只要CV值比Pvmax值大(只要CV不引起下溢),那么在调用功能块CTD时,CV值以1为减量而减少。

当CV小于等于0时,Q值为TRUE。

CTUD

上-下计数器

CTUD(CU,CD,RESET,LD_,PV,QU,QD,CV)含义是:

ELSIFLD_THENCV:=PV;

QU:=(CV>=PV);

QD:=(CV<=0);

CU,CD,RESET,LD_,QU和QD的类型是BOOL,PV和CV的类型是INT.

如果RESET是TRUE,那么CV被初始化为0。如果LD_是TRUE,那么CV被初始化为PV。.

如果CU是TRUE,只要CV不引起上溢,那么CV按增量1增加。如果CD是TRUE,只要CV不引起下溢,那么CV按减量1减少.

当CV大于等于0时,QU为TRUE.

当CV小于等于0时,QU为TRUE.

TP

脉冲计时器

TP(IN,PT,Q,ET)含义时:

IN和PT是类型为BOOL或TIME的输入变量。Q和ET是类型为BOOL或TIME的输出变量。如果IN是FALSE,那么Q是FALSE,PT是0。

只要IN是TRUE,那么ET以毫秒为单位向上记时,直到该值等于PT。

如果IN是TRUE且ET小于PT,那么Q为TRUE,否则,Q是FALSE。

TP的作用用图形表示如下:

TON

延时接通计时器

TON(IN,PT,Q,ET)含义是:

IN和PT是类型为BOOL或TIME的输入变量。Q和ET是类型为BOOL或TIME的输出变量。如果IN是FALSE,那么Q是FALSE并且PT是0。

只要IN是TRUE,那么ET以毫秒为单位向上记时,直到ET的值等于PT。

如果IN是TRUE且ET等于PT,那么Q是TRUE,否则,Q是FALSE。

TON的作用用图形表示如下:

TOF

延时断开计时器

TOF(IN,PT,Q,ET)含义是:

IN和PT是类型为BOOL或TIME的输入变量。Q和ET是类型为BOOL或TIME的输出变量,如果IN是TRUE,那么Q是FALSE并且PT是0.

只要IN是FALSE,则ET以毫秒为单位向上记时,直到ET的值等于PT。

如果IN是FALSE并且ET等于PT,则Q是FALSE。否则,Q是TRUE,

TOF的作用用图形表示如下:

有TWinCATPLC中,操作数可以是常量,变量,地址以及〔在ST中〕,功能调用。

BOOL-Constants布尔常量

布尔常量的值是TRUE和FALSE.

TIME-literals时间文字

TIME1:=T#14ms;

TIME1:=T#100S12ms;(*Overflowinthefirstcomponent*)

(*ispermitted*)

允许第一个组成部分溢出

TIME1:=t#12h34m15s;

TIME1:=t#5m68s;(*Overflowinalowertimevalue.Correct*)

(*wouldbe:t#6m8s*)

TIME1:=15ms;(*missingT#*)丢失T#

DATE-literals日期文字

DATE#1996-05-06

d#1972-03-29

TIME_OF_DAY#15:36:30.99

tod#00:00:00

DATE_AND_TIME#1996-05-06-15:36:30.99

dt#1972-03-29-00:00:00

numbers数字

在TWinCATPLC中,数字可以用二进制,十进制或十六进制表示。如果一个数字不是十进制,那么必须表示它的基数,其后是一个"#"字符和数字。十六进制数10至15用字母A-F表示.

在一个数值中,不允许用下划线:

14(十进制)

2#1001_0011(二进制)

8#67(八进制)

16#A(十六进制)

REAL-Konstanten

这些数字的类型可以是BYTE,WORD,DWORD,SINT,USINT,INT,UINT,DINT,UDINT或REAL.

从较大的"larger"类型转换成较小的"smaller"类型是绝对不允许的。这就是说,一个DINT变量不可以像一个INT变量那样使用。因此,要使用标准库的类型转换功能。

为了转换类型,你可以使用下面的功能:

DINT_TO_INT(从32位表示法转换为16位表示法),

DINT_TO_BYTE(从32位表示法或16位表示法转换为8位表示法),

INT_TO_REAL(从INT型转换为REAL型),REAL_TO_INT(从REAL型转换为INT型).

值得注意的是,不同类型的变量可以有不同的数值范围。整数类型的变量有如下的数值范围:

SINT:

-128

127

USINT:

0

255

INT:

-32768

32767

UINT:

65535

DINT:

-2147483648

2147483647

UDINT:

4294967295

因此,在把较大类型的数转换为较小类型的数时,有可能丢失信息,如果被转换的数字比类型范围要大,那么只能考虑低位数。例如,如果你转换的数字是4223(十六进制为16#10_7f)使用DINT_TO_BYTE转换命令,你得到的数字是127(十六进制为16#7f).

REAL-Constants实数常量

实数用十进制分数表示

Strings字符串

Variables变量

变量或者被说明为局部变量〔在一个POU的说明语句部分〕或者被说明为全局变量〔在全局变量表中〕。

变量的助记符不允许有空格,不允许说明两次,不允许是关键词。

变量可被使用在任一场合,在该场合中,变量的类型是可用的.

Addresss地址

一个单元素变量直接用一个特殊符号表示。该特殊符号是由百分号"%",表示地点的词头和表示数位大小的词头组合而成。一个或多个未被标记的整数用句点“。”分开。

系统支持下面表示地点的词头:

I

输入地点

Q

输出地点

M

存储地点

系统支持下面的表示倍数的词头:

X

一位

None

B

一字节〔8位〕

W

一个字〔16位〕

D

双字〔32位〕

%QX75and%Q75Outputbit75

%IW215Inputwordlocation215

%QB7Outputbytelocation7

%MD48Doublewordatmemorylocation48

%IW2.5.7.1dependsonhardwareconfiguration

一个有效的地址取决于当前程序的PLC组态.

Memorylocation存储地点

在TWinCATPLC中,所有被支持的数位可用于对存储器进行寻址。

例如,地址%MD48正在寻找字节号为192,193,194和195的存储器地址(48*4=192).存储器中的第一个字节号是No.0.

同样地,你可寻找存储器中WORDS和BYTES甚至BITS的地址。例如,%MB5.0,你寻找字节号为No.5的第一位.

Systemflags系统标志

Arrays数组

TWinCATPLC支持1,2,和3维数组。一个二维数组的规定写法如下:

:ARRAY[..,..]of<基本数据类型>.

Array_Name是一个助记符,Ib1,ub1,Ib2,ub2必须是整数。

Cardgame:ARRAY[1..13,1..4]OFINT;

如果数组中的一个数被用作操作数,那么按如下寻址:

[Index1,Index2]

在上面的数组例子中,位号为9,2的数字按如下寻址:

Cardgame[9,2]

Functions函数

在ST语言中,一个函数的调用可以作为一个操作数使用

Result:=Fct(7)+3;

Addressingofstructurecomponents结构变量的组成成分的寻址

结构变量中的组成成分按如下寻址:

.

Week.Monday

AddressingofPOU-variablesPOU变量的寻址

功能块和程序的变量其寻址方式与结构中组成成分的寻址方式相同。首先表示POU的名称,然后是一个点“。”,接着是想要寻找的变量名.

在语法上可能会出现下面的错误:

"Non-Booleanexpressionusedwithcontact”

.把与触点有关的表达式改为一个布尔表达式

"Non-Booleanexpressionusedwithcoil"

把与线圈有关的表达式改为一个布尔表达式.

"Identifierexpected"

在说明语句行的开始,写一个有效的助记符.

"Overflowofidentifierlist"

减少助记符数量(64000个是可行的).

"VAR,VAR_INPUT,VAR_OUTPUTorVAR_INOUTexpected"

在一个POU的名称后面,第一行必须是其中的一个关键词.

"Unexpectedend"

在说明语句部分中:在说明语句部分的结尾加上END_VAR关键词.

在文本编辑中:添加语句,该语句用于结束最后的语句序列.

"END_VARoridentifierexpected"

在说明语句行的开始写一个有效的助记符或写END_VAR.

"Expecting...or..."

在出错行里写上两项中的其中一项.

"NameusedininterfaceisnotidenticalwithPOUName"

"Expectingtypespecification"

在说明语句的助记符后面写一个有效的类型。

"Errorininitialvalue"

写一个与说明语句的类型相一致的直接量作为初始值.

"Duplicatedefinitionofidentifier"

给有相同名称的助记符重新定名.

"Identifiernotdefined"

在POU的说明语句部分或者在全局变量表中说明这个助记符.

"LDexpected"

在这一行中仅允许有一个LD语句.

"ILOperatorexpected"

把这一行的第一个字符串改为一个有效的运算符或函数

"VariablewithwriteaccessordirectaddressrequiredforST,STN,S,R"

用一个写存取变量代替操作数。

"Typemismatch:Cannotconvertto."

检查操作数要求的类型〔因此,在你的Help文件中检索操作数〕。把产生错误的变量类型改为允许的类型或取其他的变量.

"Unexpectedendoftextinbrackets"

插入一个右括号

"inbracketsnotallowed"

这个运算符不允许放在括号内,去除括号或运算符。

"Closingbracketwithnocorrespondingopeningbracket"

删除右括号或者加上一个左括号.

"Operandexpected"

加上一个附加的操作数。

"Operatorisnotextensible"

检查这个运算符的操作数的数量并去除多余的操作数.

把符号‘+’或‘-’后面的字符串改为一个有效的直接量。

去除逗号.

"Unknowntype"

改为一个有效的类型.

说明括号前的助记符为一个数组或者将它改为一个被说明的数值变量.

"IndexexpressionofanarraymustbeoftypeINT"

把下标改为INT,或者改成类型为TYPEINT的变量.

"Toomanyindexesforarray"

检查用于说明数组的下标数量(1,2或3)并去除多余的下村.

"Toofewindexesforarray"

检查用于说明数组的下标数量(1,2或3)并添加丢失的下标.

"isnotacomponentof"

如果变量是一个结构变量,那么把改为这个结构中被说明的一个变量。如果变量是一个功能块例程,那么把改为在功能块中已被说明的输入或输出参数。

去除N,并用NOT运算符对操作数进行”非”运算。

"isnofunction"

改成与项目相连的库中的某个函数或者改成在项目中被说明的某个函数.

"Typemismatchinparameter:Cannotconvertto."

检查这个运算符,函数或功能块的操作数所要求的类型。将产生错误的变量类型改为一个被允许的类型或者取一个被允许的一个类型的其它变量.

"ConditionalOperatorrequirestypeBOOL"

前面指令的执行结果不珍有BOOL类型。插入有布尔结果的一个运算符或一个函数.

"Functionnamenotallowedhere"

用一个变量或直接量代替函数调用.

"Labelinbracketsnotallowed"

去除标号或括号.

"Labelisnotdefined"

定义一个标号或把改成一个被定义的标号.

"CAL,CALCorCALNrequirefunctionblockinstanceasoperand"

说明一个你想要调用的功能块例程.

在AT关键词后面插入一个有效的地址或去除AT关键词.

"OnlyBOOLvariablesallowedonbitaddresses"

把说明语句中的类型改为BOOL或把地址改成其它大小的地址.

"OnlyVARandVAR_GLOBALcanbelocatedtoaddresses"

去除地址位.

"Itisnotpossibletolocateamultidimensionalarraytoanaddress"

"Itisnotpossibletolocateanarrayofstringstoanaddress"

"Itisnotpossibletolocateanarrayofanarraytoanaddress"

"Unrecognizedvariableoraddress"

这个观察变量在项目中没有被说明,当按键时,你得到有关说明变量的帮助.

"Extracharactersfollowingvalidwatchexpression"

去除多余的字符.

"POUisnotdefined"

"isnotaninputvariableofthecalledfunctionblock"

检查被调用的功能块的输入变量,并把名改为功能块的其中一个输入变量.

"Typemismatchoninputvariable:Cannotconvertto."

名称被赋给一个不恰当类型的值,把被赋值的变量,直接量或语句改为名称.

"JumpandReturnisonlyallowedontherightsideofanetwork"

去除跳转(Jump)或返回(Return).

"JumpandReturnrequireBOOLasinputtype"

前面指令的结果值不是BOOL型。插入有布尔结果值的一个运算符或一个函数.

"Ajumpmusthaveexactlyonelabel"

把跳转语句的文本改为一个被定义的标号.

"POUneedexactlyinputs"

检查这个POU所需要的输入数量并去除多余的输入或添加丢失的输入.

"AnotherSTstatementorendofPOUexpected"

POU在一个完整的语句里结束。使语句完整或去除这个语句.

"Toomanyparametersinfunction"

去除多余的参数.

"Toofewparametersinfunction"

加入丢失的参数.

"IForELSIFrequireBOOLexpressionascondition"

把表达式改为一个有布尔结果的表达式。

"WHILErequiresBOOLexpressionascondition"

把表达式改为一个有布尔结果的表达式.

"UNTILrequiresBOOLexpressionascondition"

.把表达式改为一个有布尔结果的表达式

"NOTrequiresBOOLoperand"

把操作数改为一个布尔型操作数.

"NoinstancespecifiedforcallofFB"

把功能块例程文本(初始值为"Instance”)改为一个有效的功能块例程说明语句的助记符.

"mustbeadeclaredinstanceofFB"

"VariableofFORstatementmustbeoftypeINT"

把变量改为INT类型的一个变量.

"ExpressioninFORstatementisnovariablewithwriteaccess"

把变量改为一个有写存取的变量.

"StartvalueofFORstatementmustbeoftypeINT"

把变量改为一个INT类型的变量.

"EndvalueofFORstatementmustbeoftypeINT"

"IncrementvalueofFORstatementmustbeoftypeINT"

"EXIToutsidealoop"

去除Exit指令。

"Illegaladdress:

"

在你的PLC组态中检查哪些地址是有效的。然后用有效地址代替出错的地址或更改PLC组态.

"END_STRUCToridentifierexpected"

结构定义必须用END_STRUCT关键词结束.

"isnooperator"

用一个有效的运算符代替字符串.

"Typemismatchinparameterof:Cannotconvertto."

检查的参数所要求的类型。把产生错误的变量类型改为类型,或选择类型中的另一个变量.

."isnofunctionblock"

用一个有效的函数名称代替名称.

"Nowriteaccesstovariableallowed"

用一个有写存取的变量代替名称.

"OutofMemory"

把项目存储起来,并离开系统。离开Windows环境,在下一次重新开始建立项目.

"operandsaretoofewfor.Atleastareneeded"

检查运算符需要多少操作数,并去除多余的操作数。

"operandsaretoomanyfor.Exactlyareneeded"

检查运算符需要多少操作数,并添加丢失的操作数.

"ADRneedsavariable,notaexpressionorconstantasoperand"

用一个变量代替表达式或常数.

"Duplicatedefinitionoflabel"

你使用同一名称来说明两个标号。给其中的一个标号重新定名.

"Illegaldurationconstant"

"ExpectingNumber,ELSEorEND_CASE"

没有正确地完成CASE语句。添加关键词END_CASE.

"CASErequiresselectorofanintegertype"

选择器变量的类型是错误的。把选择器改为一个类型为INT的变量,或改变选择器的类型。

"Atleastonestatementisrequired"

插进一个语句.

"Integernumberorsymbolicconstantexpected"

在这个CASE语句中,只允许一个整数值或符号常数。代替错误的数值.

"Multipleunderlinesinidentifier"

在助记符名称内不允许有多条下划线。去除多余的下划线.

"CommentsareonlyallowedattheendoflineinIL"

把注释移到一行的末端.

"Atmost4numericalfieldsallowedinaddresses"

去除地址中多余的数字区.

"Keywordsmustbeuppercase"

用大写字母写关键词.

"Functionblockcallrequiresfunctionblockinstance"

在POU的说明语句部分,说明某个功能块的一个例程.

"Expressionexpected"

在这种情况下,要求有一个表达式.

"INIoperatorneedsfunctionblockinstanceordataunittypeinstance"

把操作数改为一个功能块的例程,因此所说明的操作数作为一个功能块例程,或使用一个被说明的功能块例程,或使用一个数据单元类型的状态。

去做信息正告诉你的事情。

"Overflowindurationconstant"

用一个有效的助记符代替名称。

去除多余的字符。

修改一个与其它步骤的名称完全一样的步骤+名称。

名称改为一个已有的步骤的名称或按所要求的名称插入一个步骤。

THE END
1.python0和某值取高mob6454cc6c6291的技术博客python 0和某值取高 python入门day3 目录 昨日内容回顾 §一、计算机的五大组成部分详解和三大核心硬件 1、计算机的五大组成部分详解 2、计算机的三大核心硬件 3、操作系统Operating System 4、编程、编程语言及编程语言的发展史 5、编程语言的分类 6、python解释器https://blog.51cto.com/u_16099242/12857837
2.位置式PID与增量式PID的区别位置式PID(Positional PID):输入:位置式PID控制器的输入是目标值和当前反馈值之间的误差(偏差)。输出:输出是根据误差直接计算出的控制量,即直接输出给执行机构。实现:位置式PID的输出值直接控制执行器的位置或速度。积分项限制:位置式PID中可以设置积分饱和限制来https://www.eefocus.com/ask/1784784.html
3.数组尾部编程,技巧与策略数组结尾标志,数组尾部编程,技巧与策略在计算机编程中,数组是一种常见的数据结构,用于存储一系列有序的元素,数组尾部编程,即针对数组末尾元素进行操作的一种编程方式,是许多编程任务中不可或缺的一部分,本文将探讨数组尾部编程的重要性、常见技巧和策略。 数组尾部编程的重要性 在许多编程场景中,对数组尾部的操作至关重要,在数据处理、算法实现、游戏开发http://skypure.com.cn/post/32998.html
4.大数加减乘除,一文彻底搞定这个数字一般用字符串、链表等形式表示、返回,大数运算的核心就是:模拟,模拟我们日常用纸笔算数字的加减乘除流程,然后再根据计算机、编程语言等特性适当存储计算即可,不过,大数除法运算稍微特殊一点,和我们直接模拟的思维方式稍有不同,它就是转换了一下成特殊的加减法运算,后面会细谈。 https://itzsg.com/97832.html
5.MaximumSumofProducts题目大意: 样例: 思路: 简单翻译一下:我们有两个数组a与b,我们可以对a中的任意一个连续序列翻转至多一次。求a[i]*b[i]之的最大值。 观察数据范围5000,我们可以使用时间复杂度为O(n^2)的算法,因此我们就考虑遍历所有的连续序列,这里我们使用一种新的遍历所有连续序列的方法,使用双指针遍历,我们可以先遍历长https://zhuanlan.zhihu.com/p/13314438073
6.计算机小白的成长历程——分支与循环(8)这里可能就会有朋友奇怪了,为什么第一个循环是到80不是到90呢,这里涉及到for语句的逻辑顺序了,for语句在下一次判定前进行的递进语句,也就是说,如果判断语句是90,那在出循环的时候,a的值就变成了99,直接把90~99之间的9给略过了,所以,这里需要到89就跳出循环,进入下一个循环,因为跳出循环后的值是我们需要用的https://www.ctyun.cn/zhishi/p-449350
7.递归函数(详解+实战)其他实例文章2. 每次函数调用都有一个明确的返回值。 3.该函数必须有一个基本情况(base case),当达到这个基本情况时,函数会停止递归。 **递归函数的优点** 递归函数具有以下优点: 1. **简洁性**: 递归函数可以用来解决复杂的问题,而不需要多层嵌套的循环结构。 http://www.shili8.cn/article/detail_20002682577.html
8.扬力数控转塔冲说明书本说明书内容为机床电气部分,版本V9.1,适用于日本FANUC 0i-P数控系统,液压系统为ECO、HKL、HRE及HBL等哈雷液压系统,机床型号主要为MP及T30系列。 该书主要包括操作、编程、维修三大部分,还包含防止机床损坏的安全预防措施等。工作人员在操作之前请仔细阅读。操作者必须遵守说明书中的安全预防措施,在完全熟悉相关说明书https://www.51zxw.net/TechArticleDetails.aspx?zid=35&Id=92
9.数控机床操作与编程第5章加工中心的编程与实例在线免费阅读5.3.2 绝对值编程指令G90与增量值编程指令G91 程序格式为:G90; G91; 指令说明:绝对值编程指令是G90,增量值编程指令是G91,它们是一对模态指令。G90出现后,其后的所有坐标值都是绝对坐标,当G91出现以后,G91以后的坐标值则为相对坐标,直到下一个G90出现,坐标又改回到绝对坐标。G90为默认值。 https://fanqienovel.com/reader/7109747430005935141
10.数控编程G80,G81,G82指令如何用?详细,最好能举例说明,在下感激不尽!说明:X、Z:绝对值编程时,为切削终点C在工件坐标系下的坐标;增量值编程时,为切削终点C相对于循环https://wenwen.soso.com/z/q594110706.htm
11.发那科加工中心编程说明书该指令使指令轴以快速定位进给速度经由IP指定的中间点返回机床参考点,中间点的指定既可以是绝对值方式的也可以是增量值方式的,这取决于当前的模态。一般地,该指令用于整个加工程序结束后使工件移出加工区,以便卸下加工完毕的零件和装夹待加工的零件。 F注意: https://www.yujiangcnc.com/bethel/news/show_2275.html
12.FANUC加工中心编程说明书对一段圆弧进行编程,除了用给定终点位置和圆心位置的方法外,我们还可以用给定半径和终点位置的方法对一段圆弧进行编程,用地址R来给定半径值,替代给定圆心位置的地址。R的值有正负之分,一个正的R值用来编程一段小于180度的圆弧,一个负的R值编程的则是一段大于180度的圆弧。编程一个整圆只能使用给定圆心的方法。http://www.360doc.com/document/17/1228/16/1932827_281173564.shtml
13.这么详细的数控铣床程序你都知道吗?我们一起来学习吧(1)、绝对值编程G90与增量值编程G91 格式: G90 G X— Y — Z — G91 G X— Y— Z— 注意:铣床编程中增量编程不能用U、W. 如果用,就表示为U轴、W轴. 例:刀具由原点按顺序向1、2、3点移动时用G90、G91指令编程。 注意:铣床中X轴不再是直径. https://cloud.tencent.com/developer/news/208821
14.数控编程g代码大全与详解说明: 1、X、Z在G90时,圆弧终点坐标是相对编程零点的绝对坐标值。在G91时,圆弧终点是相对圆弧起点的增量值。无论G90,G91时,I和K为圆弧的圆心相对于起点的增量坐标。注:I是X方向值、K是Z方向值。圆心坐标在圆弧插补时不得省略,除非用其他格式编程。 https://www.sczy.com/article-2026.html
15.数控车床编程教程,图文实例详解一、数控车编程特点 (1) 可以采用绝对值编程(用X、Z表示)、增量值编程(用U、W表示)或者二者混合编程。 (2) 直径方向(X方向) 系统默认为直径编程,也可以采用半径编程,但必须更改系统设定。 (3) X向的脉冲当量应取Z向的一半。 (4)采用固定循环,简化编程。 https://www.stscnc.com/new_19/380.html
16.c语言径向分布函数径向分布函数的表达式X(U)和Z(W)为圆弧的终点坐标值,绝对值编程方式下用X和Z,增量值编程方式下用U和W。 I、K分别为圆弧的方向矢量在X轴和Z轴上的投影(I为半径值)。当分矢量的方向与坐标轴的方向不一致时取负号。如图2.1.7所示,图中所示I和K均为负值。 4.暂停指令G04 http://chengdu.cdxwcx.cn/article/hijiio.html
17.山东协和学院20. Sql Server2005的循环语句有哪些,举例说明? 21. Break语句在循环语句中起什么作用? 22. Continue语句在循环语句中起什么作用? 23. 请说明Try…Catch语句在数据库编程中起什么作用? 24. 请写出什么是事务处理? 25. 事务处理具有哪些特性? 26. 事务处理按照事务的提交方式有哪些分类? https://www.sdxiehe.edu.cn/m/view.php?id=31442
18.机器人编程试题及答案(精选7篇)11.简述机床原点、机床参考点与编程原点之间的关系。 答:机床坐标系原点是由机床厂家在设计时确定的,机床的参考点是相对机床零点的一个特定点、一个可设定的参数值,它的主要意义在于建立机床坐标系,只有知道机床坐标系后才能确定编程原点。 12.说明M02指令和M30指令的相同点与不同点。 https://www.360wenmi.com/f/filefafwyst5.html
19.数控铣床加工中心编程与操作实例资源20220430161753.ppt铣模式圆周槽SLOT2编程样式(见图1-51) RTP 返回平面(绝对值) RFP 参考平面(绝对值) SDIS 安全距离 DP 圆周沟槽深度(绝对值) DPR 圆周沟槽深度(增量值) NUM 圆周槽个数 AFSL 沟槽的角度 WID 圆周槽宽度 CPA 圆弧槽中心横向坐标 CPO 圆弧槽中心纵向坐标 RAD 圆槽中心线的半径 STA1 起始角度 INDA 增量角度https://max.book118.com/html/2022/0430/8050051012004076.shtm
20.自考大专10726数控机床与编程(一)复习题复习资料2、在数控编程时,使用(刀具补偿)指令后,就可以按工件的轮廓尺寸进行编程,而不需按照刀具的中心线运动轨迹来编程。 3、圆弧插补时,通常把与时钟走向一致的圆弧叫(顺圆),反之称为(逆圆)。 4、对步进电机施加一个电脉冲信号,步进电机就回转一个固定的角度,这个角度叫做(步距角),电机的总角位移和输入脉冲的(数量http://www.mdgs-edu.com/fxzl/1896.html
21.数控铣床编程代码及使用方法五、简化编程指令4)G81:钻孔循环(定点钻)G98(G99)G81X_Y_Z_R_F_L_功能:图42为G81指令 的动作循环,包括X,Y坐标定位、快进、工进和快速返回等动作。说明:X、Y:螺纹孔的位置。Z:绝对编程时是孔底 Z点的坐标值;增量编程时是孔底Z点相对与参照R点的增量值。R:绝对编程时是参照R点的坐标值;增量编程https://www.360doc.cn/document/68630570_940132782.html
22.Python还有什么赋值?Python赋值语句的多种形式Python是一种强大且灵活的编程语言,其赋值语句的多样性是其特色之一。除了常见的变量赋值,Python还支持许多其他赋值方式,包括多重赋值、增量赋值以及解包赋值等。在本文中,我们将深入探讨Python中赋值语句的多种形式,并通过具体实例来说明它们的用途和优势。 https://m.w3cschool.cn/article/28257069.html