-
-
zhoumingyuan | 当前状态:在线
总积分:683 2024年可用积分:0
注册时间: 2011-02-19
最后登录时间: 2015-01-21
-
TWINCAT PLC 编 程 手 册 2.7 版 本
zhoumingyuan 发表于 2014/4/13 13:36:32 13371 查看 2 回复 [上一主题] [下一主题]
手机阅读
tWinCAT PLC
编 程 手 册
2.7 版 本
IEC 61131-3 PLC 编程语言
德国倍福电气有限公司
北京代表处
1. TWinCATPLC 概述............................................................................................................ 3
2. TWinCATPLC 要点............................................................................................................ 5
2.1. 程序的组成部分............................................................................................................................................. 5
2.3. 调试,在线功能...................................................................................................................................................... 17
2.4. 标准............................................................................................................................................................................ 18
3. 让我们写一段小程序............................................................................................................... 19
4. TWinCAT PLC 的详细组成部分............................................................................................ 30
4.1. 操作项目................................................................................................................................................................... 30
4.2. 操作目标................................................................................................................................................................... 42
4.3. 常用编辑命令........................................................................................................................................................... 45
4.4. 常用在线命令........................................................................................................................................................... 46
4.5. 关于视图................................................................................................................................................................... 53
4.6. 编排窗口................................................................................................................................................................... 54
4.7. 求助信息 !................................................................................................................................................................ 55
5. TWinCAT PLC编辑器........................................................................................................... 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.TWinCAT PLC中的操作数........................................................................................................................................... 126
E. 错误信息参考................................................................................................................................................................... 130
1. TWinCAT PLC 概 述
TWinCAT PLC是什么?
TWinCAT PLC 是 一 个 完 整 的 用 于 逻 辑 控 制 器 的 开 发 系 统。
TWinCAT PLC 具 有 功 能 强 的 语 言 结 构, 符 合IEC 国际 标 准。这 些 使 你 易 于 进 行 程 序 的 开 发。 就 像Visual C++ 一 样,具有高 级语 言 编 程 系 统的开发 环 境 ,可为编 辑器 的 操 作 和 调 试 功 能设 置 模式。
程序的结构是什么?
所 有 的 项 目 数 据存 在 一 个 有 项 目 名 称 的 文 件 中。 一 个 新 项 目 的 第 一 个POU, 系 统 会 自动 地 给 定 名 称MAIN,这 是 程 序 的 起 点。( 在 C 程 序 中, 这 是 一 个 主 函数。〕 从 这 里 开 始, 你 可 以 调 用 其 它 的POUs( 程 序, 功 能 块 和 函数〕。
TWinCATPLC 区 分 一 个 项 目 中 的 三 种 不 同 目 标 :POUs, 结 构 和 可 视 化 元 素。 利 用 这些 目 标, 你 可 以 创 建 你 的 项 目。 在 目 标 表 中, 你 可 以 看 到 你 的 项 目 目 标 。
怎样写程序?
首 先, 当 你 开 始 开 发 一 个 新 程 序 时, 你 必须 对 你 的 硬 件 系 统 进 行 组 态。 这 对 于 检 查 使 用 的 地 址 是 否 正 确 是 必 要 的。
现在 你 可 以 对 你 的 问 题 组 态 必 要 的POUs。 然 后, 你 开 始 用 你 选 择 的 语 言 对 你 的POUs 进 行 编 程。
在 编 辑 完 项 目 的 所 有 目 标 后, 编 译 你 写 的 程 序 并 去掉 语 法 错 误。
怎样测试程序 ?
当 修 正 了 程 序 中 的所 有 语 法 错 误 后, 你 可 以 转 换 到 仿真模 式, 登 录 到 仿真控 制 器 中, 并 把 你 的 项 目 装 入 到 控 制 器 里, 现 在,TWinCATPCL 以 在 线 方 式 运 行。
你 可 以 打 开 图 形 硬 件 组 态 窗 口, 强 制 给 定 输 入, 然 后 观 察 输 出。 在 每 个POU 的 说 明 语 句 部 分 以 及 全 局 变 量 表 中, 你 能 够 看 到 项 目 数 据 的 当前值, 你也 可 以 去 写, 强 制 给 定 数 值。在 另 一 个 观 察 窗 口 中, 你 可 以 组 态 你 想 要 检 查 的 数 据 单 元。
用TWinCAT PLC进行调试
在 发 生 程 序 错 误 的 地 方, 你 可 以 设 置 中 断 点。 程 序 停 止 执 行 后, 你 可 以 在 这 个 中 断 点 上 检 查 所 有 的程 序 数 据。 单 步 功 能 允 许你 一 步 一 步 地 检 查 程 序 的 逻 辑 是 否 正 确。
进一步的在线功能
TWinCAT PLC 支 持 进 一 步 的 调试 功 能。 允 许 按 照 一 定 数 值 强 制 改 变 程 序 变 量 和 输 入/ 输 出 值。 流 程控 制 使 你 能 够 检 查 哪 一 行 程 序 被 执 行, 并 且 当 运行 编 码 时, 向 你 显 示 该 行 所用 的 每 个 变 量 的 数 值。
采 样 跟 综 用 于 跟 综 变 量 并 以 曲 线 方 式 显 示 数 值。
在 编 写 和 测 试 程 序 后, 你 可 以 把 程 序 下 装 到 你 的 硬 件 系 统 中, 并 继 续 测 试。 这 时, 像 用 模拟 方 式 调 试 一 样,你可用 同 样 的 调 试 方 法。
TWinCAT PLC的其它功能
在 任 何 时 候, 可 以 将 整 个 项 目 存 档 或 输 出 到 一 个 文 本 文 件 中。
总 结
TWinCAT PLC 是 一 个 完 整 的 用于 逻 辑 控 制 器 的 开 发 系 统。 使 用TWinCAT PLC, 使 你 大 大减 少 开 发 应用 软 件 所 需 要 的 时 间。
2. TWinCAT PLC 要 点
为了便于你掌握TWinCATPLC, 请阅读下面的基本TWinCATPLC术语表:
2.1. 程 序 的 组 成 部 分
项 目(Project)
一个项目包括控制器程序的所有目标,保存在有项目名称的文件中。一个文件由以下目标组成:PLC-Configuration, Tasks, POUS, 结构,全局变量表,库,观测 变量,可视化元素。
编 程 组 织 单元 (POUs)
POUs由函数,功能块和程序构成。
每个POU 由说明语句部分和语体组成。语体用IEC 编程 语 言 编 写:
指令表Instruction List (IL), 结构化文本StructuredText(ST), 功能块图Function Block Diagram (FBD), 梯形图Ladder Diagram (LD) 或顺序功能流程 图SequentialFunction Chart (SFC).
TWinCAT PLC 支持所有的IEC 标准POUs。
POUs 可以调用其它POUs. 然而,被调用的POUs 不允许再 调用其它的POUs.
函数 (Function)
一 种函数是一个POU,当执行这种函数时,它精确地提供一个数 据元素( 也 可以像数列或结构数据那样由多个数据元素组成〕。
一种函数总是用一定的形式来说明。即: 在 功 能名称的后面是一个冒号和类型符。
一个正确的函数说明语句如下:
FUNCTION Fct: INT
另外,一个数值被分配给函数。即,函数名称可以像一个输出变量那样使用。函数数值必须与它的说明类型相一致。
下图举例说明函数FBD-Example。该函数用FBD语言编写,有三个BOOL输入和一个BOOL输出:
图2.1.1功能
在ST语言中,调用一个函数,如同使用一个表达式中的操作数。
函数不含有内部的状态信息。这就是说,调用具有相同自变量(输入参数〕的一个函数,总是产生相同的数值(输出〕。
举例调用上面所描述的函数:
用 IL 语言编写:
LD 7
FBD_Example 2,4
ST Result
用ST语言编写:
Result:= FBD_Example(7, 2, 4);
用FBD语言,可这样调用功能 :
在SFC语言中,一个功能公可以在一步或一个转换内调用。
功能块(Function Block)
一个功能块是一个POU,当执行该功能时,它产生一个或多个数值。
功能块没有类型说明。
功能块的例程(Instances ofFunction Blocks〕
一个功能块可以产生多个以不同名称命名的例程。每一例程都有一个相关的标识符(例程名称〕,还有一个数据结构,该数据结构包含有输出,输入和内部变量。
像变量一样,功能块例程可被定义在局部变量表中。其方法是用标识符表示,用功能块名称作为类型。
下面是功能块FUB,例程名称为INSTANCER :
INSTANCE:FUB;
一个功能块的所有数值保持到下一次功能块执行之前。因此,调用同样的功能块,尽管它们有相同的自变量〔输入变量〕,但是,功能块的输出值并不总是相同。
下图是一个名称为IL_EXAMPLE的功能块,用IL语言编写,有一个输入变量,二个输出变量。
图 2.1.2. 功能块
调用功能块的方法,是使用功能块的例程名称。
访问功能块变量的方法,是输入功能块的例程名称,其后是一个点和变量名。
下面举例说明怎样调用上图描述的功能块IL-EXAMPLE。
用 IL语言编写:
图 2.1.3. 用IL语言调用一个功能块
用ST语言调用同样的功能块:
图 2.1.4. 用ST语言调用一个功能块
用 FBD语言调用功能块:
图2.1.5. 用FBD语言调用一个功能块
在SFC语言中,仅可以在步骤或传送内调用功能块。
有关功能块用法的举例见第三章。
程序
一个程序就是一个POU。当执行该程序时,它产生一个或多个数值。不允许像功能块那样产生一个程序的例程〔见功能块)。一个程序的所有数值保持到下一次执行程序之前。
一个简单程序举例:
图 2.1.6. 程序
在程序和功能块内,可以调用程序。在一个函数内不允许调用程序。不存在程序例程。
如果一个POU调用一个程序并且改变了程序的数值,这些变化将保持到下一次调用程序之前,即使是一个不同的POU调用该程序。
这与调用功能块是不同的。调用功能块的POU仅可以改变功能块的某一例程的数值(局部或全局数值〕
举例说明上面所描述的调用程序:
用 IL语言编写程序:
CAL PRGexample
用ST语言编写程序:
PRGexample;
用FBD语言编写程序:
MAIN
名称为MAIN的POU是一个特殊的程序。它是一个新项目中产生的第一个POU。在每个控制器运行周期中,这个POU被调用一次。如果你不使用任务(看5.14节),那么就决不能删除这个POU,也不能给它重新命名!!!
PLC 组态(PLC Configuration)
你可以使用PLCConfiguration组态你的控制器。为了检查一个程序,有必要知道哪些地址是有效的。一个项目的有效地址在PLCConfiguration中定义。
库(Libraries)
你可以把一些库与你的项目连接起来。像使用项目中所定义的POUs那样来使用被连接库中的POUs.库”Standard.Lib”包括所有IEC标准函数和功能块,它是TWinCAT PLC的一个组成部分。
结构(Structure)
一个结构总是由多个基本的数据元素组成。一个结构的组成部分可以是任何类型的数组,其中包括结构。
结构定义举例:
多边形
STRUCT
Start:ARRAY(1..2) OF INT;
Point1:ARRAY(1..2) OF INT;
Point2:ARRAY(1..2) OF INT;
Point3:ARRAY(1..2) OF INT;
Point4:ARRAY(1..2) OF INT;
End:ARRAY(1..2) OF INT;
END_STRUCT
一个任务控制一些程序或功能块状态的运行。按照IEC1121-3国际标准的划分,有周期任务,事件触发任务和时间触发任务。当使用任务时,不需要使用MAIN程序。
2.2. 编程语言
指令表 Instruction List (IL)
指令表(IL〕由一系列的指令组成。每条指令从新的一行开始,并根据操作指令,由操作符,一个或多个操作数组成,这些操作数用逗号分开。
一条指令可用一个标号引导。该标号由标号名和一个冒号组成。
一条注释必须是在一行的最后,两条指令之间可以插入空行。
举例:
LD 17
ST lint (*Comment *)
GE 5
JMPC next
LD idword
EQ istruct.sdword
STN test
next:
结构化文本 Structured Text (ST)
结构化文本由一系列语句组成。这些语句可以有条件地(“
IF…THEN…ELSE”)或者重复地(WHILE…DO)执行。
举例:
IFvalue < 7 THEN
WHILE value < 8 DO
value := value + 1;
END_WHILE;
END_IF;
顺序功能流程图 Sequential Function Chart (SFC)
顺序功能流程图是一种图形语言。这种语言能使编程者按时间顺序描述一个项目内的不同动作。
用SFC语言编写,用TWinCAT PLC SFC编辑器进行编辑的例子:
图2.2.1: 用SFC编写的网络
步和动作 (Steps and Actions〕
用SFC编写的POU由一个步的序列组成(如图2.21中的permanent,Init),这些步直接连接。这里所说的动作可附着在每一步上,Action意味着与动作有关的编码。
传送(Transition〕
步与步之间存在着传送(如图2.21中的TRUE,sin_test),一种条件被附着在转换上,这种条件或是一个布尔变量,一个地址,或是一个有布尔结果的表达式,也可能是一个布尔常量(TRUE,FALSE).
激活步(Active Step〕
当执行一个SFC-POU程序时,首先执行的动作是初始步(双边框〕。当一个步的动作被执行时,称该步为激活步。
每个步有一个标记。这个标记存储步的状态.当步处于激活状态时,标记为TRUE,否则为FALSE。标记的标识符就是步的名称。它在SFC-POU程序中被说明。
执行完一步后,接着执行下面的传送。如果结果值是TRUE,则激活下面的步,并在下一个处理器周期中执行。
功能块图 (FBD)
功能块图是一种图形编程语言。它由一个网络序列组成。每个网络含有一种结构,这种结构代表了一个逻辑或一个算术表达式,一个功能块的调用,一个跳转或一个返回语句(图2.2.2).
用FBD编写的典型的网络例子:
图 2.2.2.:用FBD编写的网络
梯形图 Ladder Diagram (LD)
梯形图是一种图形编程语言,类似于电路原理图。一方面,你可以用LD语言去设计逻辑电路,另一方面,你可以用LD语言设计FBD所编写的网络。因此,你可以使用LD语言去控制调用其它的POUs.
触点〔Contacts〕
梯形图由一个网络序列组成,在网络的左侧是触点〔用二条并行的重线||表示〕,从左向右传递“ON”或“OFF”状态。这些状态与布尔值1或0相对应。与每个触点相联的是一个布尔变量。如果这个布尔变量是TRUE,那么触点把左边连接线的状态传递到右边连接线上。否则,右边连接线的状态是OFF。
触点可并联连接。在这种情况下,并行支路中的任一分支传送数值ON就能使并行网络传送ON状态。触点也可以串行连接。在这种情况下,所有触点必须传送数值ON,才能使最后的触点传送ON状态。这一点和电路图中的并联或串联连接原理相一致。
线圈〔Coils〕
在梯形图的右侧是一个线圈网络。这些线圈不能用水平线连接在一起。一个线圈能不加修改地考贝从线圈左侧到右侧的状态,并把这一状态值存入相联的布尔变量中。
当一个线圈为“非”运算时,它把这一“非”运算值存入一个相联的布尔变量中。当一个触点为“非”运算时,只有与之相联的布尔变量值为FALSE时,这个“非”运算触点才能传送数值。
用LD语言编写的网络例子.
图2.2.3用LD语言编写由触点和线圈组成的网络
梯形图中的连接
网络中的连接可以是水平的或垂直的。
水平连接用水平线表示,水平连线将它左边的元件状态传送到它右边的元件。
垂直连接用垂直线表示。垂直连线传送如下状态:
- OFF, 位于垂线左侧的所有水平连线的状态是OFF。
- ON, 位于垂线左侧的一条或多条水平连线的状态是ON。
梯形图中的功能块
在梯形图中,除了使用线圈和触点外,你还可以插入功能块和程序。被插入功能块的第一个输入和第一个输出与梯形网络相连接。因此,第一个输入变量和第一个输出变量必须是布尔型变量。
功能块可用在与触点相同的位置上。这就是说,功能块 梯形网络的左侧。
置位/复位线圈
线圈可定义为置位或复位线圈。一个置位线圈不能改变相关的布尔变量的TRUE值。这样,一旦把变量设置为TRUE,则置位线圈保持TRUE不变
同样地,复位线圈不能改变相关的布尔变量的FALSE值。这样,一旦把变量设置为FALSE,则复位线圈 保持FALSE不变。
把LD用作FBD
当使用LD语言工作时,你常希望用触点网络去控制调用其它的POUs程序。在这种情况下,你可以把一个线圈的结果值存入一个全局变量中,并在其它地方使用这个变量。你也可以使用这个结果值去直接调用一个FBD网络。
为此,你插入一个带EN-INPUT输入端的元件。这种元件可以是一般运算,函数,功能块或程序,它们带有一个附加的输入标记”EN”。这个EN-INPUT数值总是布尔型,并且只有EN端为TRUE时型,并且只有EN端为TRUE时,才能调用该元件。
一个EN元件与线圈并联连接。EN-INPUT端连接到触点与线圈之间的连线上。当这条连线传送ON状态时, 才能调用EN-component元件。
从这样一个EN-component元件开始,你可以像用FBD语言那样去开发你的网络。
图2.2.4. 使用EN-operator运算元件的局部LD网络。
2.3. 调试,在线功能
采样跟综〔Sampling Trace〕
采样跟综使你有可能跟综程序的数值变化过程,采样跟综依赖于所谓的触发器事件。这就是事先定义的布尔变量(触发变量〕的下降或上升边缘。
TWinCAT PLC使你能够跟综20个变量的500个数值。
调试(Debugging)
TWinCAT PLC的调试功能'帮助你找出程序中的逻辑错误。
为了选择调试功能,执行命令“Project''Build Options',并在对话框中选择 'Debugging' 选项、
断点(Breakpoint〕
TWinCATPLC支持中断点的设置。当程序遇到中断点时,停止执行。这时你可以查看中断点处所有的程序数据〔即变量值〕。
在所有的TWinCAT PLC编辑器中可以设置断点。在文本编辑器中,可以在行号上设置断点。在FBD和LD中,中断点设置在网络号上。在SFC中,中断点设置在步上。
单步〔Single step〕
单步的含义:
在IL中:程序一直执行,直到遇到下一个CAL,LD 或JMP指令。
在 ST中: 执行下一个指令。
在FBD, LD中:执行下一个网络。
在SFC中:执行下一步的动作。
通过步进方式,你可 以检查程序的逻辑是否正确。
单循环〔Single cycle〕
如果选择‘ SingleCycle’选项,则每次循环之后,程序停止执行。
监视〔Monitoring)
采用在线方式,在可视变量说明语句的后面,对控制器中的现行值进行监视。
为了能够监视可视变量,执行命令 'Project''Build Options', 并在对话框中选择‘Monitoring’选项。
流程控制(Flow Control〕
采用快照的方法,通过定义快照区并产生快照,你可以显示一个循环周期内的变量值。这样,在不停止执行程序的情况下,快照区中的一行内的任一变量都可采用现行值来进行监视。
仿真〔Simulation〕
采用仿真方式,用户程序可以在PC机上运行,而代替PLC。在这种方式下,所有在线功能都在工作,不用任何硬件你就能够对你的程序进行逻辑校验。
2.4. 标准
IEC1131-3
IEC 1131-3 是PLC编程语言的国际标准。
TWinCAT PLC提供了国际标准中所描述的所有编程语言。
3. 让我们写一段小程序
现在我们来写一段小程序。该程序用于控制交叉路口的两盏交通灯。这两盏交通灯将交替出现红,绿阶段。为了避免事故,我们将插入黄和黄/红转换阶段。红色和绿色阶段要比黄色和黄/红转换阶段持续的时间长。
这个例子将告诉你怎样用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程序,观看激活步〔蓝色〕的变化。打开步骤和传送,监视各个变量。
4. TWinCAT PLC 的详细组成部分
在下面的章节中,你将找到对TWinCATPLC特性的详细说明。我们将仔细研究每个 菜单项以及它们的用途。
两个菜单项Insert’和‘Extras’取决于激活的子窗口〔通常是带有光标的窗口〕。因此,在编辑器一章中,对它们进行说明。
4.1. 操作项目
用于操作整个项目的菜单命令放置在菜单项'File'和'Project'的下面。在菜单项 'Project'下面的某些命令仅用于操作目标(the...Objectitems).在下一章中,对它们进行描述.
'File''New'
用这个命令打开一个名称为‘Untitled’的新项目。当存这个项目时,必须更改这个名称.
'File''Open'
用这个命令打开已有的项目。如果一个项目已被打开并修改,那么,TWinCAT PLC询问是否存这个项目。
标准窗口FileOpenDialog出现.从文件表中选出一个扩展名为”*.pro”的项目文件。这个文件必须存在,否则,用open命令来建立一个项目是不可能的。要使用NEW命令建立项目。
为了打开最近使用的一个项目,使用File菜单中Exit命令后面的菜单项。
'File''Close'
这个命令用于关闭正打开的当前项目。如果当前项目被修改,那么TWinCAT PLC询问是否存这个项目。
如果要存的项目名称为‘Untitled’,那么必须按照下面‘File’‘Saveas’中所描述的方法确定项目的名称。
'File''Save'
如果项目已被修改,那么用这个命令存当前项目.
快婕键:<Ctrl>+<S>.
如果要存的项目名称为"Untitled",那么必须按照下面File’‘Save as’中所描述的方法确定项目的名称.
'File''Save as'
这个命令用于把当前的项目存到一个不同的文件中,原有的项目文件不被改变.
选择这个命令以后,标准窗口SaveDialog打开。选择已有的文件各或输入 一个新的文件 。灰后击一下OK按钮。当前的项目就被存到指定的文件中。
如果文件名已经存在,TWinCAT PLC提示你是否覆盖这个文件。
'File''Save as library'
这个命令用于把当前项目作为库文件存起来,以便在其它的项目中使用.
首先,标准窗口Save Dialog出现。 选择一个已有的文件名或输入任何一个文件名。 然后击一下OK按钮。
重新建立整个项目。如果出现任何错误,则TWinCATPLC显示一个有关的信息。含有错误的项目是不能作为库文件 存入的。
如果没有错误发生,那么 当前项目作为库文件存入指定的文件中.
如果文件名已存在,那么 TWinCAT PLC提示你是否覆盖这个文件。
一个 用途在库管理器一章中描述。
'File''Print'
这个命令用于打印激活窗口的内容.
快捷键: <Ctrl>+<P>.
选择这个命令后,标准窗口PrintDialog出现。选择你需要的选项或组态打印机,然后击一下OK按钮。
打印激活窗口中所显示的目标。
打印项目的部分资料或整个项目资料,使用菜单项‘Project’‘Documentation’.
把一个外部文件的注释插到一个目标资料中是可能的。具体做法在全局变量一章中描述.
为了确定打印的标题和脚文,使用命令‘File’‘Printer Setup’.
'File''Printer Setup'
这个菜单选项允许你设置打印的脚文和标题,以及确定打印机的选项,如使用主象或风景画式的格式等等.
选择这个命令后,printer Setup 话框出现.
图4.1.1 Printer Setup对话框
对每一页输入脚文和标题。可插入下面的文本符号:
(Page) 打印当前页
(Date) 当前日期
(FileName) 项目文件的路径
(POUName) 当前打印的目标名
按<Ctrl>和<Tab>键输入标记.
在第一个'TAB'标记前的任一个文本左对齐打印。在第一个与第二个TAB标记之间的文本对中打印.其余的文本将右对齐打印。
你可以选择是否每一页有一个边框,是否每一个新目标另起一页,并且你可以调整左边框 的宽度。缺省值 是10 mm.
最下面的PrinterSetup按钮是用于打开标准的Windows Printer Setup 对话框, 这个对 话框的内容取决于你的打印机类型.
'File''Exit'
这个命令用于退出TWinCAT PLC.
快捷键:<Alt>+<F4>.
如果一个项目已经打开 并被修改,则TWinCAT PLC询问是否存这个项目
'Project''Check'
这个命令用于检查你的程序是否有语法错误.发生的每一错误显示在另一个窗口上,该窗口称为信息窗口。
与命令'Rebuild all'比较,没有编码产生.
'Project''Build'
对所有更改的POUs和结构产生编码.
打开信息窗口,显示编译的过程和发生的错误.
注意:
如果PLC支持online change功能,那么,Build功能才能被支持.
Onlinechange功能的含义是,在PLC运行期间可以改变PLC中程序的某些部分,而不用中断执行程序,所有的数据尽可能保留。
'Project''Rebuild all'
对所有更改的POUs和结构产生编码.
打开信息窗口,显示编译的过程和发生的错误.
信息窗口:
信息窗口显示编译的过程。显示错误所在的POU行和类型。在信息窗口中,选择显示错误的那一行, 并敲<ENTER>键(或双击鼠标).POU的一个窗口打开。选择网络,现 在你可 以容易地修改错误.
使用<F4> (<Shift>+<F4>)键,你可以得到下一个(或前一个〕错误。
图4.1.2.信息窗口:编译10个POUs,产生4个错误.
在附录中,你可找到所有的错误信息表。
'Project' 'Options'
这个菜单包括所有的项目选项。可被设定的选项在下一页中描述:
'Project''Building options'
这个命令允许对产生编码的选项进行设置.
选择这个命令后,出现一个对话框.
图4.1.3. Build Options 对话框
EnableDebugging
选择这一选项,使得产生附加的调试编码。
当有C-Code编码产生时,才选择这一选项.
EnableMonitoring
选择这一选项 ,使得产生附加的监视编码
当有C-Code编码产生时,才选择这一选项.
Enable Online Changes
你可以选择是否在线更改你的程序。当有C-Code编码产生并且PLC允许在线更改程序时,选择这一选项才是恰当的.
Number of Data segments
这个号码决定控制器为你的项目所留出存储空间。一个数据存储区等于32Kb。当有可能在线更改程序时,选择这一选项才是恰当的.
编译前自动存储 Autosave before compilation
如果选择了这一选项,那么在做任何编译之前,你的程序被自动存储.
询问项目信息 Ask for Projectinfo
如果选择了这一选项,那么当一个项目第一次被存储或者用新的名称存项目时,项目信息对话框便自动打开。
这一选项对工作区来说是特殊的。它不能存在项目文件中,而存在TWinCATPLC.ini 信息文件中。
用户信息 User Info
用这个命令打开一个窗口,该窗口中有项目的用户信息.
图4.1.4. User Information窗口
用户信息由用户名,名称的开头字母和公司名称组成。这些选项对一个工作 来说是特殊的。它们不能存在项目文件中,而存在 TWinCAT PLC.ini 信息文件中.
目录 Directories
用这个命令打开一个对话框,你可以插入目录路径,在这里有TWinCAT PLC的库文件和编译文件.
图4.1.5. 目录路径
这些路径对一个工作区来说是特殊的。它们不能存在项目文件中,而存在TWinCAT PLC.ini 信息文件中.
存储选项 Save options
图4.1.6. Save Options对话框
你可以选择TWinCATPLC是否在下次存储项目时,建立项目的备份版本。如果选择了这一选项,那么TWinCATPLC将把实际项目存到扩展名为。bak的文件中。这样,你可以在最后的安全期之前,恢复这个版本文件。已有的备份文件不能重写。为了得到一个新的备份文件,就要删除或移走已有的备份文件。
如果选择了AutoSave这一选项后,那么当时间插入到AutoSaveInterval自动存时间间隔之后,TWinCATPLC将把项目存到扩展名为.asd 的一个临时文件中。当TWinCAT PLC正常结束时,这个文件被删除。否则,不能删除这个文件。当再次打开文件时,TWinCAT PLC检测这个安全文件,并打开下面的信息框:
图4.1.7. 打开一个用项目的对话框
你可以选择是打开自动存储的备份文件还是最后一 次存储的项目文件。.
要知道,当你选择自动存选项时,‘Extras’PreviousVersion’命令可以把一个目标复位到上次的存储状态,无论上次是手动存储还是自动存储。.
自动存选项是非常受欢迎的。因为当你的计算机出现故障(不是由TWinCATPLC引起)或是当电源出现故障时,自动存选项存储你所做的工作.
TWinCAT PLC提供数据保护
为了保护你的项目免于未授权使用,TWinCATPLC提供了定义口令的方法。为此,用命令project’‘options’password’打开口令对话框。口令对话框如下所示:
图4.1.8. 回令Password对话框
在passward栏中输入你的口令,该口令用于打开你的项目。每输入一个字母,屏幕上出现一个星号。在ConfirmPassword一栏中确认你的口令。用OK按钮关闭对话框。如果出现下面的信息:
?The password and its confirmation arenot equal“,
这是因为你的口令和确认的口令不一致。你要重新输入口令并确认。.
现在,如果你正存文件并且要再次打开它,那么TWinCAT PLC提示你输入口令,在输入了正确的口令后,项目才能被打开.
除了这个一般的口令外,你还可以定义写保护口令。因此,在上面对话框〔图4.1.8〕的有关栏目中输入写保护口令,并确认你的口令.
不知道写保护口令,也可以打开一个有写保护的项目。因此,当TWinCAT PLC要求你 输入写保护口令时,在Cancel按钮上击一下。现在你可以编译项目,装入项目,仿真项目等等。但是,你不能存项目.
要小心不要忘记不的口令!否则你要去找系统管理员。
自动格式化 Autoformat
如果选择这一选项,该菜单命令前显示(ü)。用IEC 1131-3指令表(IL)语言所写 的程序将被自动格式化。空格被插入并且关键字被大写。这将有助你写出更为可读的程序。试试看。
自动装入Autoload
如果选择这一选项,该菜单命令前显示(ü)。那么每次你启动TWinCATPLC时,上次工作的项目被打开〔显示上次存项目时所占有的工作空间〕.通常这是很有用的。
自动说明Autodeclare
如果选择这一选项,那么当你输入一个还没有进行说明的变量时,一个用于说明变量的对话框打开。
现在已经解释了所有的选项,接着我们继续研究Projict菜单。
'Project''Document'
这个命令允许你打印整个项目的资料或部分项目资料.
一个完整的项目资料由以下部分组成:
- POUs
- Structures 结构
- Task configuration 任务组态
- Sampling Trace 采样跟综
- Cross References 交叉参考
- The call trees of POUs and Structures POUs和结构的调用
- The Global Variable List 全局变量表
- The PLC Configuration PLC组态
- A table of contents 目录表
选择这个命令后,出现一个对话框,你可以在对话框中选择你想要打印的资料:
图4.1.6 Document Project 对话框
项目的输出和输入
TWinCAT PLC提供了输出或输入项目的可能性。因此,你有机会在不同的IEC编程系统之间进行项目的交换。到目前为止,只有IL和ST语言有标准的交换格式。由于这个原因,TWinCAT PLC使用自己的图形语言格式.
'Project''Export'
所有的POUs,PLC组态和一个程序的结构都保存在一个ASCIIFile文件中,这些元素的格式有IEC 1131-3的通用元素格式.
PLC组态和用FBD或LD编写的POUs有TWinCAT PLC的特殊格式。
'Project''Import'
一个输出文件被输入到一个项目中
如果被输入的POU与已有的POU名称相同,那么它的名称有一个引导线。
'Project''Merge'
Merge命令允许你把其它项目的目标拷贝出来。
标准窗口文件对话框打开,你必须从中选择想要的项目。然后打开另一个对话框,这个对话框允许你选择你想要拷贝的目标:
图4.1.7. Merge Project 对话框
从POU表中,你可以选择想要的POUs;从结构表中,你可以选择想要的结构。此 外,你可以选择是否拷贝SamplingTrace采样跟综,GlobalVariables全局变量或PLC Configuration PLC组态
用OK按钮.确认,这样选择的目标从被选的项目拷贝到当前的项目中。
如果一个合并的POU与已有的POU名称相同,那么它的名称有一个引导线。
‘Project’‘Project Info’
用这个命令,你可以把信息存到你的项目中。选择这一命令,出现下面的对话框:
图4.1.8. 项目信息对话框
一个完整的项目信息包括以下内容:
- 文件名 File
- 目录 Directory
- 最后更改的日期 The date of the last change
这些内容由TWinCAT PLC给出. 你不能改变信息对话框中的这些内容。
你可以增加下面的内容:
- 项目的标题 title ,
- 作者的姓名 author,
- 版本号 version
- 项目的描述 description.
每一内容都是可选项。按‘Statistics’按钮,你可以得到有关实际装入项目的统计记录。
'Project''Global Search'
全局检索允许寻找整个项目或部分项目中的某一字符.
'Project''Global Replace'
全局替代允许代替整个项目或部分项目中的某一字符.
4.2. 操作目标
目标/目标表
一个目标"Object"表示一个POU,一个结构或一个可视化元素。目标表Objectlist〔在屏幕左侧的小窗口〕包括一个项目的所有目标。目标的类型可在目标表上方的组合箱中选择。
要想把POUs改变为Structures, 则在‘POUs’文本上击一下,然后选择Structures.
'Project''Delete Object'
这个命令删除目标表中当前选择的目标 (POU, Structure 或可视化元素) 快捷键 <DEL>.
选择这个命令后,系统提示你确认。命令按’yes’按钮,则目标被删除.
如果目标的编辑窗口是打开的,那么在删除目标以后,编辑窗口将自动关闭.
'Project''Add Object'
建立一个新目标〔快捷键<INS>). 新目标的类型取决于在Object 类选择 窗 口 表中 的 当前选项。.
选择这个命令后,出现一个对话框,该对话框 取决于新的目标类型.
如果新目标是一个POU,那么必须选择新目标的类型〔函数,功能块或程序〕以及想要的编程语言。
图4.2.1. 建立 POU的对话框
'Project''Rename Object'
这个命令是给目标表中当前选择的目标 (POU, Structure或可视化元素) 重新定名.
‘Project’‘Convert Object’
用这个命令,你可以把一个用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是不同的,其实它们所做的工作却是相同的.
'Project' 'Open Object'
这个命令把目标表中当前选择的目标(POU, Structure或可视化元素) 装入编辑器中。
'Project''Show Call Tree'
这个命令打开一个窗口,该窗口是目标表中当前所选目标(POU,Structure)的调用 树形图
注意:必须要编译项目!
调用树形图包括对POUs的调用以及结构的来源.
图4.2.2. 调用树形图举例
'Project''Show Cross Reference'
这个命令打开一个对话窗口,用于找使用变量的地点。当编译项目时,产生一个参考来源。因此,首先要编译你的项目.
图4.2.3. 符号In1的Cross References 参考来源,内容有POU行号,Read/Write 读/写的使用
你若想要知道一个变量使用的地点,则输入变量名或地址,并按’Get References’按钮,如果你想要进入某一地点,那么选择该地点并按’Go to ‘按钮〔或(enter)键 或双击鼠标键。).
'Project''Show Unused variables'
用这个命令你得到一张所有初始定义 而未被使用的变量表.
‘Extras’‘PreviousVersion’
用这个命令,编辑的目标〔被装到激活窗口中〕复位到上次存储的状态。这个状态可以是手动存也可以是自动存。因此,如果你选择了自动存,那么使用这个命令时,则有可能改变了不想要改变的目标状态.
4.3. 常用编辑命令
下面的命令在所有的TWinCAT PLC编辑器中是相同的。这些命令设置在菜单 'Edit'中.
'Edit''Undo'
该命令表示,在当前打开的编辑窗口中,不做最后一次所做的操作。
快捷键: <Ctrl>+<Z>.
注意:不是所有的编辑 器都支持undo功能,undo功能不可以用于整个项目的插入,删除或重新给一个POU或一个结构定名。
如果使用两次undo,那么第一次使用undo之前的状态被存储。.
'Edit''Cut'
把编辑窗口中的当前选项移到剪贴板〔Clipboard)上 .选项在编辑窗口中 被 删 除。
快捷键: <Ctrl>+<X>.
'Edit''Copy'
把编辑窗口中的当前选项拷贝到剪贴板上。编辑窗口的内容不被修改。
快捷键: <Ctrl>+<C>.
'Edit''Paste'
把剪贴板上的内容插到编辑窗口中当前光标位置上。在图形编辑器中,如果图形结构句法正确,才能执行该项命令
快捷键: <Ctrl>+<V>.
'Edit''Delete'
删除编辑窗口中的当前选项,不改变剪贴板上的内容
快捷键:<Del>.
'Edit''Search'
该命令允许检索当前编辑窗口中的某一字符串。选择这一命令后,标准Windows Find对话框出现。该对话框一直打开,当按‘Cancel/close’按钮时,对话框关闭。
对话框选项:
FindWhat
在这个框中输入你想要寻找的文本.
MatchWhole Word only
如果选择这一项,则查找命令按照整个单词来查找文本而不是按照单词的一部分来查找文本。
MatchCase 严格大小写
如果选择这一项,则必须注意字符串的大小定。比如说,若输入大写的字符串'Case'就不能查找到小写的字符串‘ case’.
Direction
如果选择'Up',则从编辑 器的当前位置向上查找。否则,从当前位置向下查找.
Findnext
按照选择的方向,从选择的位置开始村寻。如果找到文本,就做出标记,如果没有查到文本,那么文本信息栏中出现如下信息 text '<Text> not found.'注意,没有找到的文 本可能被查找对话框遮盖。检索停在编辑窗口内容的始端或末尾。
Cancel/Close
退出查找命令。.
注意:说明语句和文体具有不同的查找区。如果你要在一个字符串上检索不同的目标,就使用 ‘Project’‘Global find’命令.
'Edit''Find next'
输入参数〔查找的文本,检索的方向等等〕,重复查查找操作.
快捷键:<F3>.
'Edit''Replace'
这个命令用于检索一个文本并用不同的文本业替代.
选择这个命令后,出现标准的查找和替代对话框。这个对话框一直打开,按'Cancel'/'Close'按钮关闭对话框。在另一个检索对话框中,你找到一栏,并输入文本,那么这一文本将替代被检索的文本。.
注意:说明语句部分和文体有不同的替代区。如果你想要根据一个字符串检索不同的目标,那么使用 ‘Project’‘Global replace’命令.
4.4. 常用在线命令
当写完你的程序之后,你很可能想要在你的硬件上去运行该程序或在PC中对它进行模拟。要想与PLC连接,则把你的下装在PLC上,察看其运行情况,对它进行调试并必要的修改。所有与这些操作有关的指令被装在’online’菜单项下。因为如果不做模拟,则需要一个从PC至你的PLC (RS232, 以太网,CAN总线等 .)之间的在线连接.
输入某一指令时,将给PLC输送一次服务,对此,PC机也会获得一个响应。
所有可供选用的在线指令均位于菜单项‘Online’名下。某些指令的作用取决于所选择的编辑器。
在仿真状态下,你的程序是在PC机内执行。因为所有在线功能都具备,你不需 要 特殊硬件即可对你的项目进行调试。这是一个非常有用的功能,该功能不仅仅适合于你刚开始的一些小项目。
'Online''Login'
这个命令把系统与PLC连接起来。如果项目没有建立,则自动建立。如果编译产生错误,则TWinCAT PLC不处于在线 方式.
当登录到系统时,TWinCAT PLC检查是否有一个 用户程序装入到PLC中。如果有一个 用户程序,则检查该程序是否与实际被装入TWinCAT PLC的项目相一致。如果相一致,则编程系统由编辑方式转为在线方式。否则,TWinCAT PLC询问你是否要下装新的程序。
在线方式意为:
· 不能编辑项目.
· 可使用所有的在线功能.
· 显示〔监视〕所有的可视化变量.
注意:当登录到你的硬件系统时,TWinCAT PLC进行在线连接。由于各种原因, 有 可 能 发生故障。如果发生故障,有如下信息显示:
"CommunicationError: Logout Performed"
通讯故障:退出系统.
在'Online''Communication Parameters'一栏中,检查设置的参数是否与你的控制器的参数相一致。特别值得注意的是,接口号码是否正确〔COM1:电缆与COM1连接了吗?〕控制器中的波特率与编程系统中的波特率是相同的。(在 TWinCATPLC中,缺省值为9600).
注意:当登录成功时,TWinCAT PLC把最后装入PLC的项目与实际装入TWinCAT PLC中的项目进行比较,如果它们不一致,则出现下面的信息:
“ Program has changed! Download the newprogram?”
程序已改变!下装新的程序码?
现在你可以选择’NO’,并处于在线方式,或者你输入‘YES’,把当前被装入TWinCAT PLC 中的项目下装到PLC中。
'Online''Logout'
用这个命令,则由在线方式回到编辑方式。关闭与控制器的连接,退出 仿 真.
'Online''Download'
用这个命令,把一个已编译的项目装入PLC中。当登录到PLC系统时,该命令才被执行。
'Online''Run'
这个命令用于运行你用TWinCAT PLC编写好的程序。
快捷键: <F5>.
当你装入一个新程序后,PLC通常仍是 ‘Stop’,状态〔取决于固件〕。这就是说被装入的程序没有执行。选 择‘run’命令,则程 序将被执行。当遇到一个断点,一个‘stop’命令或一个单循环命令时,程序停止执行。
'Online''Stop'
停止执行装入PLC中的程序.
‘Online’‘Reset’
把PLC中的数据初始化。这些数据或者是POUs说明语句中赋给的数值或者为0.为安全起见,在PLC复位前,你必须确认这个命令。
复位后,不执行〔stop〕用户程序。
'Online'
'Toggle Breakpoint'
这个命令的作用取决于当前光标的位置。如果光标在一个有效的中断点位置上,那么在这个位置设置或 清 除一个断点.
有效的中断点位置:
· FBD或梯形图中的每个网络
· SFC中的每一步
· IL和ST中黑灰色的行号
快捷键:<F9> or <Shift> and并双击鼠标.
中断点用青蓝色表示.
程序执行到中断点停止。中断点变为红色。为了继续执行程序,使用Run,Single Cycle, Step In或者Step Over命令〔所有这些命令在Online菜单中〕.
'Online'
'Breakpoint Dialog'
有这个命令打开一个对话框,设置 和 清 除整个项目中断点。 这个对话 框显示 所 有 的 断点并允许找查断点设置的位置.
图4.4.1: 中断点对话框
POU的下拉表包括项目的所有POUs,Location下拉表包括你选择的POU的所有有效断点的位置.
Add是把一个中断点加到所选POU的某一行上〔网络或步〕.该中断点加到中断点列表中。
Delete是删除在中断点列表中所选择的中断点.
Delete all是删除所有的中断点.
Goto是打开某个POU,并在某个中断行上设置光标。该中断行在中断点列表中选择.
'Online'
'Step Over'
该命令是执行一个单步。一个POUs的调用 被 看 成一步〔在执行这个POU以后, 停 止执行〕。在SFC中,该命令是执行一个完整的动作.
快捷键:<F10>.
'Online'
'Step In'
步进到下一个语句。即使这一语句是在一个不同的POU。如果下一个语句是调用另一个POU,那么在所调用的POU第一个语句之前,程序停止执行
快捷键:<F8>.
'Online''Single Cycle'
开始执行程序,然后停在一个PLC循环周期的末端〔或者停在下一个中断点上〕.
'Online'
'Write Values to PLC'
and
'Online'
'Force Values to PLC'
为了改变一个变量的值,在变量的说明语句上双击鼠标键或者选择这个变量,然后按<ENTER>键.
你将得到一个对话框,可用来改变所选变量的值.
图4.4.2. 用于写新的变量值对话框
你按OK按钮以后,该数值被标记做出更改。实际上,在控制器中并未更改。所有被标记的变量数值用红色显示。这就使你有可能一次更改几个变量〔在二个控制器周期之间〕。
用'Writevalues’命令,所有被标记的变量新值写入PLC中〔然后再次被监视〕。它 们 通过用户程序写入并立即被更改。'Forcevalues’命令与Writevalues’命令功能相同,但 在每个控制器周期后写数值,直到执行’ ReleaseForce’命令。只要数值被强行设置, 则这些数值用红色显示.
'Online'
'Release Force'
PLC中的Force表被释放。数值不再强行设置.
'Online'
'Show Call Stack'
当程序停在中断点上时,你可以执行这一命令,这时,打开一个对话框,该对话框有一个调用堆栈中当前POUs的列表和行〔网络〕号,以及下一个被调用的POU.
图4.4.3. 调用堆栈举例
第一个POU总是PLC_PRG,因为程序从这里开始执行.
最后的POU总是某个POU,在这里程序停止执行.
从POUs列表中选出某个POU之后,按‘GoTo’按钮,被选POU的一个窗口打开,显示相应的行,网络,和下一个被调用的POU.
'Online' 'Display Flow Control'
流程控制帮助你调试你的项目,而不用使程序停止执行。
当检查到菜单项为(ü)时,流程控制被激活。
流程控制在所选择的激活编辑窗口上工作。并取决于编写POU所使用的语言。如果激活窗口 不 是用IL,ST或FBD编写的一个POU,则不能显示流程控制。
用IL编写POU的流程控制:
图4.4.4: 用IL编写POU的流程控制
在每行的左侧显示了另一个区域。当控制器正在运行以及某行被执行时,该行的号码区被标记〔绿色〕,并且显示累加器的内容。
用FBD编写POU的流程控制:
图4.4.5: 用FBD编写POU的流程控制
在FBD中,程序通过的每一行,其网络号区被标记〔绿色〕.
对于每一行,你得到通过‘passed’这一行的实际数值。对于布尔数值,当TRUE通过 时,这一行加亮显示〔蓝色〕,否则为一般显示。对于不是布尔数值来说,插入一个文本区,该文区含有通过这一行的实际数值.
'Online''Simulation'
如果选择 仿 真方式,则在线服务不在PLC上工作,而是在 仿 真程序上工作。 仿真 程 序如同编程系统一样,在相同的PC下 运行.
'Online''Communication parameters'
这条命令允许你设置串行接口的参数。
当通过串行接口进行通讯时,有下面的对话框出现:
图4.4.6. 通讯参数对话框
PLC中的通讯参数和控制器中的通讯参数要一致,这一点很重要。
所选择的参数与项目一起保存起来.
4.5. 关于视图
TWinCAT PLC提供了一些组态TWinCATPLC窗口图象的可能。为此,使用'Options'菜单项下的命令。所有的组态保存在‘TWinCATPLC。ini’文件中,并在下一次起动TWinCAT PLC时重新被保存。
'Options''Toolbar'
使用这条命令,TWinCATPLC工作区上方的工具条出现或移走。当检查到菜单命令后面的标记(ü)时,工具条就出现。
图 4.5.1.带画像的工具条
'Options''Statusbar'
使用这条命令,下方的状态条出现或移走。当检查到菜单命令后面的标记()时, 状态条就出现。
图4.5.2. 表示当前项目和在线状态的状态条
通常,状态条显示当前项目的文件,如果选择一个菜单命令中要按一下鼠村键,则状态条就给出这条命令的主要功能描述。如果不选择这条命令,你可以移动鼠标,按放弃键.
'Options’’Declarations as Tables'
所有的说明语句可以用通常的文本方式显示或者用表格表示。使用这条命令,你可以在文本和表格方式之间进行转换.
'Options''Font'
用这条命令,你可以选择TWinCATPLC编辑器的所有字型。且字型的尺寸可增大显示并加大TWinCAT PLC编辑器的打印输出。
用这条命令,你可以编辑TWinCAT PLC的颜色设置。你可以设置行号区〔TheLine Number〕的颜色,中断点〔Breakpoint Positions〕位置的颜色, 一个激活 的中断点 〔Active Breakpoint〕颜色,布尔值监视, 〔The Monitoring of BOOL Values〕的当 前位置颜色,或通过位置〔the Passed Position〕的颜色.
选择上面的某一菜单项,则用于编辑颜色的标准对话框打开.
‘Options’‘Position Mark’
在这条菜单命令的下面,你可以选择想要的当前选项是用虚线框显示,还是用实线框显示或者是用填充框显示.
‘Options’‘Monitoring’
BYTE,WORD或DWORD类型的变量值可用十进制,十六进制或二进制显示.
4.6. 编排窗口
为了编排你的TWinCATPLC窗口,有四个不同的命令可供选择,这些命令位于 'Window' 标题的下面.
'Window''Tile vertical'
用这条命令,所有打开的窗口并排摆放。这样就使打开的窗口不重迭,并覆盖整个工作区.
'Window''Tile horizontal'
用这条命令,所有打开的窗口上下摆放,这样就使打开的窗口不重迭,并覆盖整个工作区.
'Window''cascade'
所有打开的窗口以阶形连接方式排列.
'Window''Arrange Symbols'
所有显示记号的窗口在主窗口工作区的底部排成一行.
'Window'‘Messages’
选择这条命令后,会有上一次编译信息的窗口打开。在一条信息上单击一下,你可以打开某个POU的窗口用于查阅信息。如果你在一个错误信息上单击一下,产生错误的某行为蓝色显示.
'Window'‘Compare Projects’
用这条命令,你可以把一个打开的项目与另一个项目进行比较。例如,如果你要存一个目标,而你不能确信自从上次保存以来,你在哪个地方做了更改,这时,你可以把项目与它自身进行比较。
选择这条命令后,用于打开项目的标准对话框出现。选择你要与当前项目进行比较的项目,按OK按钮,一个窗口打开,在这个窗口里显示比较的结果。被选项目的所有 POUs 排列成表,在每个POU的后面,你可以在括号中找到这个POU的更改信息、
有五个不同的信息:
- “Unchanged“:
- 这个POU与当前的POU相同.
- “Deleted“:
在当前的POU中,这个POU不存在.
- “Implementation changed“:
- 当前POU的实施部分与被比较的POU不同。
- “Interface changed“:
当前POU的说明语句部分与被比较的POU不同。
- “Interface andImplementation changed“:
当前POU的说明语句部分以及实施部分与被比较的POU不同。
'Window' ‘PLC Configuration’
选择这一命令后,用于组态控制器的编辑器打开〔见5。9节〕。.
'Window’‘Global Variables’
选择这一命令后,编辑 全局变量的窗口打开(见5.10节〕.
'Window'‘Library Manager’
选择这一命令后,库管理器窗口打开〔见 5.11节〕.
'Window'‘Task Configuration’
选择这一命令后,任务组态编辑 器窗口打开(见5.12节).
'Window'‘Watch Variables’
选择这一命令后,观 测变量窗口打开(见5.13节).
'Window'‘Sampling Trace’
选择这一命令后,定义采样跟综的窗口打开〔见5.14节〕.
4.7. 求助信息 !
如果你对怎样使用TWinCAT PLC以及IEC 1131-3语言元素有什么问题,可以请求, TWinCATPLC在线帮助。在这里你将找到这本手册的所有信息。你可以用两种不同方式使用Help.
用<F1>键打开 帮助对话框,该对话框向你提供实际所选标题〔关键词,菜单项,对话框等等〕的帮助。
TWinCATPLC的在线帮助 (onlinehelp)与大多数Windows操作系统的在线帮助是一样 的。所以,如果你有使用Windows操作系统的经验,那么可以跳过下面的内容.
'Help''Contents'
使用这条命令,你进入TWinCAT PLC在线帮助的首页。用鼠标器在一个绿色的有下划 线的标题上单击一下,那么一个新的求助框打开,在这里有对这个标题的解释。仅仅用你的鼠标器击几下,你就将得到任何想要的信息.
'Help''Search'
你也可以检索一个特殊的标题。如果你已经进入Help中,你可以使用‘Search’按钮打开检索对话框.
在检索对话框的上部,有一个所有Help标题的列表。选择想要的标题,〔或在列表的上方线里输入标题〕。然后按‘listsubject’按钮。在下方的区域中,出现一个列表,表中有所有的题目,选择其中 一个,并按‘Go to’按钮,就进入到Help帮助页中.
5. TWinCAT PLC编辑器
5.1. 说明语句编辑器
TWinCATPLC的所有语言编辑器都由一个说明语句部分和一个语体部分组成。它们之 间用一条分隔线分开。为了移动分隔线,用鼠标器在分隔线上单击按下,然后拖动, 在移动时,你要始终按着鼠标键.
关键词 KEY WORDS
在所有的TWinCAT PLC编辑器中,关键词都要大写。
说明语句部分
在说明语句中,说明所有的变量。这些变量仅在这个POU中使用。说明语句的句法符合IEC1131-3的标准句法
举例说明TWinCAT PLC编辑器中变量说明:
图5.1.1. 说明语句编辑器
输入变量
在关键词VAR_INPUT和END_VAR之间说明所有的变量,它们作为输入变量使用。这就是说,在起动程序时,设置这些变量的数值.
输出变量
在关键词VAR_OUTPUT和END_VAR之间说明所有输出变量。在正调用的POU内,这些变量易受影响.
局部变量
在关键词VAR-END_VAR之间,说明所有局部变量。这些变量不能在POU以外使用。在POU内它们被说明.
'Insert' 'Declaration Keyword', 'Insert' 'Type'
在'Insert'菜单标题下面,你可找到 'Declaration Keywords...'和'Type...'的命令, 如果你使用其中一个命令,你得到所有允许的关键词列表和所有允许的数据类型列表。如果你在一个关键词上单击一下,则关键词自动地插到光标位置上.
TWinCAT PLC支持下面基本的数据类型:
BOOL(8 Bit), SINT (8 Bit), USINT (8 Bit), INT (16 Bit), UINT (16 Bit), DINT (32Bit), UDINT (32 Bit), REAL (32 Bit), STRING (variable length), BYTE (8 Bit),WORD (16 Bit), DWORD (32 Bit), TIME (32 Bit), DATE (32 Bit), DATE_AND_TIME (32Bit), TIME_OF_DAY (32 Bit).
除此以外,TWinCAT PLC支持一维,二维和三维数组。使用下面的句法说明一个二 维数组:
<数组名 >:ARRAY[<lb1>..<ub1>,<lb2>..<ub2>] OF <元素类型 >.
lb1,lb2代表数组的下边界,ub1, ub2代表数组的上边界.
例如:
pack_of_cards: ARRAY [1..13, 1..4] OF INT;
快捷键的扩展性能
在离线方式下,用<Ctrl>+<Enter>键退出一行,激活说明语句编辑器快捷键的扩展性能。
当输入说明语句时,使用下面的快捷键。
几乎一行的最后一个标识符是说明语句的变量名,说明语句 的类型由一行的最后一个标识符来确定。
Fehler!Textmarke nicht definiert. Bor BOOL BOOL
Fehler!Textmarke nicht definiert. Ior INT INT
Fehler!Textmarke nicht definiert. Ror REAL REAL
Fehler!Textmarke nicht definiert. Sor STRING STRING
如果不能通过最后的标识符确定数据类型的话,则数据的类型为BOOL.最后的标识符有作为类型使用〔见下面的第一个例子〕。
Fehler! Textmarke nichtdefiniert.任何一个整数作为一个初始值或是一个字符串的字长。该字长取决于说明语句的类型〔第二和第三个例子〕.
Fehler! Textmarke nichtdefiniert.一个地址 (%IX0.3) 增加一个AT ...修改量〔第四个例子〕.
-后面带一个分号 (;)的文本是一个注释〔第三和第四个例子〕.
Fehler! Textmarke nichtdefiniert.在一行内的所有其他字符可被忽略〔例如:最后一个例子中的感叹号〕。
例子:
A
A:BOOL;
A B I 2
A,B: INT := 2;
ST S 2; This is a string
ST:STRING(2); (* This is a string *)
X %MD12 R 5; real value
XAT %MD12: REAL := 5.0; (* real value *)
B !
B: BOOL;
说明语句编辑器中的行号
用离线方式,在某一行号上单击一 下就标明整个一行。
用在线方式,假如变量是一个结构变量,则在某一行号上单击一下就扩大或压缩 这一行的变量 〔你可以用变量前面的菱形来辨别结构变量〕.
'View''Declarations as Tables'
用这个命令,你得到用表格显示的说明语句编辑器,好像你在一个卡片索引箱中,可以选择输入变量,输出变量,局部变量和输入以及输出变量各自的卡片。
对每一变量,你可在下面的区域中输入如下内容:
Name: 插入变量名
Address: 插入变量地址 (AT-说明语句)
Type: 插入变量类型〔如果变量是一个功能块的状态,那么插入功能块〕。
Initial: 插入变量的初始值〔类似于赋值运算符":="〕.
Comment: 在这个区域里插入一个注释.
在说明语句中输入新变量
为了在表格中输入一个新变量的说明语句,你必须执行'Insert' 'New Declaration'命 令。使用这个命令,在说明语句编辑显示新的一行。在这行中Name一栏的缺省内容是‘Name’,Type一栏是‘Bool’,Initial一栏是‘TRUE’。你要改变这些值为想要的值。
举例:
图5.1.2. 表格式说明语句
地址〔Address〕,初始值〔Initial〕和注释〔Comment〕为可选项。一个正确的变量说明语句仅仅需要变量名和类型。在任何时候,你可以毫无问题地在变量的表格式和文本式之间进行转换。在线方式时,两种表达方式是相同的。
表格和文本方式之间的转换用Options’‘Declarations astables’命令.
在线方式的说明语句编辑器
在在线方式时,说明语句编辑器成为一个监视窗口。每行有一个变量,后面是等号 (=) 和变量当前值。如果这个变量没有被定义,则显示三个问号(???).
每个多元素变量的前面是一个菱形,例如:
在菱形上双击鼠标扩展变量,在下面的例子中,结构变量BAND3和子结构变量 TIMER 被扩展如下:
如果一个变量被扩展,那么所有它的组成成分列表于下。变量前的变成单线菱形。在这个菱形上再双击键,则变量被压缩,菱形再次为填充菱形.
在单元素变量上双击鼠标,一个写变量对话框打开。在对话框中,可以改变变量值。
新输入的值用红色显示并保持不变。当执行'Online''WriteValuestoPLC'命令时,所有更改的数值写入PLC中,这些数值再次用黑色显示.
用'Online''ForceValuestoPLC'命令,所有更改的变量强行变为新值,直到给出 'Online''Release Force'命令.
5.2. 文本编辑器〔常用功能〕
TWinCAT PLC文本编辑器具有Windows文本编辑器中的常用功能。
下面的菜单命令专用于文本编辑:
图5.2.1: 两个POUs文本〔Instruction List和Structured Text)的打开窗口.
'Insert''Operator'
显示在这个语言中可使用的运算符列表。如果选择其中一个运算符并用OK按钮关闭列表,则所选 的运算符插在当前光标位置上。
'Insert''Operand'
用这条命令,你打开一个操作数帮助对话框,上面包含所有被定义的变量 〔快捷键:<F2>〕.
有IL和ST中,为了得到操作数帮助 对话框,使用Insert’‘Operand’命令.
图5.2.2:插入操作数帮助对话框。最后一行显示变量的注释.
'Insert''Function'
显示所有可使用函数列表. 你可以在其中选择标准的或用户定义的函数。如果选择其 中一个函数,并用OK按钮关闭对话框,则被选择的函数插入到当前光标位置上。
'Insert''Function Block'
显示所有可使用功能块列表.你可以在其中选择标准的或用户定义的功能块。如果选择了其中一个功能块,并用OK按钮关闭对话框,则被选择的功能块插入到当前光标位置上。
在线方式的文本编辑 器
编辑器的在线功能是设置中断点和程序步。与监视相结合,用户就有了现代化的高级语言调试功能。
采用在线方式,文本编辑器窗口用一条垂线分成两部分。窗口的左侧是常用程序文 本。另一侧是显示左侧所使用的变量以及它们的当前值。在每个多元素变量的前面是一个菱形。在菱形上双击鼠标键,则菱形被扩展或压缩。〔见监视窗口,5.12节〕.
‘Extras’‘MonitoringOptions’
使用这条命令,你可以用在线方式组态你的文本编辑窗口,你可以调整文本窗口的哪一部分留作监视变量,以及一行中两个监视变量之间的距离。距离1个单位等于所选 字型的行高.
图5.2.3. Monitoring Options对话框
中断点可被插在哪里?
在IL中不是每一行都是中断点的位置.中断点的位置是在这样的行里。即在这些行的后 面数值被改变或者程序的执行在这里出现分支。这些行是插入中断点的位置。
在IL中,我们有如下的中断点位置:
- 一个POU的开头
- 在每个LD, LDN上
- 在每个JMP, JMPC, JMPCN上
- 在每个标号上
- 在每个 CAL, CALC, CALCN上
- 在每个 RET, RETC, RETCN上
- 在POU的结尾上
在ST中,我们有如下的中断点位置:
- 在每个赋值语句上 (:=)
- 在每个RETURN和EXIT语句 上
-
在WHILE, IF ELSEIF, UNTIL语句中被赋值的条件句上
- 在POU的结尾上
你可以用行号区的颜色来识别中断点的位置。它的颜色比其它行的颜色深,为黑灰色。〔见图3.2.2.〕.
怎样设置一个中断点?
在一个行号区上单击鼠标来设置一个中断点。如果这一行是中断点位置,那么它的颜色由黑灰色变为青蓝色. 在PLC中,中断点立即被激活。
删除中断点
在设置中断点的行号区上单击一下,则中断点删除。
设置和删除中断点的操作也可以通过使用菜单命令('Online''Toggle Breakpoint'),和功 能键F9来完成.
当程序执行到中断点时,将发生什么?
当用户程序执行到中断点上停止时,TWinCATPLC显示停止执行程序的POU和POU的中断行。
你可以通过输入命令'Online''Run'(快捷键F5).来继续执行用户程序。除此以外,你可以使用命令'Online' 'Step over' (快捷键F10) and 'Step in' (快捷键F8)步进到下一 个中断点位置.
如果在当前行〔程序在这一行停止执行〕与下一个中断点位置之间的某一行调用一个POU,那么使用 'Online' 'Step in'命令将步进到这个POU内,用'Online' 'Step over'命令,有调用POU之后,程序停止执行.
图5.2.4. 有中断位置〔较黑的网络号区〕的IL编辑器
5.3. 指令表编辑器
指令表IL是PLC的汇编程序语言。它易于理解,但属于低级语言。
IL编辑器是文本式编辑器。在IL中,使用下面的运算符和修改量:
修改量是:
C with JMP, CAL, RET: 如果前一个表达式的结果是TRUE,则执行指令.
N with JMPC, CALC, RETC: 如果前面的表达式结果是FALSE,则执行这条指令 .
N with AND, OR, XOR:最后操作数的非运算〔不是堆栈内容的非运算〕。
左括号修改量"("表明运算符的赋值推迟,直到遇到右括号")" 。例如,指令的顺序
AND( %IX1
OR %IX2
)
被看作为:
result:= result AND (%IX1 OR %IX2)
IL运算符的完整内容列表如下:
运算符〔operator〕 | 修改量〔Modifiers〕 | 语义〔Semantics〕 |
LD | N | 设置当前结果等于操作数 |
ST | N | 把当前结果存到操作数位置上 |
S | 如果并且只有当前结果为TRUE时,设置布尔 操作数为TRUE | |
R | 如果并且只有当前结果为TRUE时,设置布尔操作数为FALSE | |
AND | N,( | 以位为单位“ 与”运算 |
OR | N,( | 以位为单位“ 或”运算 |
XOR | N,( | 以位为单位“ 与非”运算 |
ADD | ( | 加法 |
SUB | ( | 减法 |
MUL | ( | 乘法运算 |
DIV | ( | 除法运算 |
GT | ( | >大于号 |
GE | ( | >=大于等于号 |
EQ | ( | =等于号 |
NE | ( | <>不等于号 |
LE | ( | <=小于等于号 |
LT | ( | <小于号 |
JMP | C,N | 跳向标号 |
CAL | C,N | 调用功能块 |
RET | C,N | 从被调用的功能块返回 |
) | 推迟求值运算符 |
IEC的所有运算 符列表可在附录中找到.
使用某些修改量的IL程序举例:
LD TRUE (* Load TRUE into the accu *)
把TRUE装入累加器中
ANDN BOOL1 (* execute AND with the negated value *)
(*of the variable BOOL1 *)
与BOOL1变量的“ 非”值进行“ 与”运算
JMPC end (* if the result was TRUE, jump *)
(*to the label "end" *)
如果结果是TRUE,则跳到‘ END’标号
LDN BOOL2 (* Store the negated value of *)
ST ERG (* BOOL2 to ERG *)
把BOOL2的“ 非”值存入ERG中
end:
LD BOOL2 (* Store the value of *)
ST ERG (* BOOL2 to ERG *)
把BOOL2的值存入ERG
流程控制:
在IL中,流程控制显示被执行程序行中 累 加 器的值。
用命令’Online’‘DisplayFlowControl’,一个附加区插在窗口的左侧,与行号区相邻.这个区含有上一次执行完该行以后累加器的值。你可以通过中断点位置行号区的颜色来区别在上一次PLC周期哪些行被执行。哪些行未被执行。〔被执行行的缺省颜色:绿色〕
注意:只有激活窗口才能显示一个流程控制。在你的IL编辑窗口任一地方单一下,使窗口被激活。
5.4. 结构化文本编辑器
结构化文本是IEC11313的一种高级语言。在某些方面类似于PASCAL语言,但是了解C语言的人对于理解这种语言也是没有问题的。
下面的定义来自IEC11313标准。如果你司惯于使用高级编程语言,那么只是看一看 例子就行了。
结构化文本语言是一种结构式编程语言。这就是说,ST提供的某些结构应用于常用结构的编程,像循环或条件表达式。这种语言的优点是,程序出错率低,可读性高。
让我们看一个例子,比较两个程序,一个程序用ST编写,一个程序用IL编写,两个程序的作用相同。
用IL语言编写计算2的乘方的循环语句:
loop:
LD Counter
EQ 0
JMPC end
LD Var1
MUL 2
ST Var1
LD Counter
SUB 1
ST Counter
JMP loop
end:
LD Var1
ST Result
用ST语言编写计算2的乘方的循环语句:
WHILECounter<>0 DO
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〔最高〕 |
Function evaluation〔函数计算〕 | Function name ( argument list)函数名〔自变量表〕 | |
Exponentation指数运算 | ** | |
Negation“ 非”运算 | - NOT | |
Multiply乘法 Divide 除法 Modulo 模数计算 | * / MOD | |
Add 加法 Subtract 减法 | + | |
Comparison 比较 | <,>,<=,>= | |
Equality 等于 | = | |
Boolean AND布尔“ 与” | AND | |
Boolean XOR布尔“ 与非” | XOR | |
Boolean OR 布尔“ 或” | OR | 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; IF D<0.0 THEN C:=A; ELSEIF D=0.0 THEN C:=B; ELSE C:=D; |
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; END_IF; END_FOR; |
WHILE语句 | J:=1; WHILE J<= 100 AND ARR[J] <> 70 DO J:=J+2; |
REPEAT语句 | J:=-1; REPEAT J:=J+2; UNTIL J= 101 OR ARR[J] = 70 END_REPEAT; |
EXIT语句 | EXIT; |
空语句 | ; |
赋值运算
在一个赋值语句的左边是一个操作数〔变量,地址〕,在右边是一个表达式的值,赋值给 操作数。
语法:
<操作数> := <表达式 >;
含义:
把表达式的结果赋值给操作数。
举例:
Var1 := Var2 * 10;
调用的功能块:调用功能块只是简单地写功能块的名称。你可以给功能块的输入参数写赋值语句并用括号括起来。输入参数赋值语句的顺序是可选择的。
语法:
<Instanze_Name>(Input1 := <Operand>, ... ,Inputn := <Operand>);
含义:
调用名称为‘Instance_Name’的功能块,在调用之前,将操作数赋值给输入变量.
举例:
在下面的例子中,调用一个记时器,并给参数IN和PT赋值。然后将结果值Q赋值给变量A.
访问功能块结果值的方法是:写出功能块的名称,然后写一个点。再写变量名。
CMD_TMR(IN:= %IX5, PT := 300);
A:=CMD_TMR.Q
The RETURN语句t
当程序执行到"RETURN"语句时,事实上,被执行的POU被放在一边。
语法:
RETURN;
含义:
把POU放在一边,然后回到调用它的地方。
举例:
下面的例子表示一个功能的第一条语句,该功能需要一个正的输入变量var1。
func:=FALSE;
IFvar1<0 THEN
RETURN;
END_IF;
The IF语句t
IF语句允许在一定的条件下执行某些表达式。.
语法:
IF <条件> THEN
<语句1>;
ELSE_IF <条件2> THEN
<语句2> ;
.
.
ELSE_IF <条件n> THEN
<语句 n>;
ELSE
<语句 n+1>;
END_IF;
The ELSE_IF分支是可选择的,ELSE分支也是可选择的.
含义:
如果〔条件〕是TRUE,那么执行语句1,如果条件是FALSE,而条件2是TRUE,那么执行语句2等等.如果没有条件是TRUE,那执行语句n+1。
举例:
IF temp<17THEN
heating_on:=TRUE;
ELSE
heating_on:=FALSE;
如果温度降到17度以下,加热器开关闭合,否则打开。ELSE分支是可选择的。通过使用ELSE_IF,你可以组合几种条件.
The CAS语句
用一个CASE语句,可以把几个条件语句与一个相同的条件变量结合起来成为一个结构.
语法:
CASE <Var1> OF
<数值 1>:
<语句 1>;
<数值 2>:
<语句 2>;
...
<数值 n>:
<语句 n>;
ELSE
<ELSE-语句>;
END_CASE;
ELSE语句是可以选择的。数值1函数值n必须是变量Var1的常数.除字符串和BOOL以外任一类型都可以。
含义:
如果<Var1>的值是<数值i>,那么<语句i>被执行。如果<Var1>没有给出值,那么<ELSE-语句>被执行.
如果几个数值有同样的语句,那么这些数值可被组合起来,用,号分开.
举例:
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循环语句
如果一个语句必须要重复几次,那么你可以使用循环语句。而不用跳跃句。ST语言提供了三种不同的循环语句。如果事先已确定重复的次数,那么使用FOR语句,否则,使用WHILE或REPEAT语句.
语法:
FOR <Index_Var>:=<CONST1> TO <CONST2> BY <CONST3> DO
<语句>;
END_FOR;
Index必须是一个ANY_INT类型的变量,consts是整数常量.
含义:
Index_Var初始值是CONST1. 在关键词TO后边,确定了Index_Var变量的上限值,当Index_比CONST2值大时,停止循环.
在关键词BY后面,确定了记数器的增量值,在每次执行<Statements>语句以后, Index_Var的增量为这一数值。缺省增量值为1,因此,在下面的例子中,可省去"BY 1".
在关键词DO的后面是将被执行的语句。每次执行完这些语句后,检查Index_Var是否仍然小于等于 CONST3值。.
关键词END_FOR结束FOR循环语句.
例子:
使用FOR循环语句,计算2的乘方的运算例子可编程如下:
FOR Counter:=1 TO 5 BY 1 DO
Var1:=Var1*2;
END_FOR;
Result:=Var1;
考虑到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 DO
Var1 := Var1*2;
Counter := Counter-1;
END_WHILE
关键词WHILE的后面是一个可执行的条件,在上面例子中Counter与0进行比较,只要counter不等于0,那么在DO与END_WHILE之间的所有语句被执行.
注意:必须注意条件<condition>有时变为FALSE。否则,循环语句将不停地执行。用TWinCAT PLC模拟方式,你可以很容易地找出这样的循环语句。这时模拟方式停止,并告诉你出错信息WATCHDOG.通过调用堆栈,你找到程序被挂起的地方。
The REPEAT循环语句
REPEAT循环语句与WHILE循环语句相同。所不同的是被检查的条件放在最后。在执行循环语句以后,赋值给REPEAT循环语句的终止条件。即,既使条件的初始值为FALSE,但循环语句也被执行一次.
语法:
REPEAT
<语句 >
UNTIL
<条件 >
END_REPEAT;
含义:
关键词REPEAT和UNTIL之间的语句一直被执行,直到UNTIL后面的条件被赋值为 FALSE.
举例:
REPEAT
Var1:= Var1*2;
Counter:= Counter-1;
UNTIL
Counter=0
END_REPEAT;
注意:必须注意REPEAT循环语句不能无限地重复执行。因此,你必须写一个语句,在这个语句中,条件不断更新.比如:一个记数器必须用语句表中的一个特殊语句不断使其更新。然后要再次使用模拟方式检查 循环。
The EXIT退出语句
EXIT语句放在一个循环语句中,使最里面一层的循环语句终止,而不考虑条件。
语法:
EXIT;
含义:
在某一点上终止里面一层的循环语句:
REPEAT
Var1:= Var1*2;
Counter:= Counter-1;
IF Var1 > 1000000 THEN
EXIT;
END_IF;
UNTIL
Counter=0
END_REPEAT;
流程控制 〔FlowControl〕
在ST中,流程控制显示最后的PLC周期所执行的程序行。
用命令Online’‘DisplayFlowControl’,激活流程控制。被执行行的行号区产生不同的颜色〔缺省值:绿色〕。
注意:只有激活的窗口才能显示流程控制.在你的ST编辑窗口上的任一栏单击一下,使窗口激活。
5.5. 图形编辑器
在这一章中,我们集中讨论两种图形语言LD(梯形图)和 FBD (功能块图)的共有性能.
网络
用FBD或梯形图编写的POUs是由网络组成的。所谓网络是用线连接起来的模块和操作数的集合。POU从第一个网络开始执行,并且如果程序没有跳转,则程序从网络X到网络 X+1顺序执行.
标号
与每个网络相关的是标号区.标号区可以是空号。为了输入一个标号,把光标移到网络的第一行,并写上标号文本。标号后面必须是一个冒号。
网络中的注释
每个网络可以有一个注释。当FBD或梯形图的窗口被激活时,你可以用'Extras' 'Options'菜单改变一个注释的最大行数。注释行的缺省行数是4。为了做注释,也可以调整每个网络的最小注释行数.
比如,如果最小的行数调整为2,那么每个网络在标号的后面有两行空的注释行。这个选项的缺省值为0,它的优点是在屏幕上可以看到较多的网络。
如果注释行的最小行数大于0,那么你可以在注释行上单击鼠标,然后插入或编辑注释。否则,你必须使用'Insert''Comment'命令。注释行用灰色显示,与程序编码形成对比。
插入网络
如果你要在当前网络的前面插入一个新的网络,那么选择'Insert''Network(before)'命令,如果你要在当前网络的后面插入一个新网络,那么选择'Insert' 'Network (after)'命令。
当前网络
当前网络就是在网络号下用虚线框框起来的网络。用鼠标击一下或使用光标键来选择当前网络。为了选择一个以上的网络,按<shift>键。现在可以在所选择的网络上使用菜单命令'Edit' 'Cut', 'Edit' 'Copy', 'Edit' 'Paste' and 'Edit' 'Delete'.
在线方式的图形编辑器
在FBD和LD中,中断点仅可以设置在网络上。如果一个中断点设置在一个网络上那么这个网络号区显示为青色。在执行网络以前,程序中止。网络号区的颜色变为红色。程序的执行采用从网络到网络的步进方式.
‘用命令‘Online’‘Display’FlowControl’启动流程控制。采用流程控制,你可以看到在一个网络中传递的所有数值。如果一个连接线传递的是一个非布尔值,则插入一个附加区,在这个区中,显示该数值。如果一个连接线传递的是布尔值,其值为TRUE,则该值显示为蓝色。
5.6. 功能块图编辑器
用FBD编写的一个POU:
图5.6.1用 FBD编写的一个POU
FBD编辑器是一种图形编辑器, 工作对象是网络表。所谓网络是一种被连接的结构,它由逻辑和算术表达式,功能,跳转和返回语句组成(见图5.6.1.).
网络中的光标位置,键盘接口
光标位置
任何一个文本都是一个可能的光标位。文本的选择用蓝色背景作为标记.
否则光标位用虚线框重新标记。
接下来,你可以看到一个所有光标位的列表:
1) 任何文 字(用黑色框围住):
2) 任何输入:
3) 任何运算符,功能或功能块:
4) 输出,如果一个赋值或一个跳转如下所示:
5) 在一个赋值,一个跳转或一个返回的上方的一点:
6) 每个网络最后一个目标的右边(“”最后光标位”,如果选择一个新的网络,则这一点也是一个光标位):
7) 恰好在赋值前的一点:
怎样设置光标
用鼠标点一下或使用光标键可设置光标。使用光标键,沿着所需的方向选择下一个光标位。用这种做法,任何可能的光标位都能达到。如果选择最后光标位,你可以用”光标上“和”光标下”键把光标移动到上面网络的最后光标位。或下面网络的最后光标 位。
注意:
为了逐渐习惯正确的光标位,在开始使用TWinCATPLC FBD时,建议 使用键盘接口。.
插入元素
一个空网络仅含有一个操作数TRUE。用鼠标在这个TRUE的右侧击一下,则最后的光标位被选择.
插入一个赋值一个跳转或一个返回语句
在2),4),5)和6)中的光标位上,可插入赋值,跳转,和返回语句,因此,你必须选择一个正确的光标位并执行'Insert' 'Assignment', 'Insert''Jump' 或 'Insert''Return'命令.
插入的地方取决于所选择的位置。即在所选的输入的前面,所选的输出的后面,所选的交叉线的前面或在网络的末端。
如果插入一个赋值名,则出现缺省文本‘Return’,选择这一文本,然后可以把它改为所需要的文本。
插入一个运算符
在2),4),5)(如果一个赋值名在光标下面,则不可以插入运算符)和(6)中的光标位上,可以插入运算符。为此,你必须选择一个合适的光标位并执行'Insert' 'Operator'命令.
被插入的运算符总是一个AND运算符,通过选择和输入想要的新的运算任,来修改所插入的运算符。使用〔F2〕键,你得到一个所有运算符的列表。如果新的运算符 较少的输入端,则删除多余的输入端和所有被连接的支线。
如果被插入的运算符左侧有一条支线,则这条支线与第一个输入连接。如果被插入的运算符右侧有一条支线,则这条线与输出连接。未被连接的所有新的输入端与TRUE值连接。像网络中的任何其它文本一样,这个TRUE值可被改为所需要的值。
在2)的光标位置上,被选择的运算符,函数或功能块将被改为AND运算符。输入端的数量至少为2。所有大于2 的原有输入端不能被去除。
插入 函 数或功能块
在2,4,5(如果一个赋值句在光标下面,则不可以插入运算符)和6中的光标位上, 可插入一个函数或一个功能块。为此,你必须选择一个合适的光标位并执行 'Insert' 'Function', ‘Insert''FunctionBlock'命令。一个对话框打开,从对话框的列表中,选择出所需的 函 数或功能块。
完成插入的方法与插入运算符的方法相同,包括直接输入和输出。如果被插入的功能块是有一条支线,则该支线与第一个输出连接,与其他的输出 端不做连接。
插入一个输入
很多运算符可以有多个操作数〔例如ADD可以有两个或两个以上的输入〕为了把一个输入加到运算符上,必须选择运算符的输入或运算符本身。并执行'Insert''Input'命 令。如果选择了运算符的输入,则新的输入将被插在被选择的输入的后面。如果选择了运算符,则新的输入将是运算符的最后一个输入。新的输入与TRUE值相连,像任何其它的文本一样,这个值可被更改。
插入一个输出
为了在一个已有的赋值句中插入一个另外的赋值句,选择赋值变量前的一点,赋值句上方的交叉线,或赋值句前的一个输出.
然后执行'Insert''Output'命令,如果选择了赋值句前的交叉线或一个输出,那么新的赋值句被插在旧赋值句的后面。如果选择了赋值句前面一点,则新的赋值句将被插到所选位置的上方。
赋值变量名是result,你必须将它改为实际变量名。
输入的“非”运算
为了对一个输入或一个输出进行“非”运算,你要选择输入或输出,然后执行'Extras''Negate'命令.
剪裁,拷贝,粘贴,删除
剪裁,拷贝,粘贴,删除命令可在菜单项'Edit'下面找到. 剪裁,删除和粘贴的光标位是2,3,4,5,和6,中的光标位。 如果选择了线的交点,那么下方的赋值,跳转和返回句将被剪裁,删除或拷贝。 如果选择了一个运算符,一个功能或一个功能块,那么被选择的目标以及除第一个输入以外的所有输入将被剪裁,删除或拷贝。否则,光标左边的支线被剪裁,删除或拷贝。 部分网络被拷贝或剪裁后,它被保存在剪贴板中,像你经常做的那样,可以插入它。为了粘贴,你必须选择一个合适 的位置,粘贴的合适位置是输入和输出。
现在执行'Edit' 'Input'命令。如果剪贴板的内容是一个运算符, 一个功能或 一个功 能 块〔记住,除第一个输入以外的所有输入支线也在剪贴板中〕那么左边的一条支线与插入元素的第一个输入相连接.
否则,左侧的所有支线将被剪贴板中的内容所代替。
注意: 你可以很容易地改变与方框相连的输入的顺序。
选择第一个输入并执行'Edit' 'Cut'命令。然后选择第二个输入并执行 'Edit' 'Paste'命令。 现在支线与第二个输入相连。
在线方式的功能块图
在FBD中,中断点公能设置在网络上。如果一个中断点设置在一个网络上,那么这个网络号区显示为青色,当程序执行到有中断点的网络时,程序停止执行。这时网络号区的颜色变为红色.
功能块图中使用的所有变量值在与变量相邻的一个文本区中显示。这些值并不是执行相应运算以后变量的值,而是控制周期被执行以后变量的值。
为了得到每次操作的中间结果,启动流程控制,每行将有一个显示变量值的文框,这些值是上一个周期通过‘passed’这一行的值。布尔值用蓝线〔TRUE〕表明,用黑线表示FALSE。
5.7. 梯形图编辑器
5.8. 用LD编写的一个POU:
图 5.8.1. 用LD编写的POU
LD中的光标位置
在下面你可以看到所有可能的光标位置表。调用功能块和程序如同对待触点那样.
1. 任何文本 (用黑色椭园形围起)
2. 每个触点或功能块
3. 每个线圈
4.线圈和触点之间的连接线.
下面是梯形图编辑器的特殊菜单命令.
'Insert''Contact'
用这个命令,一个新触点插到所选位置的前面。触点的缺省值是TRUE。你可以选择这个值并把它改为所需要的变量或常量.
'Insert'''Parallel Contact'
在梯形图编辑器中,可将并联的触点插到所选位置的下方。如果选择了一个线圈或线圈与触点之间的连线,那么所插入的新触点与整个触点网络并联连接。新触点的缺省值是TRUE,你可以选择这处触点的文本并把它改为正确的变量或常量.
'Insert''Function Block'
把用于选择功能块或程序的对话框打开。从对话框中,你可以选择标准的POUs或用户定义的POUs.
被插入的新的POU相当于一个新触点,新功能块或程序的第一个输入与输入连接线相连,程序的第一个输出与输出连接线相连。这些输入输出的参数必须是BOOL型。所有其它输入输出的缺省值是TRUE。你可以选择这些缺省值,把它们改为正确的变量,地址或常量。
'Insert''Coil'
把一个线圈插入梯形中。如果当前的选择是整个网络,那么线圈插到最后一个线圈的下方,如果是选择了另一个线圈,那么新线圈插到所选线圈的上方。如果选择了一个触点,那么不能执行这个命令。新线圈的缺省名称是“out”。必须修改这个名称。
带一个使能输入端的LD部件
如果你要在LD中使用任何给定的运算符或是调用POU,那么你必须插入一个带EN使能输入的部件。这样的部件与线圈并联连接。从EN部件开始,你可以像在FBD中所做的那样去开发网络。在一个已有的EN部件上做插入操作的命令放在菜单项‘Insert’‘Insert atblocks’的下面.
一个带使能输入的运算器,功能块或功能其作用如同不带这一特殊输入的部件一样.所不同的是,这种部件的运算是受使能输入端控制的。使能输入端连接到线圈与触点之间的连线上。当这一连线传输的信息为ON时,使能部件开始运算。
一旦一个使能部件插入到梯形图中,如同FBD一样,可以从这个部件开始开发网络。
‘Insert’‘Operator withEN’
使用这个命令,带使能输入端的运算行到LD网络中,新的运算器并联连接到线圈下 面,并用AND作为标号.你可以更改这个名称代之为所需要的名称。
‘Insert’‘Function Blockwith EN’
选择这个命令以后,一个对话框打开,如果你想要插入一个标准功能块或程序或者一个自定义功能块或程序,那么你可以在对话框中进行选择。从合适的表中选出想要的部件。做出选择以后,用OK按钮关闭对话框。一个新的部件并联插入到线圈的下方.
‘Insert’‘Function withEN’
选择这个命令以后,一个对话框打开,如果你想要插入一个标准函数或自定义函 数, 那么你可以在对话框中进行选择。从合适的表中选出想要的部件。做出选择以后,用OK按钮关闭对话框。一个新的 函 数并联插入到线圈的下方.
‘Insert’‘Insert atBlocks’
用这个命令,你可以把一个新的部件与一个已有的部件相连接。执行这个菜单项下的命令,其光标位置与FBD(见5.7节)中的相应命令的光标位置相同.
用Input命令,一个新的输入加到部件上.
用Output命令,一个新的输出加到部件上。
用Operator命令,一个新的运算器插在部件上。运算器的输出与所选择的输入相连接.
用Assignment命令,赋值给所选择的输入或输出.
用Function命令,一个对话框打开,从自定义或标准功能表中选择一个功能。新的功能与选择的输入相连接。
用FunctionBlock命令,一个对话框打开,从自定义或标准功能块〔或程序〕表中选择功能块。新的功能块与选择的输入相连接。
'Insert''Jump'
一个跳转可以插到3,和4,的光标位置上。跳转插到线圈的下面。跳转的缺省目标是"Label”.把这个文本改为所需要的文本。
如果跳转的输入状态为“ON”,则执行跳转命令。
'Insert''Return'
一个返回可以插到3,4,的光标位置上。返回插到线圈的下面.
如果返回的输入状态为“ON”,则在这个网络上将使POU中断执行。
'Extras''Paste after'
用这条命令,剪贴板上的内容插到所选部件的右侧。所选部件的输出与插入部件的输入相连接。如果剪贴板上的内容和所选部件上的内容由触点组成,才可执行这条命令.
'Extras''Paste below'
用这条命令,剪贴板上的内容并联插到所选部件的下方.如果剪贴板上的内容和所选部件上的内容由触点组成,才可执行这条命令。
'Extras''Paste above'
用这条命令,剪贴板上的内容并联插到所选部件的上方。如果剪贴板上的内容和所选部件上的内容由触点组成,才可执行这条命令.
'Extras''Negate'
用这条命令,当前光标位置上的触点和线圈进行“非”运算。在线圈的括号之间,触点的垂直线之间出现一条交叉线(()或|/|).如果当前的光标位置在触点和线圈之间的连线 上,则不执行这条命令.
一个“非”运算线圈拷贝与布尔变量有关的左侧连接线的“非”运算值。如果一个和“非”运算触点有关联的布尔变量的值是FALSE,那么这个“非”运算触点拷贝从左侧连接线到右侧连接线的数值。
‘Extras’‘Set/Reset’
在一个普通线圈〔不做“非”运算〕上执行这条命令,你得到一个置位线圈。一个置位线圈不能改变有关的布尔变量的TRUE值。这就是说,如果这个变量值一旦变为 TRUE,那么线圈保持为TRUE状态。一个置位线圈符号“S”表示.
在一个做“非”运算的线圈上执行这条命令,你得到一个复位线圈。一个复位线圈不能改变有关的布尔变量的FALSE值。这就是说,如果这个变量值一旦变为FALSE,那么线圈保持为FALSE值,一个复位线圈用线圈符号”R“表示。
在一个置位或一个复位线圈上执行这条命令,则线圈分别为普通线圈和做”非“运算的线圈。
在线 模式 下的LD
在线模式时,所有连接线和状态为ON的所有触点和线圈用青色显示。功能块的输入 和输出显示相应的变量值.
在网络上可以设置中断点。从网络到网络完成步骤操作。
在LD中,中断点仅可以设置在网络上。如果一个中断点设置在一个网络上,则网络号区显示为青色。当程序到达中断网络时,停止执行。在这种情况下,网络号区的颜色变为红色。程序采用从网络的方式完成步进操作。
5.9. 顺序功能流程图编辑器
5.10. 用SFC编写的一个POU:
图5.10.1. 用SFC编写的一个POU和其中的一个动作
作为编程语言的顺序功能流程图主要在第二章中描述。SFC的编辑 器必须支持SFC的特征。因此,下面的菜单命令对SFC来说是特殊的:
Menu Insert
在菜单'Insert'下面,新元素可被插到程序中,因此,必须要做一个选择。
Selections
一个选择用虚线框表示。在较前的图中,MAIN窗口内的转换”Left”被选择。.
通过在元素上移动光标并击一下鼠标的左键,或者使用光标键 ,你可以选择一个元素 〔一个步,一个转换或一个跳转〕.
用<Shift>+鼠标键 在上次所选的元素和最新所选的元素周围选择一个区。
如果编好的程序符合语法,那么下面的命令才能被执行。
Step-Transition (before)
在所选择的方框前插入一个步骤,其后是一个传送。被选择的方框必须有一个传送作为被取代的对象.
Step-Transition (after)
在所选方框内的第一个传送的后面,插入一个步骤和一个传送。被选择的方框必须从一个传送开始 。
Transition-Step (before)
在所选择的方框前插入一个传送和一个步骤。被选择的方框必须有一个步骤作为被取代的对象。
Transition-Step (after)
在所选方框内的第一个步骤的后面插入一个传送和一个步骤。被选择的方框必须从一个步骤开始.
Alternative Branch (right)
插入一个选择分支作为被选方框的右分支。所选择的方框的开始和结尾必须是一个转换。新的分支由一个传送组成。
Alternative Branch (left)
插入一个选择分支作为所选方框的左分支。所选择的方框的开始和结尾必须是一个传送。新的分支由一个传送组成 。
Parallel Branch (right)
插入一个并联分支作为所选方框的右分支。所选择方框的开始和结尾必须是一个步 骤。新的分支由一个步骤组成。
Parallel Branch (left)
插入一个并联分支作为所选方框的左分支。所选择方框的开始和结尾必须是一个步 骤。新的分支由一个步骤组成。.
Jump
把一个跳转插到所选方框的某个分支的末端。该分支必须是一个选择分支。
Transition-Jump
插入一个传送,其后是一个位于所选择分支末端的跳转。该分支必须是一个并联分 支。
Menu Extras
在菜单'Extras'中的编辑命令为SFC提供了特殊的编辑选项,比如来自剪贴板的插入或SFC元素的放大.
Paste Parallel (right)
插入剪贴板的内容,作为所选择的方框右边的并联分支。因此,所选择方框的开始和结尾必须是一个步骤。剪贴板的内容必须是一个SFC方框,该方框的开始和结尾必须 是一个步骤。
Paste after
在所选择方框的第一步骤或第一个传送的后面,插入剪贴板中的SFC方框〔通常的粘贴是把它插在所选择方框的前面〕。如果编好的程序结构是一个语法正确的SFC结 构,那么才能执行此项命令。
Zoom Action/Transition
把所选择方框的第一步骤的动作或第一个传送的文体装入合适的编辑器中,如果该动作或传送文体的内容是空的,那么必须选择对它们进行编程的语言.
对于一个已经编好程序的动作,用动作方框内右上角的黑三角表示。
对于已有转换文体的一个转换,用转换位置上连线左侧的黑三角表示。
Clear Action/Transition
所选择方框的第一步骤动作或第一个传送的文体被清除。
表示一个动作或一个传送文体存在的黑三角被移去。
Step Attributes
为了执行这条命令,你必须选择一个步。选择这个命令以后,一个对话框打开,在对 话框中你可以编辑 所选择的步的属性。
图5.10.2. 编辑步的属性对话框
在对话框中,你可以做三种不同的输入。在Minimumtime最小时间区中,插入最小时间,该时间是调用一步骤所需的最小时间间隔,在Maximumtime最大时间区中,插入最大时间,该时间是调用一步骤所花费的最大时间间隔。注意,插入的时间必须是 TIME类型。因此,要使用附录C中所描述的语法。
在‘Comment’区,你可以插入步的一个注释。使用Extras’’Options’命令,你可以定义这个注释或时间的属性是否在SFC编辑器中显示。根据你的选择,你可以在这步的右边找到显示的注释或时间属性。
图5.10.3. SFC中的时间属性
图5.10.3显示了在线方式的一个SFC-step.在9.5秒以后,这一步被激活。激活这一步的最小时间是10秒,最大时间是2分钟。
SFC标记
要SFC中,激活一步的时间如果比时间属性中所定义的时间长,那么就要设置某些特殊标记。为了使用这些标记,你必须在说明语句编辑器中对标记进行说明。标记可以作为一个输入变量,也可以作为一个输出变量。.
SFCEnableLimit:这个变量的类型是BOOL。当把它设置为TRUE时,超时时间被记录下来,否则,超时时间被忽略.
SFCInit:这个变量的类型是BOOL。当它为TRUE时,在Init-step步骤上,SFC-POU被 复位。只要这个变量是TRUE,那么这一步就一直处于激活状态。
SFCQuitError:这是BOOL型变量。只要这个变量是TRUE,那么SFC程序就停止执 行。当变量为FALSE时,则在激活步骤内的所有以前的时间被复位.
SFCError:当发生超时,这个BOOL型变量被设置。
SFCErrorStep:这个变量的类型是字符串(STRING).当一个POU发生超时,则把这个 POU的名称存入该变量中。
只要把变量SFCError复位为FALSE,那么当发生一次超时,则不被记录.
Time Overview 时间限定值概貌
选择这一命令以后,一个窗口打开,该窗口显示当前激活窗口AS中被定义的所有时间限定值.
图5.10.4.SFC中的 Time Limit Overview 图
在TimeLimit Overview时间限定值概貌图中,显示所有的步骤。如果你对一个步骤定 义了时间限定值,限定值在步骤的右面显示〔最小时间在中间,最大时间在右侧〕。 通过用鼠标在所需要的行上击一下,你可以编辑时间限定值,时间值写在时间表下面的方框内。用OK按钮关闭窗口,那么时间限定值概貌中的所有修改值被保存起来。
在图5.10.4.中,所有的步有一个较高的时间限定值5分钟。Step2有一个最小的时间限定值2 秒。
Options
选择这一命令后,一个对话框打开。在对话框内,你可以为你的SFC-POU设定几个 选 项.
图5.10.5. SFC-Options对话框
在SFC-Options对话框中,你可以做三个输入。在‘HeightofSteps’中,你可以输入画一个步骤所需的高度。缺省值为所选字型的4行。在‘WidthofSteps’中,你可以输入画一个步骤所需的宽度。
除此之外,你可以对一个步显示哪些信息进行调整。有三种选择:Nothing,Comment或TimeLimits.按照所做的调整在步骤的属性〔StepAttributes〕中显示注释和时间限定值。
在线方式的 SFC
采用在线方式,当前激活步显示为蓝色〔见图5.8.5〕。当你选择了’Extras’’Option’命令中的选项时,时间限定值在步的右面显示。当某一步为激活状态时,你可以在时间限定值的下方读到它的激活时间 .
中断点
用命令'Online''ToggleBreakpoint'(或F9,<Shift>双击键),则中断点被设置在一个步骤 上。当到达中断点时,程序停止执行。并且这一步的颜色变为青色.
如果存在一个以上的激活步骤〔在并行分支中,程序分路执行〕,那么下次被执行的动作步骤用红色表明.
命令'Online''StepOver'〔或F10〕一步步地完成步进操作。通过激活’Online’Stepin’〔或F8〕命令,你可以干预一个步骤的动作。动作和传送的调试功能,取决于编程使用的语言。对用SFC语言编写的POUs来说,没有这种限制.
^
图5.10.6. 有激活步(Parallel1 and Parallel2),在线方式下的SFC
5.11. PLC组态
PLC组态(PLC-Configuration)依赖于被组态的硬件。使用PLC-Configuration, 一个IEC地址和它在控制器中的地 中被离线赋值。
使用‘Window’‘PLC-Configuration’命令,用于组态的PLC-Configuration编辑器打开.
5.12. 全局变量
编辑全局变量
使用菜单命令'Window''GlobalVariables',你可以定义或编辑全局变量。一个窗口打 开,该窗口有一个列表,它包括所有前定义的全局变量。全局变量编辑器与变量说明语句编辑器的功能相同。
全局变量必须在关键词VAR_GLOBAL和END_VAR之间进行说明。全局变量可以在整个项目中被使用。
保持性全局变量
保持性全局变量是指它的值不能重新初始化的一种变量.
该全局变量必须在关键词VAR_GLOBALRETAIN和END_VAR之间加以说明。
VAR_GLOBALRETAIN
(*变量说明语句*)
END_VAR
全局常数
下面的格式用于定义全局常数:
VAR_GLOBALCONSTANT
(*变量说明语句*)
END_VAR
‘Extras’‘Add List’
如果你已说明了大量的全局变量,并且你想要把你的全局变量整理成比较好的结构,那么你可以用命令‘Extras’‘New List’去打开一个新的表,每张新表必须以关键词 VAR_GLOBAL为起点, VAR_END为终点.
如果你已做好了很多表,你可以用命令‘Extras’‘Previous List’装入前一张表,用命令‘Extras’‘Previous List’装入下一张表,用命令‘Extras’‘Delete List’删除当前装入 的表。
‘Extras’‘Make Docuframefile’
如果你必须要对一个项目做出不同的文件,例如,你要做一个英文文件和一个德文文件,或者如果你有几个相似的项目,它们使用相同名称的变量,那么你可以通过做 docuframes来节省时间。
为此,使用命令‘Extras’‘MakeDocuframefile’.一个用新名称存文件的标准对话框打开。 在文件名框内,已有扩展名×。txt.输入任一名称,用OK按钮关闭对话框。现在TWinCAT PLC 产生一个文本文件,在文件中有项目所使用的全部变量的列表。
DOKUFILE
VAR
GLOB1
COMMENT
VAR
GLOB2
COMMENT
VAR
GLOB3
COMMENT
VAR
GLOB4
COMMENT
VAR
BG1
COMMENT
图5.10.1一个docuframe-file文件的摘录
这个文件现在可以被装入任何一个文本编辑器中,并被编辑。文件从?DOKUFILE 词开始,其后是项目变量的一个列表。每个变量占用三行。“VAR”词占一行,变量 名占一行,输入的注释COMMENT占用一行。这一行可被修改为变量的任何注释。删除你不想要注释的变量。用这样的方法,你可以为任何TWinCAT PLC项目做几个 文件,但是怎样使用这些文件呢?
‘Extras’‘Link Docufile’
为了使用一个docufile文件, 用命令‘Extras’‘Link Dokufile’.一个用于打开文件的标准 对话窗口出现。选择想要的docuframe文件,并用OK键确认。当你现在正在为你的项 目做一份资料或正在打印你的项目的某些部分时,程序文本将丰富你在docuframe文 件中所做的注释。这个注释仅在打印时出现!
5.13. 库管理器
TWinCAT PLC的库管理器:
图 5.13.1. 库管理器
在比较前面的图中,你可以看到标准库POU LIMIT的参数.
标准库
库'standard.lib'是TWinCATPLC的一个组成部分。这个库包括所有的函数和功能块。它们作为标准的POUs〔即,记时器,字符串功能等等〕在IEC1131-3中被描述。如果你把这个库与你的项目连接起来,那么你可以使用所有的这些POUS.
用户定义的库
如果你完成了一个项目,进行了编译并且没有错误产生,那么你可以使用'File' 'Save asLibrary'命令。将这个项目作为一个库存起来。该项目本身并没有改变。一个自定义库可以像标准库那样使用.
怎样连接一个库
如果打开库管理器('Window''LibraryManager'命令),你可以把你的项目与一个库连接起来('Insert''AdditionalLibrary'命令).现在你可以像使用自定义的POUs那样使用库中的POUs.
使用库管理器
库管理器窗口被分成四部分(见图5.11.1).在左上角中,你可以看到与项目连接的所有库的一个列表。在左下角中,你可以找到你选择的库的POUs整个的一个列表。在右侧是所选择的POU的接口。右侧的上部分与说明语句编辑器中的标记相同,下部分用一个黑色信箱表示。
怎样删除一个库
用命令'Edit' 'Delete',你可以从你的项目中删除一个库.
5.14. 变量观测窗口
观测窗口是一个显示变量值的特殊窗口.
离线方式的观测窗口
在离线方式下,观测窗口是一个文本编辑器,可以向窗口输入变量名。用命令'Window' 'Watch Variables',可以打开观测窗口.
在观测窗口中,插入变量的标记如下表示:
< POU的名称>.<变量名 >
全局变量不用一个POU的名称来说明。各种结构变量〔结构,数组〕也可以被输入到观测窗口中,地址可以直接插入.
一个结构化变量的例子:
PLC_PRG.Instance1.Instance2.Structure.Component
一个全局变量的例子
.Global.component1
帮助管理器
用<F2>键(或'Edit''InputSelection'命令),打开帮助管理器。在编译项目之前,这一命令是不可用的。帮助管理器窗口包括一个项目的所有POUs的列表和一个全局变量的单独细目。用双击鼠标键或〔Enter〕键打开所选择的POUs的一张变量表。功能块的状态和结构被展开。按OK按钮,被选择的变量插到变量表中。
在线观测窗口
图5.14.1. 在线方式的观测窗口
当为在线方式时,显示被插入的变量值。为了在在线方式插入一个新的变量,执行'Extras' 'Monitoring active'命令,插入变量以后,你可以使用同样的命令监视变量。
强迫赋值
在观测窗口中,你可以对变量强行赋值。如果你在相应的变量名上击一下,那么一个对话框打开,在这个对话框中,你可以插入一个变量值。TWinCATPLC检查这个新值是否与说明语句的限制不一致。若不一致,则去除这个数值。在观测窗口中,被改变的变量用红色显示。
5.15. 采样跟综
什么是采样跟综 ?
跟综某一时间间隔的一组变量是可能的。这些变量值被写入一个循环缓冲存储器中。当缓冲存储器存满时,第一个并且是最旧的值被去除最多。可跟综20个变量的500个数值.
怎样起动采样跟综 ?
为了执行跟综任务,你必须打开跟综窗口(用'Window''Sampling Trace'命令). 现在通 过Extras菜单,可使用跟综命令:
跟综组态:
图5.15.1: Trace Definition 对话框
插入跟综变量
你可以在一个组态对话框中设置所有的跟综参数。因此,要执行'Extra''Trace Configuration...'.命令。在跟综定义traceDefinition对话框中,你可以输入跟综变量,触发变量(当这个变量有一个下降边缘或上升边缘时,跟综停止),以及设置跟综参数 (见图 5.15.1).
最初,跟综变量表是空白的,为了插入一个变量,你必须把变量写入表的下方区域 中, 然后按"Add"按钮,这样,变量就被插入进去.
在跟综定义对话框中,一个插入变量的标记表示如下:
< POU的名称>.<变量名 >
为了从表中删去一个变量,则选择该变量,然后按"Delete"按钮.
在"TimeperScan[10ms]:"区域中,你可以用毫秒定义两个扫描之间的时间。缺省值“0”意味着每周期一个扫描。
停止跟综
在trigger触发区域中,可以插入一个布尔变量,触发变量。这个变量定义了一个触发事件,即触发变量的上升缘或下降缘。在”Trigger onRising Edge”区域中, 缺省值是 上升缘。为了改变这一选项,可选择这个区,使它没有标记。.
触发变量区可保持为空白。在这种情况下,跟综一直进行,直到用户直接停止采样跟综 (用命令'Extras' 'Stop Trace').
触发事件发生以后,控制器中的采样跟综循环缓冲存储器中写入一个百分比。然后控制器的跟综停止。在触发事件发生以后写入循环缓冲存储器中的百分比在对话区”Percentage of Values recorded after Trigger"中定义.
在图5.15.1. 定义跟综500个数值,并在对话区"Percentage of Values recordedafter Trigger"中输入50%.这就是说,在触发事件发生之前,250个数值将被记录下来,而在触发事件发生之后,记录250个数值。
帮助管理器
用<F2>键打开帮助管理器。它与观测窗口中的管理器相同.
跟综定义中的所有设置与项目一起被保存。
起动和装入跟综Trace:
'Extras' 'Define Trace'
把跟综组态装控制器中,该组态保留在控制器里,直到完成跟综或跟综停止.
'Extras' 'Start Trace'
这个命令用于起动PLC中的跟综、
'Extras' 'Read Trace'
这个命令用于当前的跟综缓冲存储器加载。显示变量值。
'Extras' 'Stop Trace'
停止控制器中的跟综。在执行新的跟综之前,必须下装跟综定义并起动跟综、
选择被显示的变量
在跟综窗口左侧的组合箱允许从跟综组态中所定义的变量表中选择出最多5个变量.
这些变量的跟综曲线将被显示。可以插入新的变量,即使已经有显示的曲线。
采样跟综图
图5.15.2. 触发器变量为%IX4.1的五个不同变量采样跟综图
X轴表示时间。如果没有定义扫描时间,那么它仅仅是一个逐渐增加的PLC周期数。在图 5.15.2中,显示大约250 个数值.
如果定义了一个扫描时间,那么X轴给出的是扫描时间。最旧的跟综值得到的扫描时间是0.
Y轴代表变量值。变量的最高值和最低值限定了最大和最小的比例数。例如,在图5.15.2. 中,变量Var3的最低值是-50, 最高值是500。
如果发生触发事件,那么在触发事件发生的时间显示一条垂直线。在图5.15.2中,你可以看到在触发变量〔Var1〕的边缘上确实有这样一条线。
一个已读的缓冲存储器一直保留,进到项目被改变成系统离线。
'Extras' 'Multi Channel'
菜单项'Extra' 'Multi Channel'是一个乒乓开关。你可以作如下两种选择,一种是一 个通道对应一条被显示的曲线,另一种是一个通道对应一个互相重迭的显示曲线。如果选择多通道〔multi channel),那么在这个菜单项的后面有一个(v)标记。
缺省选择是多通道(multi channel)。跟综窗口被分割成最多5个部分。每一部分用于一 条跟综 曲线。曲线的最高值和最低值显示在左侧。图5.15.2示出了一个多通道的例子.
'Extras''Cursor Mode'
按左边的鼠标键,或执行'Extra''CursorMode'命令,使光标成为一条垂线。用鼠标或使用光标键可以移动光标。按<CTRL><CURSOR LEFT>键或<CTRL> <CURSOR RIGHT> 键可增加移动光标 的速度.
如果显示一个光标,那么光标当前的X位置显示在跟综窗口的顶部。相对于每个被显示变量的Y位置在文本 ‘var <number>‘的旁边表示出。
'Extras' 'y scaling'
用这条命令,你可以改变系统的Y轴比例。打开一个对话框,在对话框中你可以改变Y轴上的旧的最低值和最高值.
'Extras' 'Save Trace'
.保存跟综组态并把实际装入的跟综映象到一个文件中。
'Extras' 'Load Trace'
装入一个文件的跟综组态和跟综映象。
Extras' ‘Trace in ASCII File'
用这条命令,你可以把你的跟综映象输出到一个ASCII文件中.曲线的数值被列成表,用逗号分开。这个文件可以用其他的工具装入(如. MathCad).
5.16. 任务编辑器
TWinCAT PLC 允许对1131-3 IEC 任务进行定义.
注意:
当使用任务时,不要使用MAIN,因为MAIN的定义将不再是你的程序的 入口点。
定义一个任务
用‘Window’‘Task configuration’命令打开一个任务窗口,并选择‘Insert’‘Append Task’命令,这个就产生了一个任务。你得到下面的任务定义对话框:
图5.16.1: 任务定义对话框
有三种不同的任务类型:
· 周期任务 (没有时间间隔,没有Single〕每个PLC周期都被执行。
· 时间间隔任务(在时间间隔中输入一个时间,如T#200ms): 当达到时间间隔值时,任务才被执行。
· 事件任务:(没有时间间隔,有一个single布尔变量): 这个单一的变量有一个上升边缘以后,任务被执行一次。
· 任务的执行或者是按优先权或者是不依赖于PLC。有较低优先号的任务较优先地被执行.
注意: 使用优先级要小心。你可以很容易地写任务,阻止执行所有其它的任务〔这一点取决于执行任务所花费的运行时间〕。.
附加 POUs
选择一个任务并执行 ‘Insert’‘Program Call’命令. 你可以直接插入一个POU或者使 用‘Select’按钮,该按钮提供给你帮助.
你也可以把全局功能状态与一个任务甚至是传递的参数相连接。
图 5.16.2:有一个周期任务和一个事件任务的任务组态
6. 可视化
在你的配置上,TWinCAT PLC设置了一个可视化图形工具。由于有了这个工具的支 持,你可以画离线的几何图形目标。这些目标在在线方式下,根据某个项目的变量值 而 改变形状。
图6.1 一个可视化图形的例子
例如,如果你想要显示某一变量的增长情况,你可以画一个矩形,根据变量值这个矩形增大或缩小.
为了做一个可视化图形,你必须在目标种类选择组合箱〔目标表上方的区域〕中选择可视化。
'Project''Add Object'
现在菜单条中的所有命令用于可视化图形。如果你想要把一张新的可视化图形加到你的项目中,那么你必须执行'Project''AddObject'命令.一个对话框打开,在这个对话框中,你可以插入你的可视化图形的名称。用OK按钮关闭对话框,一个新的窗口打开,在这个窗口中,你可以编辑可视化图形。
插入新的元素
你可以把四种不同的几何图形目标插到一个可视化图形中:矩形,圆角矩形,圆和多边形。为此,选择菜单'Insert', 并执行'Rectangle', 'Rounded Rectangle', 'Circle' 或 ‘Polygon’命令.
现在,在可视化图形窗口上击一下,并按住鼠标器上的左键移动鼠标,直到目标为想要的尺寸.
在一个已被插入的元素上击一下,那么这个元素就被选择。按住鼠标器上的左键所选 的元素就被移动。
在元素的边缘上出现小的黑色正方形〔在周围的矩形边比上,园有这些正方形〕。在右下方的正方形上点一下,按住鼠标器上的左键移动鼠标,那么你可以改变元素的尺寸.
编辑可视化图形元素
在一个可视化图形元素上双击鼠标键以后,你得到下面的多元素对话框:
图6.2.: 编辑可视化图形元素的多元素对话框
你的目标可以有下面的功能:
颜色和颜色的变化
选择颜色。使用颜色按钮,即内部的和外框的〔Inside和Frame〕,你可以选择你的目标的正常颜色。使用报警颜色按钮,即内部的和外框的〔InsideandFrame〕你可以选择你的目标的报警颜色.现在选择’Variables’并在颜色区输入一个布尔变量。
当为在线方式时,只要变量保持为FALSE,那么你的目标将是正常颜色,而如果变量是TRUE,那么你的目标将是报警颜色。
在线方式下改变形状
你可以为你的目标的上、下、左、右边缘输入变量。这个边缘将按照有关的分配变量〔每单位一个图象元素〕移动。
用下面的方法输入变量:
< POU的名称>.<变量名称 >
在全局变量前加上一个点。.
.GlobVar
输入一个变量的最简单方法是使用功能键 <F2>,并从列表中选出变量.
显示一个变量的值
选择‘variables’,并把你想要显示的变量输入到‘TextDisplay’区域中,注意:你也必须在标记有. Text format的区域中输入一个输出字符串。变量本身的输入是 %s.
双向布尔变量
在Input箱中,你可以定义是否能用鼠标器进行输入.
缺省的选择是Noinput,这样,用鼠标器在可视化图形元素上击一下,不执行任何动 作。
选择和单击鼠标有关的区域ToggleVariable'ColorChange',那么任何用鼠标在可视化元素上单击一下时,都使ColorChange变量值取“反”,可视化元素的颜色在正常颜色和报警颜色之间变换。
改变一个模拟变量的值
如果选择了对话框中的‘Text Input of Variable Text Display’区,那么你可以改变与 某个目标相关的一个变量值。
定义变量的方法见“显示一个变量值”一段中的描述。如果在线方式选择变量值,那么对于输入新值,你得到一种编辑控制,当离开这种编辑控制时,这个新值就被写进去。
放大成另一个可视化图形
如果选择了输入对话框中的放大可视化图形一栏,那么你必须在其后的区域中插入一个可视化图形的名称。在线方式下,当在目标上单击鼠标时,那么含有这个可视化图形的窗口打开。
‘Extras’‘Bring to Front’
用这条命令,一个被选择的可视化图形元素放到前景。
‘Extras’‘Put to Behind’
.用这条命令,一个被选择的可视化图形元素放到背景。
‘Extras’‘SelectBackground Bitmap’
用这条命令,一个用于打开文件的对话窗口出现,选择扩展名为*.bmp的文件。被选择的 bitmap图出现在你的可视化图形的背景上。
‘Extras’‘DeleteBackground Bitmap’
用这条命令,你可以删除一个背景的bitmap图.
7. DDE接口
TWinCAT PLC有一个用于读数据的DDE (动态数据交换) 接口,通过这个接口, TWinCATPLC 向其它应用系统提供控制器变量的内容和IEC地址。其它应用系统也有一个DDE接口.
激活DDE接口
一旦你登录到控制器〔或仿真〕中,DDE接口就被激活.
数据的寻址
一个DDE请求由三部分组成,程序名 (TWinCAT PLC),文件名和将被读出的变量名:
程序名: TWinCAT PLC
文件名:你想要读的程序的全路径(例如:C:\example\example.pro).这个文件名必须确实与TWinCAT PLC状态行中显示的文件名相同.
变量名:变量名与它们插到观察窗口中的变量名相同.
什么变量可以被读出 ?
可以读出所有的地址和变量。变量和地址的说明语句与观察窗口中的说明语句相同。举例:
%IX1.4.1 // 读输入变量
PLC_PRG.test // 读POUPLC_PRG的test变量
.GlobVar1 //读全局变量GlobVar1
用WORD连接变量
为了在WORD中得到POU PLC_PRG的TEST变量现行值,必须插入一个区, (InsertField). 该区必须有下面的文本:
{DDEAUTO TWINCAT PLC "C:\\TWINCAT PLC\\PROJECT\\IFMBSP.PRO""PLC_PRG.TEST" }
用EXEL???连接变量
为了把上面的变量与一个单元 (帧?)相连接,你必须用‘Edit’’Attach connect Link???’命 令把下面的内容Exel插入中:
=TWINCATPLC|'C:\TWINCAT PLC\PROJECT\IFMBSP.PRO'!PLC_PRG.TEST
连接的结果是:
Type:TWINCAT PLC
Source file: C:\TWINCAT PLC\PROJECT\IFMBSP.PRO
Element: PLC_PRG.TEST
用Intouch访问变量
使用应用名TWinCATPLC和标题名C:\WINCA PLC\PROJECT\IFMBSP.PRO对 你的项目 定义一个DDE存取名 <Access Name>. 现在你可以用存取名<AccessName>定义DDE类 型的变量。作为项目名,你必须插入变量名称(在我们的例子中,变量名称 是MAIN.TEST).
8. 附录
A. 键盘操作
TWinCATPLC中的所有动作都可以通过操作键盘来执行。为此,你必须使用某些键盘 命令,这些命令你在菜单中是找不到的。
- 用F6键,使你在一个打开的POU中,在说明语句部分和文件之间进行转换
- 用Alt+F6键,使你从一个打开的POU转换到某个目标表,或者从目标表转换到目标类组合箱,或从目标类组合箱回到POU。如果打开了一个检索对话框,那么使用ALT+F6键时,使你从目标类组合箱转换到对话框并从对话框转换到POU。
- 用制表键TAB,使你在对话框中从窗口的一部分转换到另一部分.
所有其它的动作可以通过使用菜单命令来完成,或者使用某个快捷键,你可以在菜单选项的后面找到快捷键.
B. IEC运算
TWinCAT PLC支持所有的IEC运算符。与IEC标准POUs相对照,这些运算符为编程系统所熟知.在POU的文体中,运算符像功能那样被使用。在附录A中,你可以找到一个列表,上面是所有被支持的运算符。
B.1. 算术运算
ADD
加法运算,变量类型为BYTE,WORD, DWORD, INT, DINT和REAL.
用IL语言编程举例:
LD 7
ADD 2,4,7
ST var1
用ST语言编程举例:
var1:= 7+2+4+7;
用FBD语言编程举例:
MUL
乘法运算,变量类型为BYTE,WORD, DWORD, INT, DINT 和 REAL.
用IL语言编程举例:
LD 7
MUL 2,4,7
ST var1
用ST语言编程举例:
var1:= 7*2*4*7;
用FBD语言编程举例:
SUB
减法运算,变量类型为BYTE,WORD, DWORD, INT, DINT, REAL
用IL语言编程举例:
LD 7
SUB 8
ST var1
用ST语言编程举例:
var1:= 7-2;
用FBD语言编程举例:
DIV
除法运算,变量类型为BYTE,WORD, DWORD, INT, DINT, REAL.
用IL语言编程举例:
LD 8
DIV 2
ST var1
用ST语言编程举例:
var1:= 8/2;
用FBD语言编程举例:
MOD
模数除法运算,变量类型为BYTE,WORD, DWORD, INT, DINT, REAL
用IL语言编程举例:
LD 9
MOD 2
ST var1 (* Result is 1 *)
用ST语言编程举例:
var1:= 9 MOD 2;
用FBD语言编程举例:
B.2. 位串运算
ADD
以位为操作数的“与”运算。操作数必须 是BOOL, BYTE, WORD或 DWORD类型。
用IL语言编程举例:
Var1 :BYTE;
LD 2#1001_0011
AND 2#1000_1010
ST Var1 (*结果是 2#1000_0010 *)
用ST语言编程举例:
Var1:= 2#1001_0011 AND 2#1000_1010
用FBD语言编程举例:
OR
以位为操作数的“或”运算。操作数必须是BOOL, BYTE, WORD或DWORD类型。
用IL语言编程举例:
Var1:BYTE;
LD 2#1001_0011
OR 2#1000_1010
ST Var1 (*结果是 2#1001_1011 *)
用ST语言编程举例:
Var1:= 2#1001_0011 OR 2#1000_1010
用FBD语言编程举例:
XOR
以位为操作数的”或非” 运算。操作数必须是BOOL, BYTE, WORD或 DWORD类型。
用IL语言编程举例:
Var1 :BYTE;
LD 2#1001_0011
XOR 2#1000_1010
ST Var1 (*结果是 2#0001_1001 *)
用ST语言编程举例:
Var1 := 2#1001_0011 XOR 2#1000_1010
用FBD语言编程举例:
NOT
以位为操作数的“非”运算。操作数必须是BOOL, BYTE, WORD或 DWORD类型。
用IL语言编程举例:
Var1:BYTE;
LD 2#1001_0011
NOT
ST Var1 (*结果是2#0110_1100 *)
用ST语言编程举例:
Var1:= NOT 2#1001_0011
用FBD语言编程举例:
B.3. 选择函数
所有的选择函数也可以用在变量上,在下面的例子中,我们用常数作为运算数。
SEL
二进制选择.
OUT:= SEL(G, IN0, IN1)含义是:
OUT:= IN0 if G=FALSE;
OUT:= IN1 if G=TRUE.
IN0,IN1和OUT可以是任何类型的数,G必须是BOOL类型,选择的结果是:如果G是FALSE,那么选择 IN0,如果G是 TRUE,那么选择INI。
用IL语言编程举例:
LD TRUE
SEL 3,4
ST Var1 (*结果是 4 *)
LD FALSE
SEL 3,4
ST Var1 (*结果是 3 *)
用FBD语言编程举例:
MAX
扩展最大值功能。结果值是两个数值中的最大值。
OUT:= MAX(IN0, IN1)
IN0,IN1和OUT可以是任一类变量.
用IL语言编程举例:
LD 90
MAX 30
MAX 40
MAX 77
ST Var1 (*结果是 90 *)
用FBD语言编程举例:
MIN
最小值功能。结果值是两个数值中的最小值.
OUT:= MIN(IN0, IN1)
IN0,IN1和OUT可以是任一类型变量.
用IL语言编程举例:
LD 90
MIN 30
MIN 40
MIN 77
ST Var1 (*结果是 30 *)
用FBD语言编程举例:
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可以是任一类型变量。
用IL语言编程举例:
LD 90
LIMIT 30,80
ST Var1 (*结果是 80 *)
MUX
多路复用器.
OUT:= MUX(K, IN0,...,INn)含义是:
OUT:= INK.
IN0,...,INn 和OUT可以是任一类型变量.K必须是BYTE,WORD, DWORD, INT, DINT类型的值。MUX的结果是在一组数值中产生一个第 (K+1)的值.
用IL语言编程举例:
LD 0
MUX 30,40,50,60,70,80
ST Var1 (*结果是 30 *)
B.4. 比较函数
GT
大于.
如果第一个操作数比第二个操作数大,则布尔运算的结果是TRUE, 操作数的类型可以是BOOL, BYTE, WORD, DWORD, INT, DINT 或 REAL.
用IL语言编程举例:
LD 20
GT 30
ST Var1 (*结果是FALSE *)
用ST语言编程举例:
VAR1:= 20 > 30
用FBD语言编程举例:
LT
小于.
如果第一个操作数比第二个操作数小,则布尔运算的结果是TRUE。操作数的类型可以是BOOL, BYTE, WORD, DWORD, INT, DINT或 REAL.
用IL语言编程举例:
LD 20
LT 30
ST Var1 (*结果是TRUE *)
用ST语言编程举例:
VAR1:= 20 < 30
用FBD语言编程举例:
LE
小于等于.
如果第一个操作数比第二个操作数小或者等于第二个操作数。则布尔运算的结果是TRUE。操作数的类型可以是BOOL, BYTE, WORD, DWORD, INT, DINT或REAL.
用IL语言编程举例:
LD 20
LE 30
ST Var1 (*结果是TRUE *)
用ST语言编程举例:
VAR1:= 20 <= 30;
用FBD语言编程举例:
GE
大于等于.
如果第一个操作数比第二个操作数大或等于第二个操作数,则布尔运算的结果是TRUE。操作数的类型可以是BOOL, BYTE, WORD, DWORD, INT, DINT或 REAL.
用IL语言编程举例:
LD 20
GE 20
ST Var1 (*结果是TRUE *)
用ST语言编程举例:
VAR1:= 20 >= 20;
用FBD语言编程举例:
EQ
等于.
如果操作数相等,那么布尔运算的结果是TRUE。操作数的类型可以是BOOL, BYTE, WORD, DWORD, INT, DINT或REAL.
用IL语言编程举例:
LD 40
EQ 40
ST Var1 (*结果是TRUE *)
用ST语言编程举例:
VAR1:= 40 = 40;
用FBD语言编程举例:
NE
不相等.
如果操作数不相等,那么布尔运算的结果是TRUE。操作数的类型可以是BOOL, BYTE, WORD, DWORD, INT, DINT 或REAL.
用IL语言编程举例:
LD 40
NE 40
ST Var1 (*结果是FALSE *)
用ST语言编程举例:
VAR1:= 40 <> 40;
用FBD语言编程举例:
B.5. 地址函数
ADR
地址函数
ADR对一个变量类型为DWORD的自变量返回一个地址。这个地址可被传送到用户函数中,在那里,它们将作为地址指示器。
用IL语言编程举例:
LD var1
ADR
ST var2
man_fun1
B.6. 调用操作符CAL
CAL
调用一个功能块
在IL编程语言中,用CAL调用一个功能块。在功能块状态名称后的括号内可以
赋值给输入参数。
举例:调用一个功能块的状态Inst.参数Par1, Par2 分别被赋值为0和TRUE。
CALINST(PAR1 := 0, PAR2 := TRUE)
(也可参见2.1节.)
C. 标准的库函数
TWinCAT PLC支持所有的IEC标准函数。与运算符不同的是系统并不知道这些标准函数。 为了使用标准功能项目与标准库standard.lib相连接.
C.1. 类型转换函数
把较大"larger"类型转换成较小"smaller"类型是绝对不可能的。(例如 INT 转换成 BYTE 或 DINT转成 WORD).
为了做到这一点,你必须使用特殊的类型转换功能。转换字符串是不可能的。转换成较大"larger"或相等大小的类型是完全可以做到的(例如 INT转成WORD 或 INT 转成 DINT).
DINT_TO_INT
从DINT类型转换为 INT类型.
用IL 语言编程举例:
让变量Var1的类型为DINT,而变量Var2的类型为INT。编程如下:
LD Var1
DINT_TO_INT
ST Var2
DINT_TO_BYTE
从DINT类型 (或说较小类型 "smaller") 转换成BYTE类型.
用IL语言编程举例:
让变量Var1 的类型为DINT,变量 Var2 的类型为BYTE.那么有如下程序:
LD Var1
DINT_TO_BYTE
ST Var2
INT_TO_REAL
从INT类型转换成REAL类型.
用IL语言编程举例:
LD 2
INT_TO_REAL
MUL 3.7
REAL_TO_INT
从REAL类型转换成 INT类型.
REAL_TO_INT(1.5)等于2.
REAL_TO_INT(1.4)等于1.
举例:
LD 2.7
REAL_TO_INT
GE %MW8
TRUNC
从REAL类型转换成 INT类型.
TRUNC(1.9)等于1.
TRUNC(-1.4)等于1.
举例:
LD 2.7
TRUNC
GE %MW8
C.2. 数值函数
ABS
绝对值
ABS(-2)等于2
SQRT
平方根
操作数的类型必须是REAL(参见INT_TO_REAL).
LN
自然对数
操作数的类型必须是REAL(参见INT_TO_REAL).
LOG
以10为底数的对数
操作数的类型必须是REAL(参见INT_TO_REAL).
EXP
自然指数
操作数的类型必须是REAL(参见INT_TO_REAL).
SIN
用弧度表示的正弦值
操作数的类型必须是REAL(参见INT_TO_REAL).
COS
用弧度表示的余弦值
操作数的类型必须是REAL(参见INT_TO_REAL).
TAN
用弧度表示的正切值
操作数的类型必须是REAL(参见INT_TO_REAL).
ASIN
主弧正弦值
操作数的类型必须是REAL(参见INT_TO_REAL).
ACOS
主弧余弦值
操作数的类型必须是REAL(参见INT_TO_REAL).
ATAN
主弧正切值
操作数的类型必须是REAL(参见INT_TO_REAL).
EXPT
指数:OUT = IN1IN2.OUT, IN!和IN2"的类型可以是BYTE,WORD, DWORD, INT, DINT, REAL.
用IL语言编程举例:
LD 7
EXPT 2
ST var1 (*结果是49 *)
用ST语言编程举例:
var1:= 7 EXPT 2;
C.3. 位移函数
下面的函数采用FBD功能块的表达方式来给予说明,在TWinCAT PLC的库管理器中, 你可以得到同样的表达式.
SHL
向左移位:A:= SHL (IN, N)
A,IN 和N的类型必须是BYTE,WORD, DWORD. IN向左移动N位,右面空位用0补充.
举例:
LD 1
SHL 1
ST Var1 (*结果是2 *)
SHR
向右移位:A:= SHR (IN, N)
A,IN 和N的类型必须是BYTE,WORD, DWORD. IN向右移动N位, 左面空位用0补充.
举例:
LD 32
SHL 2
ST Var1 (*结果是8 *)
ROL
向左旋转移位:A:= ROL (IN, N)
A,IN 和N的类型必须是BYTE,WORD, DWORD. IN向左旋转移动N位。
举例:
Var1:BYTE;
LD 2#1001_0011
ROL 3
ST Var1 (*结果是2#1001_1100 *)
ROR
向右旋转移位:A:= ROR (IN1, N)
A,IN1 和N的类型必须是 BYTE, WORD, DWORD.IN向右旋转移动N位.
举例:
Var1:BYTE;
LD 2#1001_0011
ROR 3
ST Var1 (*结果是2#0111_0010 *)
C.4. 字符串功能
LEN
给出字符串的字长.
用IL语言编程举例:
LD 'SUSI'
LEN
ST Var1 (*结果是4 *)
用ST语言编程举例:
Var1:= LEN ('SUSI');
LEFT
LEFT(STR, SIZE) 从字符串最左边开始给出字长为SIZE的一个字符串.
用IL语言编程举例:
LD 'SUSI'
LEFT 3
ST Var1 (*结果是'SUS' *)
用ST语言编程举例:
Var1:= LEFT ('SUSI',3);
RIGHT
RIGHT(STR, SIZE)从字符串的最右边开始给出字长为 SIZE的一个字符串.
用IL语言编程举例:
LD 'SUSI'
RIGHT 3
ST Var1 (*结果是'USI' *)
用ST语言编程举例:
Var1:= RIGHT ('SUSI',3);
LD 'SUSI'
RIGHT 3
MID
MID给出字符串的一部分.
MID(STR, LEN, POS)是一个从字符串STR的第POS位开始,字长为LEN的字符串。用IL语言编程举例:
LD 'SUSI'
MID 2,2
ST Var1 (*结果是'US' *)
用ST语言编程举例:
Var1:= MID ('SUSI',2,2);
CONCAT
两个字符串的连接
用IL语言编程举例:
LD 'SUSI'
CONCAT 'WILLI'
ST Var1 (*结果是'SUSIWILLI' *)
用ST语言编程举例:
Var1:= CONCAT ('SUSI','WILLI');
INSERT
INSERT(STR1,STR2, POS) =从字符串STR1的第POS位开始,插入字符串STR2。
用IL语言编程举例:
LD 'SUSI'
INSERT 'XY',2
ST Var1 (*结果是'SUXYSI' *)
用ST语言编程举例:
Var1:= INSERT ('SUSI','XY',2);
DELETE
DELETE(STR,L, P) =从字符串STR的第P位开始,删除L个字符.
用IL语言编程举例:
LD 'SUXYSI'
DELETE 2,2
ST Var1 (*结果是'SUSI' *)
用ST语言编程举例:
Var1:= DELETE ('SUXYSI',2,2);
REPLACE
REPLACE(STR1,STR2,L,P)从字符串STR1的第P位开始用STR2字符串代替L个字符。
用IL语言编程举例:
LD 'SUXYSI'
REPLACE 'K',2,2
ST Var1 (*结果是'SUKSI' *)
用ST语言编程举例:
Var1:= REPLACE ('SUXYSI','K',2,2);
FIND
FIND(IN1,IN2)是在字符串STR1中寻找第一次出现字符串STR2时的字符位置。如果没有找到字符串STR2,那么输出OUT:= 0.
用IL语言编程举例:
LD 'SUXYSI'
FIND 'XY'
ST Var1 (*结果是3 *)
用ST语言编程举例:
Var1:= FIND ('SUXYSI','XY');
C.5. 双稳态功能块
SR
双稳态功能块,受置位支配:
Q1= SR (SET1, RESET)含义是:
Q1= (NOT RESET AND Q1) OR SET1
Q1,S1 和R1的类型是BOOL.
RS
双稳态功能块,受复位支配
Q1= RS (SET, RESET1)含义是:
Q1= NOT RESET1 AND (Q1 OR SET)
Q1,S1 和R1 的类型是BOOL.
SEMA
一个软件信号(可中断)
BUSY= SEMA(CLAIM, RELEASE)含义是:
BUSY:= X;
IFCLAIM THEN X:=TRUE;
ELSIFRELEASE THEN BUSY := FALSE; X:= FALSE;
END_IF
X是一个内部的BOOL型变量,初始值为 0,
BUSY,CLAIM 和RELEASE的类型是BOOL.
C.6. 边沿检测
R_TRIG
上升边沿检测器.
FUNCTION_BLOCKR_TRIG
VAR_INPUT
S1 : BOOL;
END_VAR
VAR_OUTPUT
Q0 : BOOL;
END_VAR
VAR
M : BOOL := FALSE;
END_VAR
Q0:= S1 AND NOT M;
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
VAR_INPUT
S1: BOOL;
END_VAR
VAR_OUTPUT
Q0: BOOL;
END_VAR
VAR
M: BOOL := FALSE;
END_VAR
Q0:= NOT S1 AND NOT M;
M:= NOT S1;
END_FUNCTION_BLOCK
只国输入变量S1是TRUE,那么输出Q0和变量M为FALSE,只要S1是FALSE,则输出Q0为TRUE,然后M被置为TRUE,这就是说,对F_TRIG的任何一次调用,Q0将是 FALSE,直到S1有一个上升并再次下降时.
C.7. 计数器
CTU
向上计数器:
CTU(CU,RESET, PV, Q, CV) 含义是:
IFRESET THEN CV:=0;
ELSEIFCU AND (CV < PVmax)
THEN CV := CV + 1;
END_IF;
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_ THEN CV:=PV;
ELSEIFCD AND (CV > PVmin)
THEN CV := CV - 1;
END_IF;
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)含义是:
IFRESET THEN CV:=0;
ELSIFLD_ THEN CV:=PV;
ELSEIFCU AND (CV < PVmax)
THEN CV := CV + 1;
ELSEIFCD AND (CV > PVmin)
THEN CV := CV - 1;
END_IF;
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.
C.8. 计时器
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。
也就是说,Q产生了了个由PT确定时间的信号。
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。
这就是说,当到达PT定义的时间时,Q有一个上升边缘。
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,
这就是说,当达到PT定义的时间时,Q有一个下降边缘
TOF的作用用图形表示如下:
D.TWinCAT PLC中的操作数
有TWinCAT PLC中,操作数可以是常量,变量,地址以及〔在ST中〕,功能调用。
BOOL-Constants布尔常量
布尔常量的值是TRUE和FALSE.
TIME-literals时间文字
在TWinCAT PLC中,可以说明TIME类型的文字。例如,标准库中的记时器功能块使用 TIME类型的变量。一个时间文字由一个打头的"t"或"T"以及一个交叉"#"组成,在后面是被说明的时间。时间由天("d"表示), 小时(用"h"表示), 分钟("m"表示), 秒("s"表示) 以及毫秒("ms")组成。注意:时间值必须按照从大到小的顺序排列。这就是说,天在小时前面,小时在分钟前面,等等。某些值可被省去。
在一个ST语句中,TIME-literals时间文字的正确用法如下:
TIME1:= T#14ms;
TIME1:= T#100S12ms; (* Overflow in the firstcomponent *)
(*is permitted *)
允许第一个组成部分溢出
TIME1:= t#12h34m15s;
不正确的TIME-literals时间文字:
TIME1:= t#5m68s; (* Overflow in a lowertime value. Correct *)
(* would be: t#6m8s *)
一个较低位的时间值溢出,正确的写法是 t#6m8s。
TIME1:= 15ms; (* missing T# *)丢失T#
TIME1:= t#4ms13d; (* wrong order of the timevalues *)错误的时间顺序
DATE-literals日期文字
一个DATEliteral日期文字的说明从?d#“,?D#“,?DATE#“或?date#“.开始,在它们的后面,你可以按照年-月-日的顺序插入一个日期。
举例:
DATE#1996-05-06
d#1972-03-29
Time of day-literals一天的时间文字
一天的时间文字Time of day-declaration从?tod#“,?TOD#“, ?time_of_day#“或?TIME_OF_DAY#“,开始,在它们的后面你可以按照小时:分钟:秒的语法规则插入时间,秒可以是个实数,所以秒可以用分数说明。
举例:
TIME_OF_DAY#15:36:30.99
tod#00:00:00
Date and Time-literals日期和时间文字
日期和时间可以组合成日期和时间文字DateandTime-literals. 日期和时间的说明部分 从?dt#“,?DT#“, ?DATE_AND_TIME#“或?date_and_time#“.开始。在日期说明的后 面, 必须插入符号“-”,其后是时间.
举例:
DATE_AND_TIME#1996-05-06-15:36:30.99
dt#1972-03-29-00:00:00
numbers数字
在TWinCAT PLC中,数字可以用二进制,十进制或十六进制表示。如果一个数字不是十进制,那么必须表示它的基数,其后是一个"#"字符和数字。十六进制数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: | 0 | 到 | 65535 |
DINT: | -2147483648 | 到 | 2147483647 |
UDINT: | 0 | 到 | 4294967295 |
因此,在把较大类型的数转换为较小类型的数时,有可能丢失信息,如果被转换的数字比类型范围要大,那么只能考虑低位数。例如,如果你转换的数字是4223 (十六进制为16#10_7f)使用DINT_TO_BYTE转换命令,你得到的数字是127 (十六进制为16#7f).
REAL-Constants实数常量
实数用十进制分数表示
Strings字符串
一个字符串用字符和围绕字符的符号 (')表示.
举例:
'w1Wü??' 'Susi and Claus' ':-)'
Variables变量
变量或者被说明为局部变量〔在一个POU的说明语句部分〕或者被说明为全局变量〔在全局变量表中〕。
变量的助记符不允许有空格,不允许说明两次,不允许是关键词。
变量可被使用在任一场合,在该场合中,变量的类型是可用的.
Addresss地址
一个单元素变量直接用一个特殊符号表示。该特殊符号是由百分号"%",表示地点的词头和表示数位大小的词头组合而成。一个或多个未被标记的整数用句点“ 。” 分开。
系统支持下面表示地点的词头:
I | 输入地点 |
Q | 输出地点 |
M | 存储地点 |
系统支持下面的表示倍数的词头:
X | 一位 |
None | 一位 |
B | 一字节〔8位〕 |
W | 一个字〔16位〕 |
D | 双字〔32位〕 |
举例:
%QX75and %Q75 Output bit 75
%IW215 Input word location 215
%QB7 Output byte location 7
%MD48 Double word at memory location 48
%IW2.5.7.1 depends on hardware configuration
一个有效的地址取决于当前程序的PLC组态.
Memory location存储地点
在TWinCAT PLC中,所有被支持的数位可用于对存储器进行寻址。
例如,地址%MD48正在寻找字节号为 192, 193, 194 和195 的存储器地址(48 * 4 = 192).存储器中的第一个字节号是No.0.
同样地,你可寻找存储器中WORDS和BYTES甚至BITS的地址。例如,%MB5.0, 你寻找字节号为No.5的第一位.
System flags系统标志
系统标志是用变量来说明,并取决于你的特定的控制器。为了找出你的系统有哪些变量,执行'Insert' 'Operand'命令,一个组合箱出现,在这里你可以选择 "System Variable" 选项.
Arrays 数组
TWinCAT PLC支持1,2,和3维数组。一个二维数组的规定写法如下:
<Array_Name>:ARRAY [<lb1>..<ub1>,<lb2>..<ub2>] of <基本数据类型 >.
Array_Name是一个助记符,Ib1,ub1,Ib2,ub2必须是整数。
举例:
Cardgame: ARRAY [1..13, 1..4] OF INT;
如果数组中的一个数被用作操作数,那么按如下寻址:
<Array_Name>[Index1,Index2]
在上面的数组例子中,位号为9,2的数字按如下寻址:
Cardgame[9,2]
Functions函数
在ST语言中,一个函数的调用可以作为一个操作数使用
举例:
Result:= Fct(7) + 3;
Addressing of structure components结构变量的组成成分的寻址
结构变量中的组成成分按如下寻址:
<Structure_Name>.<Component_Name>
例如,一个结构变量名是“Week”,里面有一个名为”Monday”的组成成分,我们将按如下方法寻找这一成分的地址:
Week.Monday
Addressing of POU-variablesPOU变量的寻址
功能块和程序的变量其寻址方式与结构中组成成分的寻址方式相同。首先表示POU的名称,然后是一个点“ 。”,接着是想要寻找的变量名.
E. 错误信息参考
在语法上可能会出现下面的错误:
"Non-Boolean expression <name> used withcontact”
.把与触点有关的表达式改为一个布尔表达式
"Non-Boolean expression <name> used withcoil"
把与线圈有关的表达式改为一个布尔表达式.
"Identifier expected"
在说明语句行的开始,写一个有效的助记符.
"Overflow of identifier list"
减少助记符数量(64000个是可行的).
"VAR, VAR_INPUT, VAR_OUTPUT or VAR_INOUTexpected"
在一个POU的名称后面,第一行必须是其中的一个关键词.
"Unexpected end"
在说明语句部分中:在说明语句部分的结尾加上END_VAR关键词.
在文本编辑中:添加语句,该语句用于结束最后的语句序列.
"END_VAR or identifier expected"
在说明语句行的开始写一个有效的助记符或写END_VAR.
"Expecting... or ..."
在出错行里写上两项中的其中一项.
"Name used in interface is not identical with POUName"
用'Project''RenameObject'命令重新给POU起名,或者在POU的说明语句部分改变POU的名称。名称要写在 PROGRAM, FUNCTION或 FUNCTION BLOCK关键词的后面.
"Expecting type specification"
在说明语句的助记符后面写一个有效的类型。
"Error in initial value"
写一个与说明语句的类型相一致的直接量作为初始值.
"Duplicate definition of identifier<Name>"
给有相同名称的助记符重新定名.
"Identifier <Name> not defined"
在POU的说明语句部分或者在全局变量表中说明这个助记符.
"LD expected"
在这一行中仅允许有一个LD语句.
"IL Operator expected"
把这一行的第一个字符串改为一个有效的运算符或函数
"Variable with write access or direct addressrequired for ST, STN, S, R"
用一个写存取变量代替操作数。
"Type mismatch: Cannot convert <Type1> to<Type2>."
检查操作数要求的类型〔因此,在你的Help文件中检索操作数〕。把产生错误的变量类型改为允许的类型或取其他的变量.
"Unexpected end of text in brackets"
插入一个右括号
"<Operator> in brackets not allowed"
这个运算符不允许放在括号内,去除括号或运算符。
"Closing bracket with no corresponding openingbracket"
删除右 括号或者加上一个左括号.
"Operand expected"
加上一个附加的操作数。
"Operator is not extensible"
检查这个运算符的操作数的数量并去除多余的操作数.
"Number expected after '+' or '-'"
把符号‘ +’或‘ -’后面的字符串改为一个有效的直接量。
"No comma allowed after ')'"
去除逗号.
"Unknown type <string>"
把<string>改为一个有效的类型.
"'[<index>]' needs array variable"
说明括号前的助记符为一个数组或者将它改为一个被说明的数值变量.
"Index expression of an array must be of typeINT"
把下标改为INT,或者改成类型为TYPE INT的变量.
"Too many indexes for array"
检查用于说明数组的下标数量(1,2或 3)并去除多余的下村.
"Too few indexes for array"
检查用于说明数组的下标数量(1,2或3)并添加丢失的下标.
"'.' needs structure variable"
在'.'左边的助记符不是一个结构变量或一个功能块例程,把它改成一个结构变量或一个功能块例程,或者去除点‘ 。’以及点的右边的助记符.
"<component> is not a component of<variable>"
如果变量是一个结构变量,那么把<component>改为这个结构中被说明的一个变量。如果变量是一个功能块例程,那么把<component>改为在功能块中已被说明的输入或输出参数。
"'N' modifier requires operand of type BOOL"
去除N,并用NOT运算符对操作数进行”非”运算。
"<identifier> is no function"
把<identifier>改成与项目相连的库中的某个函数或者改成在项目中被说明的某个函数.
"Type mismatch in parameter <number>:Cannot convert <Type1> to <Type2>."
检查这个运算符,函数或功能块的操作数<number>所要求的类型。将产生错误的变量类型改为一个被允许的类型或者取一个被允许的一个类型的其它变量.
"Conditional Operator requires type BOOL"
前面指令的执行结果不珍有BOOL类型。插入有布尔结果的一个运算符或一个函数.
"Function name not allowed here"
用一个变量或直接量代替函数调用.
"Label in brackets not allowed"
去除标号或括号.
"Label <LabelName> is not defined"
定义一个标号<LabelName>或把 <LabelName>改成一个被定义的标号.
"CAL, CALC or CALN require function blockinstance as operand"
说明一个你想要调用的功能块例程.
"Address expected after 'AT'"
在AT关键词后面插入一个有效的地址或去除AT关键词.
"Only BOOL variables allowed on bit addresses"
把说明语句中的类型改为BOOL或把地址改成其它大小的地址.
"Only VAR and VAR_GLOBAL can be located toaddresses"
去除地址位.
"It is not possible to locate a multidimensionalarray to an address"
去 除地址位.
"It is not possible to locate an array of stringsto an address"
去除地址位.
"It is not possible to locate an array of anarray to an address"
去除地址位.
"Unrecognized variable or address"
这个观察变量在项目中没有被说明,当按<F2>键时,你得到有关说明变量的帮助.
"Extra characters following valid watchexpression"
去除多余的字符.
"POU <name> is not defined"
用'Project''AddObject'命令定义一个POU的名称<name>,或者把<name>名称改为一个已定义的POU的名称.
"<Name> is not an input variable of thecalled function block"
检查被调用的功能块的输入变量,并把<Name>名改为功能块的其中一个输入变量.
"Type mismatch on input variable <Name>:Cannot convert <Type1> to <Type2>."
<Name>名称被赋给一个不恰当类型的值,把被赋值的变量,直接量或语句改为 <Name> 名称.
"Jump and Return is only allowed on the rightside of a network"
去除跳转(Jump)或返回(Return).
"Jump and Return require BOOL as input type"
前面指令的结果值不是BOOL型。插入有布尔结果值的一个运算符或一个函数.
"A jump must have exactly one label"
把跳转语句的文本改为一个被定义的标号.
"POU <Name> need exactly <number>inputs"
检查这个POU所需要的输入数量并去除多余的输入或添加丢失的输入.
"Another ST statement or end of POUexpected"
POU在一个完整的语句里结束。使语句完整或去除这个语句.
"Too many parameters infunction <name>"
去除多余的参数.
"Too few parameters in function<name>"
加入丢失的参数.
"IF or ELSIF require BOOL expression ascondition"
把表达式改为一个有布尔结果的表达式。
"WHILE requires BOOL expression ascondition"
把表达式改为一个有布尔结果的表达式.
"UNTIL requires BOOL expression ascondition"
.把表达式改为一个有布尔结果的表达式
"NOT requires BOOL operand"
把操作数改为一个布尔型操作数.
"No instance specified for call of FB<Name>"
把功能块例程文本(初始值为"Instance”)改为一个有效的功能块例程说明语句的助记符.
"<Name> must be a declared instance of FB<FBName>"
把功能块例程文本(‘初始值为Instance’)改为一个有效的功能块例程说明语句的助记符.
"Variable of FOR statement must be of typeINT"
把变量改为INT类型的一个变量.
"Expression in FOR statement is no variable withwrite access"
把变量改为一个有写存取的变量.
"Start value of FOR statement must be of typeINT"
把变量改为一个INT类型的变量.
"End value of FOR statement must be of typeINT"
把变量改为一个INT类型的变量.
"Increment value of FOR statement must be of typeINT"
把变量改为一个INT类型的变量.
"EXIT outside a loop"
去除Exit指令。
"Illegal address: <Address>"
在你的PLC组态中检查哪些地址是有效的。然后用有效地址代替出错的地址或更改 PLC 组态.
"END_STRUCT or identifier expected"
结构定义必须用END_STRUCT关键词结束.
"<string> is no operator"
用一个有效的运算符代替<string>字符串.
"Type mismatch in parameter <Name> of <FBName>:Cannot convert <Type1> to <Type2>."
检查<POU>的参数<parameter>所要求的类型。把产生错误的变量类型改为<Type2>类型,或选择 <Type2>类型中的另一个变量.
."<name> is no function block"
用一个有效的函数名称代替<name>名称.
"No write access to variable <name>allowed"
用一个有写存取的变量代替<name>名称.
"Out of Memory"
把项目存储起来,并离开系统。离开Windows环境,在下一次重新开始建立项目.
"<number> operands are too few for<Operator>. At least <number> are needed"
检查运算符<Operator>需要多少操作数,并去除多余的操作数。
"<number> operands are too many for<Operator>. Exactly <number> are needed"
检查运算符<Operator>需要多少操作数,并添加丢失的操作数.
"ADR needs a variable, not a expression orconstant as operand"
用一个变量代替表达式或常数.
"Duplicate definition of label <name>"
你使用同一名称来说明两个标号。给其中的一个标号重新定名.
"Illegal duration constant"
你输入了一个错误的时间常数,可能的错误是:
在时间的开始丢失t或#。
出现两个同样的时间单位 (如: t#4d2d).
错误的时间单位顺序.
错误的时间单位(不是d,h ,m ,s或ms).
"ExpectingNumber, ELSE or END_CASE"
没有正确地完成CASE语句。添加关键词END_CASE.
"CASE requiresselector of an integer type"
选择器变量的类型是错误的。把选择器改为一个类型为INT的变量,或改变选择器的类型。
"Number expected after ','"
去除逗号','或者添加另一个号码.
"At least one statement is required"
插进一个语句.
"Integer number or symbolic constantexpected"
在这个CASE语句中,只允许一个整数值或符号常数。代替错误的数值.
"Multiple underlines in identifier"
在助记符名称内不允许有多条下划线。去除多余的下划线.
"Comments are only allowed at the end of line inIL"
把注释移到一行的末端.
"At most 4 numerical fields allowed in addresses"
去除地址中多余的数字区.
"Keywords must be uppercase"
用大写字母写关键词.
"Function block call requires function blockinstance"
在POU的说明语句部分,说明某个功能块的一个例程.
"Expression expected"
在这种情况下,要求有一个表达式.
"INI operator needs function block instance ordata unit type instance"
把操作数改为一个功能块的例程,因此所说明的操作数作为一个功能块例程,或使用一个被说明的功能块例程,或使用一个数据单元类型的状态。
"The global variables need too much memory.Increase the number of segments in 'Project''Build Options'"
去做信息正告诉你的事情。
"Overflow in duration constant"
你使用了一个太大的时间常数。
"Step name is no identifier '<name>'"
用一个有效的助记符代替<Name>名称。
"Extra characters following valid step name:'<name>'"
去除多余的字符。
"Step name duplicated: '<name>'"
修改一个与其它步骤的名称完全一样的步骤+名称。
"Jump to undefined Step: '<name'"
把<name>名称改为一个已有的步骤的名称或按所要求的名称插入一个步骤。
—A—
ABS 147
ACOS 148
Action 18, 32
Action Init 30
active step 18
Address 163
Address Function 144
Alternativ Branch inSFC 110
ArithmeticOperators 135
Array 164
ASIN 148
ATAN 148
—B—
Bistable FunctionBlocks 153
BitstringOperators 138
BOOL-Constants 161
Breakpoint 22, 61, 81, 97, 103, 108, 115
Breakpoints inSFC 115
Build 40
Building options 43
—C—
CAL 145
Call Stack 63
Call Tree 54
CASE 91
Check 40
Clear Action 112
Clear Transition 112
CoDeSys 6, 37
Coil 20, 105
Comments in networks 96
Communicationparameters 67
ComparisonFunctions 141
CONCAT 151
Concatenation 151
Contact 19, 104
convertingobjects 53
Copy 56
Copy in FUP 102
COS 147
Cosine 147
Counter 155
Cross Reference 55
CTD 156
CTU 155
CTUD 156
Cut 56
—D—
Date andTime-literals 162
DATE-literals 161
Debugging 7, 22, 79, 97
Declaration 25, 73
declarationeditor 73
Declaration table 75
Delete 57
DELETE 152
Delete in FUP 102
DINT_TO_BYTE 146
DINT_TO_INT 146
Document frame 117
Documentation 39
Dokumentieren 47
Download 60
—E—
Edge Detection 154
Editor 73
enable Input 105
EN-Input 21, 105
EXIT 94
EXP 147
Export 48
Expressions 85
EXPT 148
—F—
F_TRIG 155
FBD 8, 10, 13, 19, 24, 98
FBD Online 103
FBD-editor 96
FBD-Editor 98
File 37
file protection 46
FIND 153
Flow Control 64, 83, 95, 97
Font 68
Forcen 63
Forcing 121
FOR-loop 92
Function 8, 165
function block 10
Function Block 24
Function BlockDiagram 8, 10, 19, 24, 98
Function block inFBD 101
function block,Instance 10
functions in FBD 101
—G—
global constants 117
global variables 116
graphical editors 96
—H—
Help 71
help manager 120
Help Manager 123
—I—
IEC1131-3 23
IF-Anweisung 90
IL 8, 10, 11, 12, 17, 24, 77
IL-Editor 82
Import 48
initial step 18
Input variables 73
Inputs in FBD 101
INSERT 152
Insert in SFC 110
Insert networks 96
Inserting anoutput 101
Insertingelements in networks 100
instance 10
Instruction List 8, 10, 11, 12, 17, 24, 77
INT_TO_REAL 146
invocation of afunction block in ST 88
Invocation of aprogram 14
Invocations offunction blocks 11
—J—
Jump in SFC 111
Jumps in LD 107
—K—
Key Words 73
Keywords 74
—L—
Labels 96
Ladder Diagram 8, 19, 103
LD 8, 19, 103
LD Online 108
LD-editor 96
LD-Editor 103
LEFT 150
LEN 150
library 15
Library 38
library manager 28, 119
line numbers 75
link a library 119
Links in LD 20
LN 147
Local variables 73
LOG 147
logarithm 147
Login 59
Logout 59
loop 84
—M—
main program 15, 30
Memory location 164
Merge 48
MID 151
Monitoring 22, 77
Multi Channel 126
—N—
Naturalexponential 147
Negate in LD 107
Network 96
Numericalfunctions 147
—O—
Object 52
Objectlist 52
Online 7, 36, 58, 79, 97, 115, 121
Operand 78
Operator 78, 135
Operatorsin FBD 100
Output variables 73
—P—
Parallel Branch inSFC 111
Parallel Contact 105
Password 46
Paste 56
Paste in FUP 102
Paste in LD 107
PLC Configuration 15
PLC_PRG 6, 15, 24, 30
PLC-Configuration 116
POU 8, 24
Print 38
Program 6, 13, 24
Project 8, 37
—R—
R_TRIG 154
REAL_TO_INT 146
REAL-Constants 163
REAL-Konstanten 162
REPEAT-loop 93
Replace 51, 58
REPLACE 152
retentive globalvariables 117
RETURN 89
Return in LD 107
RIGHT 150
ROL 149
ROR 149
RS 153
—S—
Sampling Trace 7, 22, 121
Search 51, 57
Searching in Help 71
Selectionfunctions 139
Selections in SFC 110
SEMA 154
Sequential FunctionChart 8, 10, 13, 17, 24, 30, 109
SFC 8, 10, 13, 17, 24, 30, 109
SFC Online 115
SFC-Editor 109
SFC-Flags 113
SHL 148
short cut expansionfeature 74
SHR 149
Simulation 6, 23, 35, 66
SIN 147
Sine 147
Single Cycle 63
single step 22
Single Step 62
Snap shot 23
SQRT 147
Square root 147
SR 153
ST 8, 10, 12, 17, 77, 84
standard library 146
Standard library 28, 119
Standard POUs 8
standard.lib 119, 146
Statusbar 68
ST-Editor 84
Step 18, 30
Step attributes 112
Steppen 79
Stepping 97, 103, 108
String 163
String functions 150
Structure 16
Structured Text 8, 10, 17, 77, 84
System flag 164
—T—
TAN 148
Task 16
Task Editor 127
Text editor 77
The assignment operator 88
Time control inSFC 113
Time ofday-literals 161
TIME-literals 161
Timer 27, 157
TOF 159
TON 158
Toolbar 68
TP 28, 157
Trace 121
TraceConfiguration 122
Transition 18, 30
Transitionsbedingung 32
trigger 123
TRUNC 147
Types 74
—U—
Undo 56
userdefinedlibraries 119
—V—
Variable 163
View 68
Visualisation 129
—W—
Watch Variables 121
Watch Window 120
Watch WindowOnline 121
WHILE-loop 93
window 69
write protectionpassword 46
—Z—
Zoom Action 111
Zoom Transition 111
-
-
endresssh 发表于 2014/12/19 15:06:02
E+H:
E+H罐旁指示仪NRF590是一个监测单元,与E+H办事处生产的Micropilot M和Micropilot S系列雷达,以及其他 HART 兼容仪表配套使用。E+H NRF590 安装在罐旁,不仅能显示测量数据,还能够对安装在罐上仪表进行配置并提供本安供电,支持多种工业标准数字式仪表通信协议,可以集成在开放式罐区存量管理系统中。
皮尔兹:
pilz是一家全球运营的完整自动化技术供应商。我们供应安全自动化组件、系统及服务。皮尔兹生产的产品众多,主营产品pilz继电器,皮尔兹传感器,皮尔兹伺服电机等,任何有关pilz问题可以联系pile工作人员。
邦纳:
邦纳传感器选型指南-选型指南_专业资料。邦纳传感器选型指南2004 ~ 2005 Specifier’s Guide 光电传感器 测量与检测产品 机床安全产品邦纳传感器系列产品,保证100%原装正品,型号齐全。
穆格:
穆格中国成立于 1997 年,在上海、北京、广州和香港设有五个办事处,其中上海有2个工厂(穆格控制系统(上海)有限公司和穆格控制设备(上海)有限公司)。穆格公司由电液穆格伺服阀的发明人威廉·C·moog创建于一九五一年,是一家总部位于美国纽约州布法罗市的跨国公司,现已成为航空和工业上应用的精密控制系统的世界范围内的佼佼者。
哈威:
哈威(HAWE)液压有限公司成立于1949年,50多年来一直致力于高压液压元件及系统的开发与生产。公司现有员工1000余名,哈威产品阀体全钢结构,耐高压;结构紧凑,体积小巧;无泄漏,使用寿命长,广泛应用于工程机械、机床、船舶、液压工具等行业。
用力士乐的变速泵驱动,强大的液压系统的稳定性、能源效率、紧凑的电子产品的动态特性这三者是密切相关的。在e4EE sytronix网络学习的培训中,提供了必要的基础知识、技术背景、电子和液压的智能的相互作用。
引用 endresssh 2014/12/19 15:06:02 发表于2楼的内容
-
引用 nihaobb 2021/10/23 14:18:50 发表于3楼的内容