CoDeSys编程手册

上传人:xgs****56 文档编号:9376211 上传时间:2020-04-05 格式:DOC 页数:365 大小:10.88MB
返回 下载 相关 举报
CoDeSys编程手册_第1页
第1页 / 共365页
CoDeSys编程手册_第2页
第2页 / 共365页
CoDeSys编程手册_第3页
第3页 / 共365页
点击查看更多>>
资源描述
CoDeSys V2 3 1 1 1 CoDeSys 是什么 4 1 2 CoDeSys 功能一览 4 2 CoDeSys 组成 7 2 1 工程组件 7 程序 11 2 2 语言 14 2 2 1 指令表 14 2 2 2 结构化文本 16 2 2 3 顺序功能图 SFC 21 2 2 4 功能模块图 25 2 2 5 连续功能图表编辑器 25 2 2 6 梯形图 25 2 3 调试 联机功能 27 2 4 标准化 28 3 我们来编写一个小程序 29 3 1 控制一个交通灯信号单元 29 3 2 可视化交通信号单元 38 4 各个单独的组件 43 4 1 主窗口 43 4 2 工程选项 45 4 3 管理工程 62 4 3 1 工程 数据库连接 85 4 4 管理工程中的对象 91 4 5 编辑功能 98 4 6 联机功能 104 4 7 设置窗口 117 4 8 帮助 118 5 CoDeSys 中的编辑器 119 5 1 关于所有的编辑器 119 5 2 声明编辑器 120 5 3 声明编辑器中的预处理 pragma 指令 128 5 4 文本编辑器 135 5 4 1 指令表编辑器 138 5 4 2 结构化文本编辑器 139 5 5 图形化编辑器 140 5 5 1 功能模块图编辑器 143 5 5 2 梯形图 147 5 5 3 顺序功能图表编辑器 153 5 5 4 连续功能图表编辑器 161 6 资源 172 6 1 全局变量 变量配置 文件框架 172 6 1 1 全局变量 172 6 1 2 变量配置 176 6 1 3 文档框架 177 6 2 报警配置 178 6 3 库管理器 186 CoDeSys V2 3 2 6 4 日志记录 187 6 5 任务配置 189 6 6 监控和配方管理器 195 6 7 工作空间 197 6 8 对象系统设置 197 6 9 PLC 配置 198 6 9 1 综述 198 6 9 2 PLC 配置中的工作 199 6 9 3 PLC 配置中的一般设置 199 6 9 4 定制特定的参数的对话框 200 6 9 5 I O 模块配置 201 6 9 6 通道配置 203 6 9 7 Profibus 模块的配置 204 6 9 8 CAN 模块的配置 211 6 9 9 Can 驱动器的配置 215 6 9 10 在线模式中的 PLC 配置 218 6 9 11 来自 PLC 的硬件扫描 状态 诊断信息 219 6 10 采样追踪 219 6 10 1 综述和配置 219 6 10 2 采样追踪的显示 220 6 10 3 保存采样追踪 222 6 10 4 外部采样追踪配置 222 6 11 参数管理器 223 6 11 1 参数管理器的编辑 224 6 11 2 参数列表的导出 导入 228 6 11 3 在线模式下的参数管理 228 6 12 PLC 浏览器 229 6 13 工具 232 7 ENI 237 8 DDE 接口 239 8 1 CoDeSys 程序设计系统的 DDE 接口 240 8 2 DDE 网关服务器的 DDE 信息 240 9 CoDeSys 的许可证管理器 243 10 附录 244 附录 A IEC 操作符和额外的标准扩展功能块 244 10 1 算术操作符 244 10 2 位串操作符 247 10 3 移位操作符 249 10 4 选择操作符 251 10 5 比较操作符 253 10 6 地址操作符 255 10 7 调用操作符 256 10 8 类型变化 257 10 9 数字操作符 262 10 10 初始化操作符 265 附录 B CoDeSys 中的操作数 266 CoDeSys V2 3 3 10 11 常量 266 10 12 变量 268 10 13 地址 270 10 14 功能 271 附录 C CoDeSys 中的数据类型 272 10 15 标准数据类型 272 10 16 已定义的数据类型 273 附录 D CoDeSys 程序库 279 10 17 standard lab 标准库 279 10 17 1 字符串功能 279 10 17 2 双稳功能程序 283 10 17 3 触发器 284 10 17 4 计数器 285 10 17 5 定时器 287 10 18 Util lib 库 290 10 18 1 BCD 转换 290 10 18 2 位 字节功能 290 10 18 3 数学辅助功能 291 10 18 4 控制器 293 10 18 5 信号生成 294 10 18 6 功能操作器 296 10 18 7 模拟值的处理 297 10 19 AnalyzationNew lib 库 298 10 20 CoDeSys 系统程序库 299 附录 E 操作符及程序库模块总结 299 10 21 CoDeSys 中的操作符 299 10 22 Standard lib 库的元素 302 10 23 Util lib 库的元素 303 附录 F 命令行 命令文件 303 10 24 命令行相关命令 303 10 25 命令文件 cmdfile 命令 304 附录 G 导入 Siemens 产品数据 310 10 26 导入一个 SEQ 符号文件 311 10 27 将 S5 转换成 IEC 61131 3 311 10 28 导入一个 S5 工程文件 314 1 附录 I 应用键盘 315 10 34 应用键盘 315 10 35 组合键 315 CoDeSys 中的关键字 318 CoDeSys 文件 321 附录 K 关于编译错误和警告 323 10 41 警告 323 10 42 错误 327 CoDeSys V2 3 4 1 CoDeSys 简要介绍 1 1 CoDeSys 是什么 CoDeSys 是可编程逻辑控制 PLC 的完整开发环境 CoDeSys 是 Controlled Developement System 的缩写 在 PLC 程序员编程时 CoDeSys 为强大的 IEC 语言提供了一个简单的方法 系统的编 辑器和 调试器的功能是建立在高级编程语言的基础上 如 Visual C 1 2 CoDeSys 功能一览 如何构建一个工程 一个工程放在以工程命名的文件中 新工程中创建的第一个程序组织单元 POU 自动命名为 PLC PRG 程序从这里开始执行 相当于 C 程序中的主函数 从这一点能够访问其它的 POUs 程序 功能块 和 功能 一旦定义了一个任务配置 就不必创建程序 PLC PRG 了 在任务配置章节将讲到更多的内容 在工程中有不同的对象 POUs 数据类型 可视化和资源 对象管理器中包含了工程中的所有对象 如何建立一个工程 首先 为了保证在工程文件中使用的地址的正确性 应该配置 PLC 然后创建解决问题所需要的 POUs 当程序编写完成时 可以编译这个工程并去除所有的错误 此刻可以用你所喜欢的编程语言来编 写这些 POUs 如何测试自己的工程 一旦排除了所有的错误 激活仿真模式 登录入仿真的 PLC 并在 PLC 中 加载 工程文件 此时 处于联机模式 现在打开一个 PLC 配置的窗口测试工程的时序正确性 手动为此输入输入变量 观察输出变量是 不是所期望的 你也可以观察 POU 中的局部变量的序列值 在监视和接收管理器中可以配置你希望检 查的值的数据记录 调试 你可以在程序出错的地方设置断点 当程序运行后停在断点处时 你可以及时检查在这个点处所 有变量的值 通过一步一步 单步 执行 你可以检查程序的逻辑正确性 附加的联机功能 更多的调试功能 你可以设置程序变量并输入输出某些值 你可以通过流程控制来检查那些程序行已完成运行 日志文件按照时间的顺序记录了联机模式下的操作以及用户行为和内部进程的情况 如果在目标设置中激发了采样追踪 那么它允许你在一个较长的过程中来追踪和显示变量值的真 实变化过程 PLC 浏览器是目标系统的一个特殊功能 它能够用来向 PLC 请求某些信息 当工程完成了建立和测试后 它也能够装载到硬件中并进行测试 和仿真模式 式下有相同的联机 功能 附加的 CoDeSys 功能 整个工程可以在任何时候文档化或导出到一个文本文件中 为了通讯的目的 CoDeSys 有一个符号接口和一个动态数据交换 DDE 接口 网关服务器和 OPC 服务器和动态数据交换服务器是 CoDeSys 的标准安装软件包的组件 CoDeSys V2 3 5 使用恰当的目标设置能够把相同的 CoDeSys 工程加载到不同的目标系统中 可以通过目标文件来 加载这些目标设置 通过当前的目标设置来激活网络全局变量和参数管理器 可以在控制器网络中交换数据 通过 ENI 服务器 用工程接口能够访问任何我们所期望的源代码管理程序 ENI 服务器是个独立 运行的程序 CoDeSys 的程序组织单元和编译文件可以以文档方式存于数据库中 它们能够被 ENI 服 务器的客户端访问到 这允许在一个工程文件的工作过程中进行多用户操作 它为 CoDeSys 和其它工 具提供了一个公用数据缓冲池而且它使版本管理成为可能 工具 这个功能性也是与目标有关的 它允许启动 CoDeSys 工程中的特殊目标执行文件 除此之 外还可以定义要被装载到控制器中的这些文件 它与外部工具的联系可以在目标文件中预定义或者插 入到工程资源树中 CoDeSys 的可视化可以处理象网页可视化或目标可视化 这样可以通过因特网或者 PLC 监视器的 运行来展示可视化 CoDeSys V2 3 7 2 CoDeSys 组成 2 1 工程组件 工程 一个工程包含了 PLC 程序中的所有对象 工程存储在以工程命名的文件中 工程中包含下列对象 POU 数据类型 可视化 资源和库 POU 程序组织单元 功能 功能块 程序是程序组织单元 它们能够通过动作来增补 每一个程序组织单元都包含一个 定义部分和主体部分 主体部分可以用 IEC 的语言来编写 这些语言包括指令列表 结构化文本 顺序 功能图 功能模块图 梯形图或连续功能图表 CoDeSys 支持所有 IEC 标准的 POU 如果你想在你的工程文件中使用这些 POU 必须在你的工程文件 中包含标准库文件 standard lib POU 可以调用其它的 POU 但递归调用是不允许的 功能 一个功能是一个 POU 它正确地产生一个数据元素 可以包含若干元素 比如 字段或者结构体 在 处理过程中 可以用文本化语言中的表达式中的一个操作数来调用它 在声明一个功能的时候 一定要给它一个类型 这就是说 在功能名后面加上一个冒号然后跟一个 数据类型 一个正确的功能声明可以参考下面的例子 FUNCTION Fct INT 另外 必须分配给功能一个结果 即把功能名作为一个输出变量 功能的声明从关键字 FUNCTION 开始 推荐的声明方式 下例是在指令列表 IL 中的一个功能 它声明了三个输入变量 前两个变量的相乘然后除以第三个变量 功能返回此操作的结果 声明部分 FUNCTION Fct INT VAR INPUT PAR1 INT PAR2 INT PAR3 INT END VAR 程序部分 LD PAR1 MUL PAR2 DIV PAR3 ST Fct 在结构文本中功能的调用可以作为表达式中的一个操作数 功能不会有任何内部条件 这就是说 调用带有相同的输入变量功能将会返回相同的输出结果 下面是调用功能的例子 in IL LD 7 Fct 2 4 CoDeSys V2 3 8 ST Ergebnis in ST Ergebnis Fct 7 2 4 in FUP 功能不会保持内部状态 对于不包含全局变量和地址的功能 每次在它被调用的过程中 给它传递 相同的输入变量 它将返回相同的值 注意 如果一个局部变量在一个功能中被声明为 RETAIN 这也没有任何影响 为此变量将不会写到保留区 如果你定义了一个功能名为 CheckBounds 你可以用它来检验工程中的溢出的范围 定义地功能名是 它的仅有的标识符 更详细的内容请参考 10 1 章节中关于数学运算符中的 DIV 如果在工程中你定义了 CheckDivByte CheckDivWord CheckDivDWord 和 CheckDivReal 功能 如果 你用了除法算式 你可以用它们来检查除数的值 可以避免分母为零 如果你定义了功能名 CheckRangeSigned 和 CheckRangeUnsigned 超出变量定义范围的数据类型被 截取 所有这些检验功能名作为特定的用途保留下来 更多的知识请参考 Defined Datatype Array 在 SFC 中 一个功能的调用只能发生在一个单步操作或变换之内 功能块 一个功能块是一个程序组织单元 在程序中提供一个或多个值 与功能相反 一个功能块没有返回 值 功能块的声明用关键字 FUNCTION BLOCK 开始 推荐的声明方式 可以创建功能块的复制或实例 调用功能块是通过功能块实例实现的 下面是一个在指令列表中功能块的例子 在指令列表中功能块中包含两个输入变量和两个输出变量 一个输出的是两个输入变量的乘积 另一个是两个输入变量的是否相等的比较 声明部分 FUNCTION BLOCK FUB VAR INPUT PAR1 INT PAR2 INT END VAR VAR OUTPUT MELERG INT VERGL BOOL END VAR 在 IL 的执行部分 LD PAR1 MUL PAR2 ST MULERG LD PAR1 EQ PAR2 ST VERGL 功能块实例 CoDeSys V2 3 9 可以创建功能块的复制或实例 每一个实例都有它自己的标识符 并且一个数据结构体中包含它的输入输出和内部变量 实例可以 象变量一样被声明为局部变量或全局变量 然而功能块的名称表示标识符的类型 推荐的声明方式 例如名为 INSTANCE 功能块 PUB 实例 fubInstance FUB 功能块通常是通过上述的实例来调用的 从此功能块实例的外部只能访问它的输入输出变量 不能访问它的内部变量调用 下面是一个访问输入变量的例子 The function block FB has an input variable in1 of the type INT PROGRAM prog VAR inst1 fb END VAR LD 17 ST inst1 in1 CAL inst1 END PROGRAM 功能块 FB 有一个整型的输入变量 in1 功能块和程序的声明部分能够包含实例的声明 实例的声明不能包含在功能之中 访问功能块实例仅限于它被声明的 POU 中 除非它被声明为全局变量 注意 在一个功能块处理完后的所有值将保存下来 直到下一个功能模块调用 所以 功能块调用相同的输入值往往 不返回相同的输出值 注意 如果存在至少一个功能块变量是保留变量 整个实例将被存储在保留区 调用一个功能块 通过建立一个功能块的实例并且用下面的语法来规定要求的变量 可以从其它的 POU 访问这个功能 块的输入和输出变量 在调用时为变量赋值 如果你喜欢在调用功能块的时候再设置输入或输出变量 你可以用指令列表和结构化文本语言 通 过在功能块实例名后面的括号中为变量赋值来进行 对输入变量的赋值就象在声明位置的变量初始化一 样 使用 来分配变量的值 如果在 ST 或 IL POU 的执行窗口中使用选项 With arguments 并通过输入帮助 F2 来插入实例 它将根据这个句式显示所有的变量 但不必为这些变量赋值 例如 FBINST 是一个功能块类型的局部变量 它包含了输入变量 xx 和输出变量 yy 当 FBINST 是通过输入 帮助插入到了 ST 程序中 将显示如下的调用 FBINST1 xx yy 在调用输入输出变量时 请注意 功能块的输入输出变量作为指针来处理 因此在调用一个功能块时 常量是不能赋予 VAR IN OUT 并且从外部 没有读和写的权限 例如 在 ST 模式下调用 fubo 功能块的一个 VAR IN OUT 变量 inout1 VAR fuboinst fubo iVar1 int END VAR CoDeSys V2 3 10 iVar1 2 fuboinst iInout1 var1 下列在这种情况下下列语句示不允许的 fuboinst iInout1 2 或 fuboinst iInout1 2 下面举例说明调用功能块 FUB 关于功能块 FUB 参照上述 功能块 部分 Deklarationsteil FUNCTION BLOCK FUB VAR INPUT PAR1 INT PAR2 INT END VAR VAR OUTPUT MELERG INT VERGL BOOL END VAR Implementationsteil in AWL LD PAR1 MUL PAR2 ST MULERG LD PAR1 EQ PAR2 ST VERGL 乘法运算的结果被存储在变量 ERG 中 比较的结果存储在 QUAD 中 FUB 的实例被声明为 INSTANCE 下面是功能块的实例在指令列表中调用的例子 IL 中调用 FUB 声明部分 PROGRAM AWLaufruf VAR QUAD BOOL INSTANZ FUB ERG INT 0 END VAR 执行部分 CAL INSTANZ PAR1 5 PAR2 5 LD INSTANZ VERGL ST QUAD LD INSTANZ MULERG ST ERG 下面是功能块的实例在结构化文本中调用的例子 声明部分与指令列表部分相同 PROGRAM STaufruf INSTANZ PAR1 5 PAR2 5 bzw INSTANZ QUAD INSTANZ VERGL ERG INSTANZ MULERG 下面是功能块的实例在功能块图中调用的例子 声明部分与指令列表部分相同 CoDeSys V2 3 11 在顺序功能图中功能块的调用只能一步一步进行 程序 一个程序是一个 POU 它在操作过程中返回几个值 程序在工程文件中是全局的 程序的所有值将保 留到下一个程序开始运行 下面是程序的一个例子 程序可以被调用 在一个功能中调用程序是不允许的 同时也不存在程序的实例 如果一个 POU 调用一个程序 并且如果程序的值发生了变化 那么这些变化将保留到下一次程序的 调用时 即使是其它的 POU 内部调用了它 这和调用功能块不同 那里只有给定的功能块实例中的特定的值才会变化 当相同的实例被调用时 这些变化才会发挥重要的作用 推荐的声明方式 程序的声明开始于关键字 PROGRAM 结束于 END PROGRAM 如果你喜欢在调用程序的时候再设置输入或输出变量 你可以用文本语言如指令列表和结构化文本 来做这些 在功能块的实例名后面的括号中为变量赋值 对输入变量的赋值就象在声明位置的变量初始 化一样 使用 来分配变量的值 在结构化文本或者指令列表程序组织单元的执行窗口中 如果程序是通过带 With arguments 选项的 输入帮助插入的 根据这个语法 程序和它的所有变量将自动的显示出来 但是你不必给这些变量赋值 下面是程序调用的例子 IL 中 CAL PRGexample2 LD PRGexample2 out var ST ERG CAL PRGexample2 in var 33 out var erg CoDeSys V2 3 12 ST 中 PRGexample2 Erg PRGexample2 out var PRGexample2 in var 33 out var erg FBD 中 PLC PRG 调用顺序的例子 请参照本页之上的程序 PRGexample LD 0 ST PRGexample PAR Default setting for PAR is 0 CAL IL call ERG in IL call results in 1 CAL ST call ERG in ST call results in 2 CAL FBD call ERG in FBD call results in 3 如果程序 PRGexample 中的变量 PAR 在初始化时被主程序赋予 0 值 随后用上面命名的程序调用一个 接一个的调用 那么程序中 ERG 的结果会有 1 2 和 3 如果改变了调用的顺序 那么给出的结果变量的 值也会相应的跟着变化 PLC PRG PLC PRG 是一个特殊的预定义的 POU 每一个工程文件中必须包含一个这样的特殊的程序 实际上这 个 POU 在每个控制循环中只调用一次 在一个新工程文件创建之后 将首次使用 工程 添加对象 命令 在 POU 的对话框的缺省项目是 一个名为 PLC PRG 的程序类型的 POU 你不能更改这些默认的设置 如果定义了任务 那么工程中可以不包含 PLC PRG 因为在这种情况下 程序的时序依赖于任务的分 配 注意 不要删除或者重命名程序组织单元 PLC PRG 假如你没有使用任务配置 PLC PRG 是一个单任务程序中的主程序 动作 动作能够被定义并分配给功能块和程序 动作代表了一个另外的执行 它可以用用其它的语言进行 创建 每一个动作都有一个名称 每一个动作都是和功能块或者程序中的数据一起工作的 动作使用和标准执行相同的输入 输出变量 和局部变量 下面是一个功能块的动作的例子 在上面的例子中 调用一个功能块计数器增加或减少输出变量 out 的值 它依赖输入变量 in 的值 CoDeSys V2 3 13 调用功能块的复位来设置输出变量为零 相同的变量 out 写到了两个例子中 调用一个动作 调用一个动作是通过 或 注意在 FBD 中的注释 看下 例 如果需要在自己的模块中调用这个动作 只需要在文本编辑器和图形界面中使用动作的名称来构 成功能块的调用而不必需要实例的信息 下面是一个从其他的程序组织单元调用上述动作的例子 声明 PROGRAM PLC PRG VAR Inst Counter END VAR 采用 IL 编程方式 用另一个 POU 调用 Reset CAL Inst Reset In FALSE LD Inst out ST ERG 采用 ST 编程方式 用另一个 POU 调用 Reset Inst Reset In FALSE Erg Inst out 采用 FBD 编程方式 用另一个 POU 调用 Reset 注意 动作在顺序功能图中发挥重要的作用 参照顺序功能图 IEC 标准只认可顺序功能图中的动作 除此之外都不 认可 资源 你需要用资源来配置和组织你的工程文件和追踪变量的值 工程文件或网络中使用的全局变量 添加库文件到工程文件中的库管理器 记录在线期间工作的日志文件 在工程中为报警处理进行报警配置 配置可编程控制器的 PLC 配置资源 通过任务来引导创建程序的任务配置 显示变量值和添加默认变量值的监控和配方管理器 选择目标设置和必要时的确定的目标系统的最终配置 作为工程选项的工作空间 根据在 CoDeSys 中作出的目标系统和目标设置 在你的工程中也要用的到下列资源 用于变量图形显示的采样追踪 用于在同一个网络中与其它控制器交换数据的变量管理器 作为控制监视的 PLC 浏览器 工具箱 可用性依赖对象系统 用于在 CoDeSys 内部调用它外部的工具程序 库 你可以在你的工程文件中包含一系列的库文件 你可以象使用用户定义的变量一样使用库文件的程 序组织单元 数据类型 和全局变量 库文件中的标准库文件和 util lib 是标准的部件并且你经常使用 它 更多的知识请参照 库管理器 CoDeSys V2 3 14 数据类型 参照标准的数据类型 用户可以定义自己的数据类型 可以建立结构体枚举类型和引用 详见 数据类型 可视化 CoDeSys 提供了可视化 因此你可以显示工程的变量 通过可视化的帮助你可以在离线的情况下绘制 几何元素 在联机模式下能够响应特定变量的值从而改变他们的形式 颜色和文本输出 可视化的界面可以用作带 CoDeSys 的 HMI 的 PLC 纯操作接口 或者作为一个网页可视化或通过因特 网与 PLC 直接连接的对象可视化 详见 CoDeSys 可视化 用户手册 2 2 语言 CoDeSys 支持 IEC 61131 所描述的所有语言 文本化的语言 指令表 结构文本 图形化的语言 顺序功能流程图 功能模块图 梯形图 还可采用基于功能模块图的 连续功能编辑器 CFC 2 2 1 指令表 指令表中包含一系列的指令 依赖于操作的类型 每一条指令在一个新行开始并且包含运算符号和一 个或多个用逗号隔开的操作数 在一个指令前面 还可以有一个标号 后缀一个冒号 注释部分在一行的最后 指令与指令之间可以插入空行 例如 LD 17 ST lint Kommentar GE 5 JMPC next LD idword EQ istruct sdword STN test next 请参考 指令表中的修饰符和操作符 指令表中的修饰符和操作符 在指令列表中将用到下面的操作符和修饰符 修饰符 C 与操作符 JMP CAL RET 连用 当前面的表达式处理的结果为 TRUE 时 才 执行此指令 N 与操作符 JMPC 当前面的表达式处理的结果为 FALSE 时 才 CoDeSys V2 3 15 CALC RETC 连用 执行此指令 N 用于其它情况 取操作数的反 不包括累加器 下面是操作符和它们可能的修饰符以及相关的意思 操作符 修饰符 含意 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 CN 跳转到标号 CAL CN 调用程序功能块 RET CN 离开 POU 并返回到调用的地方 执行延时操作 单击这里可以得到所有 IEC 操作符的列表 使用修饰符编写的程序的例子 LD TRUE 把 TRUE 加载到累加器中 ANDN BOOL1 执行 AND 和 BOOL1 变量的反之 与 JMPC mark 当上面的结果为 TRUE 时 跳转到标号 mark 处 LDN BOOL2 保存 BOOL2 的反 ST ERG 把 BOOL2 保存在 ERG 标号 LD BOOL2 保存 BOOL2 的值 ST ERG 把 BOOL2 保存在 ERG 在 IL 中也可以在操作之后放一个圆括号 圆括号内的值被认为是一个操作数 例如 LD 2 MUL 2 ADD 3 Erg 这里 Erg 的值为 7 但是如果加一个圆括号 CoDeSys V2 3 16 LD 2 MUL 2 ADD 3 ST Erg Erg 的结果是 10 当到达 时操作 MUL 才开始计算 此时对操作数计算 MUL 5 2 2 2 结构化文本 结构化文本中包含一系列的指令 这些用高级语言编写的指令能够被执行 例如 IF THEN ELSE 或者在循环 WHILE DO 例如 IF value 7 THEN WHILE value 8 DO value value 1 END WHILE END IF 参照 表达式 表达式的计算 对操作数赋值 在 ST 中调用功能块 RETURN 指令 IF 指令 CASE 指令 FOR 循环 WHILE 循环 REPEAT 循环 EXIT 指令 表达式 表达式是一个在运算后返回一个值的结构 表达式由运算符和操作数组成 操作数可以是常量 变量 功能调用或其它表达式 表达式的计算 依照一定的规则来处理运算符号可以计算出表达式的值 约束力最高的运算符首先参加运算 然后 是约束力稍高的运算符 直到所有的运算符都被处理为止 运算符号 号的处理是从左到右的顺序 下面是结构文本中运算符号约束力的级别排列 操作 符合 约束力 放入圆括号 表达式 最强的约束力 功能调用 Function name parameter list 求幂 EXPT 取反 NOT CoDeSys V2 3 17 乘法 除法 取模 MOD 加法 减法 比较 等于 不等于 布尔运算与 AND 布尔运算异或 XOR 布尔运算或 OR 最弱的约束力 下面这些是结构化文本中的其它指令 和例子一起安排在一个表中 指令类型 例子 赋值 A B CV CV 1 C SIN X 调用一个功能块并使 用功能块输出 CMD TMR IN IX5 PT 300 A CMD TMR Q RETURN RETURN IF D B B IF D 0 0 THEN C A ELSIF D 0 0 THEN C B ELSE C D END IF CASE CASE INT1 OF 1 BOOL1 TRUE 2 BOOL2 TRUE ELSE BOOL1 FALSE BOOL2 FALSE END CASE FOR J 101 FOR I 1 TO 100 BY 2 DO IF ARR I 70 THEN J I EXIT END IF END FOR WHILE J 1 WHILE J 100 AND ARR J 70 DO J J 2 END WHILE REPEAT J 1 CoDeSys V2 3 18 REPEAT J J 2 UNTIL J 101 OR ARR J 70 END REPEAT EXIT EXIT 空指令 对操作数赋值 号左边是一个操作数 变量 地址 它的右边是赋予它的表达式的值 例如 Var1 Var2 10 在运算结束后 变量 Var1 就得到了 Var2 的 10 倍值 在结构化文本中调用功能块 通过写功能块的实例名和随后在括号中给参数分配值来调用一个功能块 在下面的例子中 通过给 两个参数 IN 和 PT 赋值来调用一个定时器 然后结果变量 Q 的值赋予变量 A 结果变量 就象在指令表中 被表示为功能块名称后跟一个小点和变量的名字 CMD TMR IN IX5 PT 300 A CMD TMR Q RETURN 指令 返回指令可以用来按照条件离开一个 POU 程序组织单元 IF 指令 IF 指令可以检验一个条件 根据这个条件 执行指令 语法 IF THEN ELSIF THEN ELSIF THEN ELSE END IF 在 中的部分是可选的 如果布尔运算表达式返回 TRUE 只有 if 指令部分执行 其它部分不执行 否则 布尔运算表达式从开始 一个接一个的计算 直到某个布尔表达式 返回为 TRUE 然后 在这个布尔运算表达式 2 之后 ELSE 或 ELSE IF 之前的部分被计算 如果没有任何一个布尔运算表达式返回 TRUE 那么只计算 ELSE 下的指令 例如 IF temp 17 THEN heating on TRUE ELSE heating on FALSE END IF 这里当温度降到 17 度以下时加热开始 否则保持关闭状态 CASE 指令 使用 CASE 指令 可以在一个结构中 用同一个条件变量组合多个有条件的指令 CoDeSys V2 3 19 句式 CASE OF ELSE END CASE CASE 指令根据下面的模式来处理 如果变量 Var1 有值 Value1 那么执行指令 Instruction1 如果变量 Var1 不是所指明的值 那么执行 ELSE Instruction 如果有多个变量值要执行同一个指令 那么这些条件执行一个公共指令 如果对于一个变量在一个值的范围内执行同一个指令 那么在初始值和最后值之间用两个句点隔开 所以你可以规定公共条件 例如 CASE INT1 OF 1 5 BOOL1 TRUE BOOL3 FALSE 2 BOOL2 FALSE BOOL3 TRUE 10 20 BOOL1 TRUE BOOL3 TRUE ELSE BOOL1 NOT BOOL1 BOOL2 BOOL1 OR BOOL2 END CASE FOR 循环 通过 FOR 循环程序可以编写重复执行的过程 句式 INT Var INT FOR TO BY DO END FOR 内的部分是可选的 只要计数器 INT Var 不大于 END VALUE 指令 Instructions 就一直执行 在执行 Instructions 之前 首先检查计数器的值 如果 INIT VALUE 比 END VALUE 大的话 Instructions 将不在执行 当 Instructions 执行后 INT Var 通常要增加一个 Step size Step size 可以是任何整型值 如果 没有 Step size 它将设置为 1 当 INT Var 大到一定值时 循环结束 例如 FOR Counter 1 TO 5 BY 1 DO Var1 Var1 2 END FOR Erg Var1 我们假设 Var1 的默认值是 1 那么在循环结束后它将得到值 32 CoDeSys V2 3 20 注意 END VALUE 一定不要大于等于与计数器 INT VAR 的极限值 例如 如果变量计数器是一个 SINT 类型并且 END VALUE 为 127 那么这将是一个死循环 WHILE 循环 WHILE 循环可以象 FOR 循环那样使用 不同之处在与 WHILE 循环的退出条件可以是任何布尔型表达式 当条件满足时 就会执行循环 句式 WHILE END WHILE 只要 Boolean expression 返回 TRUE 那么就重复执行 Instructions 如果 Boolean expression 在首 次计算出 FALSE 那么指令将不再执行 如果 Boolean expression 从不出现 FALSE Instructions 将没 完没了的重复执行 注意 程序员必须保证不出现死循环 这可以通过改变循环中指令部分的条件来实现 例如 可以通过计数器增加或 减少 例如 WHILE counter0 DO Var1 Var1 2 Counter Counter 1 END WHILE 对于 WHILE 和 REPEAT 个循环在循环之前不必知道循环的次数 从这个意义上来说 这两种循环要比 FOR 要强大一些 因此在这种情况下 可以用这两种循环 如果循环数比较明确 那么 FOR 循环因为没有 死循环而更好一点 REPEAT 循环 REPEAT 循环和 WHILE 循环的不同之处在于它的中断条件是在循环执行之后才被检查 这就是说 循 环至少要执行一次 不管中断是什么条件 句式 REPEAT UNTIL END REPEAT Instructions 一直执行到 Boolean expression 返回 TRUE 如果 Boolean expression 第一次就赋予真值 Instructions 只执行一次 否则 Instructions 将重 复执行将会导致时间延迟 注意 程序员可以通过改变循环中指令部分的条件来保证没有死循环出现 例如 可以通过计数器增加或减少 例如 REPEAT Var1 Var1 2 Counter Counter 1 UNTIL Counter 0 END REPEAT EXIT 指令 如果在 FOR WHILE 或 REPEAT 循环中有 EXIT 指令 那么内循环就结束 不管中断是什么条件 2 2 3 顺序功能图 SFC CoDeSys V2 3 21 顺序功能图是基于图形化的语言 用它可以描述一个程序中不同动作的先后顺序 因为这些动作分 配给单步元素 通过变迁元素来控制处理的顺序 下面是一个顺序功能图的例子 关于顺序功能图编辑器的更多知识请参照 5 4 4 章节 参照 步 动作 进入和退出动作 转换 转换条件 激活步 IEC 步 限定词 顺序功能图种的隐含变量 SFC 标志符 可选分支 平行分支 跳转 在联机模式下可参考编辑和行为信息 顺序功能图编辑器 顺序功能图联机模式 步 用顺序功能图编写的程序组织单元包含了一系列的步 这些步之间是通过定向连接 转换条件 实 现的 有两种类型的步 简单类型 每步包括一个动作 和一个标记 这个标记用来表示此步是否激活 如果单步动作正在 执行 那么在步的右上角方向会出现一个小三角形 CoDeSys V2 3 22 IEC 类型 每步包含一个标记和一个或多个赋值的动作或布尔变量 相关的动作出现在步的右边 动作 一个动作可以包含一系列的指令表或结构化文本指令 功能模块图或梯形图许多的网络 或者又包 含另外顺序功能图 在简单步 中 动作经常是和步连接在一起的 为了能编辑一个动作 在步上双击鼠标或选择此步再 选择菜单命令 扩展 快速动作 转换 另外 每一个步中允许一个输入或输出动作 IEC 步的动作是附加在顺序功能图 程序组织单元内的对象管理器中 通过双击或者在它的编辑器中 按 Enter 键可以加载它 也可以通过 工程 添加动作 来创建一个新的动作 你可以为一个 IEC 步分 配最多九个动作 进入和退出动作 可以额外的为一个步添加一个进入和退出的动作 在一个步激活后 一个进入动作只能执行一次 退出动作只在步失效之前执行一次 进入动作用左下角一个 E 来表示 退出动作用右下角的 X 表示 下面是一个带有进入和退出动作的步的例子 转换 转换条件 在步和步之间有所谓的转换 转换条件的值必须是 TRUE 或 FALSE 因而它可以是一个布尔变量 布尔地址或布尔常量 在结构化 文本句式 例如 I 100 AND b 或者在任何一种期望的语言 参照 附加 快速动作 转换 中 它 也能包括一系列有布尔结果的指令 转换中不能包括程序 功能块或赋值 注意 除了转换外 也能用渐进模式跳到下一步 查看 SFCtip 和 SFCtipmode 激活步 在调用顺序功能图的 POU 后 初始化步的动作 被一个双边线包围 将首先执行 动作正在执行的 步 状态是激活的 在联机模式下 激活的步显示为蓝色 在一个控制循环中激活步的所有动作都将执行 所以 当激活步之后的转换条件是 TRUE 时 它之后 的步被激活 当前激活的步将在下个循环中再执行 注意 如果激活的步包含一个输出动作 譬如它下面转换条件是 TRUE 那么它只能在下个循环过程中执行 IEC 步 在顺序功能图中可以使用标准的 IEC 步 为了能使用 IEC 步 你必须在你的工程文件中联接 Iesfc lib 库文件 一个 IEC 步中不能分配超过九个动作 IEC 的动作不象简单步那样固定地作为输入或输出到某个步 的动作 而是和步分开存储并且能够在一个程序组织单元中重复使用多次 因此 它们必须用命令 扩 展连接动作 和单个步联系在一起 除了动作 布尔变量也能分配给步 能够使用所谓的限定词来控制激活和未激活的动作和布尔变量 时间延迟是可能的 如果一个动作 依然激活这 而下一个步已经开始处理了 通过限定词 S 设置 可以取得并发的过程 随着每一个顺序功能模块的调用 相关联的布尔变量被设置或复位 也就是说 随着每一次调用 这个值将在 TRUE 到 FALSE 之间来回变化 IEC 步的关联动作在步右边的两长方形中表示 左边的区域包含了限定词 可能带有时间常量 右边 的区域包含了动作名和各自的布尔变量名 下面是一个带有两个动作的 IEC 步 CoDeSys V2 3 23 为了处理的方便 联机模式下的所有激活动作象激活步一样都显示为蓝色 在一个循环之后检查一 次哪个动作是激活的 注意 如果一个动作已经失去激活了 它会再执行一次 这就是说 每一个动作至少被执行两次 在首次调用一个未激活的动作时 激活的动作将按字母表的顺序执行 一个新插入的步是不是 IEC 步 取决于命令菜单 扩展 使用 IEC 步 是否被选中 在对象管理器中 动作都直接存放在各自的 SFC POU 中 新的动作可以通过 工程 添加动作 来 创建 要使用 IEC 步 你必须在工程文件中包含特殊的 SFC 库文件 lecsfc lib 在对象管理器中带有动作的 SFC POU 限定词 为了关联动作和 IEC 步 用到下面的限定词 N 非存储 动作和步一起激活 R 复位 动作是未激活的 S 设置 动作被激活再复位前保持激活状态 L 时间限制 动作激活一段时间 最大和步激活时间一致 D 时间延迟 如果步仍然激活 动作在一定时间后激活 然 后只要步是激活的 它就保持激活 P 脉冲 如果步激活 动作只执行一次 SD 存储和时间延迟 在一定时间之后动作激活并保持激活状态到下 一个复位开始 DS 延迟和保持 只要步仍然激活并且保持到下一个复位开始 那么在一定时间后动作被激活激 SL 保持和时间限制 动作激活并保持一段时间 限定词 L D SD DS 和 SL 需要一个 TIME 常量格式的时间值 注意 当一个动作失去激活时 它会再执行一次 这就是说每个动作至少执行两次 顺序功能图种的隐含变量 在 SFC 中使用一些隐含声明的变量 每一个步都有一个标记 标记中存储着步的状态 对于 IEC 步来说 步的标记 激活或未激活 被 称为 x 或者对一个简单的步来说称为 当关联的步激活的时候这个布尔变量值为 TRUE 反之则值为 FALSE 它能够用在 SFC 模块中的每一个 IEC 动作和转换中 可以通过查询 x 来查询一个 IEC 步是否激活 隐含变量 t 能够用来查询步激活的时间 隐含变量也能够被其它程序访问 例如 boolvar1 sfc1 step1 x 这里 step1 x 是隐含布尔变量 它代表了程序组织单元 sfc1 中的 IEC 步 step1 的状态 CoDeSys V2 3 24 SFC 标志符 SFC 程序组织单元标志符用来控制操作 它在工程运行期间隐含的创建 为了能读这些标志符 你必 须定义合适的全局变量或局部变量 例如 如果在一个 SFC 程序组织单元中一个步激活的时间超过了它 定义的属性 那么就会设置一个标志符 通过用一个 SFCError 变量可以访问到这个标志符 此时 SFCError 得到真值 可以定义下列标志符变量 SFCEnableLimit 这个变量的类型是布尔型 当它的值为 TRUE 时 这一步的超时将会注册进 SFCError 其它的超时将被忽略 SFCInit 当这个布尔变量值为 TRUE 时 顺序功能图复位到初始状态 其它的 SFC 标志符也会被复位 初始步保持激活 直到变量值为 TRUE 时 才开始执行 只有当 SFCInit 被重新设置为 FALSE 时 模块才 能正常工作 SFCReset 这个布尔变量 与 SFCInit 很相似 不同之处在于 进一步的处理发生在步的初始化之后 因而 例如 SFCReset 标志符可以在初始化步中被复位到 FALSE 注意 从 2 3 7 0 版编译器开始 SFCReset 可以用于复位与 IEC 步相关联的布尔型动作 SFCQuitError 当这个布尔变量得到 TRUE 时 SFC 的执行将会停止 因此 在变量 SFCError 中一个 可能超时将复位 当这个变量呈现 FALSE 时 激活步中的所有时间都会复位 先决条件是在 SFC 中已经 定义过登记任何超时设定的标志符 SFCError SFCPause 当这个布尔变量值为 TRUE 时 SFC 图表的执行就会停止 SFCError 当在 SFC 图表中有超时时这个变量得到 TRUE 如果在这个之后还有其它的超时发生 除非 是这个变量已经复位 否则 这些状态将不会登记 如果你想使用其它的时间控制标志符 SFCErrorStep SFCErrorPOU SFCQuitError SFCErrorAnalyzation 的前提条件是定义 SFCError SFCTrans 当一个转换被驱动时 这个布尔变量得到真值 SFCErrorStep 这个变量是一个字符变量 如果 SFCError 中登记了一个超时 这个变量将存储这个 超时步的名字 前提条件是在 SFC 中已定义了登记任何超时的标志符 SFCError SFCErrorPOU 这个字符变量包含了发生超时的模块名字 前提条件是在 SFC 中已定义了登记任何超 时的标志符 SFCError SFCCurrentStep 这个字符变量存储了那个被激活步的名字 它与的时间监控无关 在仿真的情况下 此步存储在外部适当的分支种 如果一个超时发生其它的将不再登记 而且 SFCError 也不会复位 SFCErrorAnalyzationTable 这是数组型变量 它提供一个转换表达式的分析结果 表达式中对转换 中的 FALSE 和上一步起时有影响的每个一元素 要把下列信息写进 ExpressionResult 结构中写进 名称 地址 注释 当前值 最大可以容纳 16 个元素 因此 数组的范围从 0 15 ExpressionResult 结构和隐含使用的分析模块都是由 AnalyzationNew lib 库文件提供的 分析模块 也能够被其它的不用 SFC 编写的程序组织单元显式使用 上一步的超时登记是分析一个转换表达式的先决条件 因此在这里必须有一个时间监视的应用 而 且 SFCError 必须在声明窗口被定义 SFCTip SFCTipMode 这个布尔变量允许 SFC 的渐进模式 当用在 SFCTipMode TRUE 来切换它时 如 果 SFCTip 设置值为 TRUE 时它只可能跳到下一个步 只要 SFCTipMode 是设置为 FALSE 时 它可能跳过转 换 注意 对于扫描的状况和分步运动时间隐藏变量还是可用的 可选分支 在 SFC 中可以定义两个或两个以上的可选择分支 每一个分支的开始和结束必须带有一个转换 可 选分支可以包含平行的分支和其它的选择分支 一个可选分支开始于一个水平线并终止于一个水平线 选择结束 或是一个跳跃 如果在可选分支开始行前面的步是激活的 每一个可选分支的首次变换将从左到右被计算 最先的 CoDeSys V2 3 25 转换将从左边转换条件为 TRUE 的开始 然后下面的步被激活 平行分支 在 SFC 中可以定义两个或两个以上的分支为平行分支 每一个平行分支在开始和结束处必须有一个 步 平行分支可以包含可选择的分支或其它平行分支 一个平行分支开始于一个双划线 结束于一个双 划线或者一个跳跃 它能提供一个跳跃标识 如果平行分支的先前步是激活的 并且这个步之后的转换条件值是 TRUE 时 那么平行分支的第一步 激活 这些分支彼此平行处理 当所有平行步激活并且这些步之后转换条件为 TRUE 时 那么平行分之末 端线后的那一步被激活 跳转 跳转是对在跳转符号下面指明的步名的一个连接 当在不允许创建导致向上或互相交叉联系的时候 必须使用跳转 2 2 4 功能模块图 功能模块图是一种基于图形的编程语言 它用一串网络来工作 每一个网络包含一个算术或逻辑表 达式 功能块的调用 跳转或返回指令的结构 下面是功能模块图中一个网络的例子 关于功能模块编辑器的更多的知识请参照 5 4 1 章节中的讲述 2 2 5 连续功能图表编辑器 连续功能图表编辑器不象功能模块图表那样操作 但是可以自由放置元素 它允许使用反馈 关于连续功能图的更多信息请参照 5 4 4 章节 连续功能图编辑器中网络的例子 2 2 6 梯形图 梯形图也是一种基于图形化的编程语言 它接近于电子电路的结构 一方面 梯形图很适合构建逻 辑开关 另一方面 它也能创建象 FBD 中的网络图 所以梯形图在控制调用其它程序组织单元的时候是 很有用的 梯形图包含了一系列的网络 左右两边各有一个垂直的电流线 网络图仅限制于左右两母线之间的 范围内 在中间是由线圈触点和连接线组成的电路图 每一个网络包含左边的一系列触点 这些触点根据布尔变量值的 TRUE
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!