1、CoDeSys235 编程手册PLC编程用户手册CoDeSys 2.3文件版本 3.6, CoDeSys V.2.3.5.0翻译:沈阳利德风能科技有限公司http:/- I -CoDeSys235 编程手册- II -目 录1 Codesys 简介 1-11.1 什么是Codesys1-11.2 Codesys功能总览 .1-11.3 用户文档总览1-22 Codesys 的结构 2-12.1 工程的构成2-12.2 语言2-82.2.1 指令表.2-82.2.2 结构化文本.2-92.2.3 顺序功能图(SFC) ).2-142.2.4 功能模块图.2-192.2.5 连续功能图表编辑器.2
2、-192.2.6 梯形图.2-192.3 联机调试功能.2-212.4 标准化2-223 编写一个小程序示例 . 3-13.1 控制一个交通信号灯单元3-13.2 可视化交通信号单元3-114 各个单独的组件 .4-1 4.1 主窗口.4-14.2 工程选项.4-34.3 管理工程.4-174.4 管理工程中的对象.4-454.5 编辑功能.4-524.6 联机功能.4-574.7 设置窗口.4-704.8 帮助.4-705 Codesys 中的编辑器 5-1 5.1 编辑器的组件. .5-15.2 声明编辑器.5-25.2.1 在声明编辑器中编程5-25.2.2 联机模式中的明编辑器5-85
3、.2.3 声明编辑器中的编程指令5-85.3 文本编辑器.5-165.3.1 在文本编辑器中工作5-165.3.2 指令表编辑器5-195.3.3 结构化文本编辑器5-205.4 图形化编辑器 5-205.4.1 在图形化编辑器中工作. 5-205.4.2 功能模块图编辑器5-23CoDeSys235 编程手册- III -5.4.3 梯形图.5-285.4.4 顺序功能图表编辑器.5-325.4.5 连续功能图表编辑器.5-406 资源 6-16.1 资源(Resources) 综述.6-16.2 全局变量,变量配置,文件框架.6-16.2.1 全局变量6-26.2.2 变量配置6-66.2
4、.3 文档框架6-66.3 报警配置.6-76.3.1 综述6-76.3.2 警报的一般信息,术语6-86.3.3 报警类6-96.3.4 报警组6-116.3.5 存储报警6-126.3.6 Extras 菜单:设置.6-136.4 库管理器.6-146.5 日志记录.6-156.6 PLC 配置6-176.6.1 综述6-176.6.2 PLC 配置中的工作6-186.6.3 PLC 配置中的一般设置6-196.6.4 定制特定的参数的对话框6-206.6.5 I/O 模块配置6-216.6.6 通道配置6-236.6.7 Profibus 模块的配置6-236.6.8 CAN 模块的配置
5、 6-316.6.9 CanDevice (CANopen Slave) 的配置6-356.6.10 在线模式中的 PLC 配置6-386.6.11 来自PLC 的硬件扫描/状态/诊断信息6-386.6.12 来自PLC的硬件扫描/状态/诊断信息6-426.7 任务配置.6-426.7.1 任务配置工作6-426.7.2 系统事件( System Events). 6-436.7.3 在线模式下的任务配置. 6-456.7.4在线模式下的任务配置. 6-466.8 监视和收据管理器(Watch and Receipt Manager. ) 6-486.8.1 综述. 6-486.8.2 脱机方
6、式下的监视和收据管理器. 6-486.8.3 在线模式下的监视和收据管理器. 6-496.9 采样追踪( The Sampling Trace ). 6-506.9.1 综述和配置6-506.9.2 采样追踪的显示(Display of the Sampling Trace).6-526.9.3 Extras Save Trace6-52CoDeSys235 编程手册- IV -6.9.4 Extras save Trace.6-546.9.5 外部追踪.6-556.10 工作区(Workspace ).6-556.11 参数管理器(Parameter Manager).6-556.11.1
7、综述,启动.6-566.11.2 参数管理器的编辑,浏览.6-576.11.3 参数列表的类型和属性 6-586.11.4 管理参数列表.6-596.11.5 编辑参数列表.6-616.11.6 在线模式下的参数管理.6-616.11.7 参数列表的导出,导入.6-626.12 目标系统设置(Target Settings )6-626.13 PLC 浏览器.6-636.13.1 关于PLC 浏览器操作的一般讨论 6-636.13.2 在PLC 浏览器中的命令输入.6-646.13.3 在PLC 浏览器输入命令时使用宏指令.6-656.13.4 PLC 浏览器的更多选项.6-656.14 工具
8、6-666.14.1 可用工具快捷键的特性(对象特性).6-666.14.2 管理工具快捷键.6-696.14.3 关于工具的常见问答 6-707 ENI.7-17.1 什么是ENI.7-17.2 预备与ENI 项目数据库联合工作.7-17.3 在CoDeSys 内与ENI 项目数据库联合工作7-27.4 有关的项目数据库对象分类7-28 DDE接口 8-18.1 CoDeSys 编程系统 DDE 接口.8-18.2 DDE 与GatewayDDE 通讯.8-29 CoDeSys授权管理.9-19.1 授权管理器9-19.2 CoDeSys 授权库9-110 附录10-1附录A :国际电工委员
9、会标准算符和额外的规范扩展函数.10-110.1 算术运算.10-110.2 位串运算.10-410.3 移位运算.10-510.4 选择运算.10-710.5 比较运算.10-910.6 地址运算.10-1210.7 调用运算.10-1310.8 类型转换.10-1310.9 数值运算.10-1910.10 初始化运算10-23CoDeSys235 编程手册- V -附录B :CoDeSys 操作数.10-2410.11 常量10-2410.12 变量10-2610.13 地址10-2810.14 函数10-29附录C :CoDeSys 数据类型.10-2910.15 标准数据类型10-29
10、10.16 定义数据类型10-31附录D :CoDeSys 库.10-3610.17 标准库10-3610.17.1 字串函数.10-3610.17.2 位态函数块.10-4010.17.3 沿.10-4110.17.4 计数器.10-4310.17.5 计时器.10-4510.18 应用库10-4810.18.1 BCD转换. 10-4810.18.2 位-/字节函数.10-4810.18.3 算术辅助函数.10-4910.18.4 控制器.10-5210.18.5 信号发生器.10-5310.18.6 多值函数.10-5610.18.7 模拟值处理.10-5810.19 分析库10-581
11、0.20 系统库10-58附录E :操作数和库模块概览10-5910.21 操作数10-5910.22 标准库元素10-6210.23 应用库元素10-63附录F :命令行-/ 命令文件10-6410.24 命令行命令10-6410.25 命令文件(cmdfile) 命令.10-65附录G :西门子导入10-7110.26 从SEQ 符号文件导入 10-7110.27 从S5 项目文件导入10-7210.28 转换S5 到IEC61131-310-73附录H :目标设置详情10-7610.29 在分类目标平台设置10-7610.29.1 Intel 386兼容目标系统,分类目标平台 10-76
12、10.29.2 摩托罗拉68K的目标系统,分类目标平台 10-7710.29.3 英飞凌C16x 目标系统,分类目标平台 10-7810.29.4 英特尔StrongARM与Power PC,分类目标系统 10-7910.29.5 MIPS的目标系统,分类目标平台 10-8010.29.6 日立SH目标系统,分类目标平台 10-81CoDeSys235 编程手册- VI -10.29.7 8051兼容的 目标系统,分类目标平台 10-8210.30 目标系统设置的分类存储布局10-8310.31 目标设置总分类10-8510.32 网络功能目标设置分类10-8610.33 分类可视化目标设置1
13、0-87附录I :键盘应用.10-9010.34 键盘应用10-9010.35 组合键10-90附录J : 编译器错误和警告 .10-9510.36 警告10-9510.37 错误10-99第一章 CoDeSys 简介- 1-1 -1 Codesys简介1.1 什么是CodesysCodesys 是可编程逻辑控制器PLC 的完整开发环境( Codesys 是ControlledDevelopement System 的缩写),在PLC 程序员编程时,Codesys 为强大的IEC 语言提供了一个简单的方法, 系统的编辑器和调试器的功能是建立在高级编程语言的基础上 (如Visual C+)。1.
14、2 Codesys 功能总览如何构建一个工程?一个工程放在以工程命名的文件中,新工程中创建的第一个POU(程序组织单元) 自动命名为PLC_PRG ,程序从这里开始执行(相当于 C 程序中的主函数),从这里能够访问其它的POUs(程序,功能块,函数)。一旦定义了一个任务配置, 就不必创建程序PLC_PRG 了, 在任务配置章节将详述该问题。在工程中有不同的对象: POUs、数据类型、可视化界面和资源。对象管理器中包含了工程中的所有对象列表。怎样构建工程?首先,为了保证在工程文件中使用的地址的正确性,应该先配置PLC。然后创建解决问题所需要的POUs,可以用个人所喜欢的编程语言来编写这些POUs
15、。当程序编写完成时,可以编译这个工程并去除所有的错误。怎样测试工程?一旦排除了所有的错误,激活仿真选项,登录入内存仿真PLC,并在PLC 中“加载”工程文件,此时便处于联机在线模式。现在,打开一个PLC 配置的窗口测试工程,修正时序正确性。手动添加输入变量,观察输出变量是否为期望值。也可以观察 POUs 中的局部变量序列的值,在监视和接收管理器中可以配置希望检查的变量的数据记录。调试可以在程序出错的地方设置断点,当程序运行到这个断点,可以及时检查这个断点处全部变量的值,通过单步的检查你可以找出程序中的所有逻辑错误。附加联机功能更多的调试功能:可以设置程序变量并设置输入输出值。可以通过流程控制来
16、检查哪些程序行已完成运行。日志文件按照时间的顺序记录了联机模式下的操作以及用户行为和内部进程的情况。如果在目标系统设置中激发了采样追踪, 那么可以在一个较长的过程中来追踪和显示变量值的真实变化过程。PLC 浏览器是目标系统的一个特殊功能,它能够用来向PLC 请求某些特定信息。当工程完成了构建和测试后,也能够下载到硬件进行测试。和仿真方式下有相同的联机功能。Codesys 的附加特色整个工程能够随时文档化或导出到一个文本文件中。鉴于通讯的目的,Codesys 有一个符号接口和一个动态数据交换(DDE)接口。一个综合了OPC 服务器的网关服务器和DDE动态数据交换服务器是Codesys 的标准安装
17、组件。使用恰当的目标系统设置,通过目标系统文件支持包来把相同的Codesys 工程加载到第一章 CoDeSys 简介- 1-2 -各种不同的目标系统中。通过当前的目标设置来激活网络全局变量和参数管理器,可以在控制器网络中交换数据。通过ENI 工程服务器,用ENI 工程接口能够访问任何我们所期望的源代码管理程序,而ENI 服务器是个独立运行的程序。 Codesys 的POUs 程序单元和编译文件可以文档化为数据库,很容易被 ENI 服务器的其他客户端访问。这允许对一个Codesys 工程文进行多用户操作工作,提供了一个除Codesys 外为其它不同工具公用的数据缓冲池,而且它使版本管理成为可能。
18、工具:这个功能也与目标系统有关,它允许启动Codesys 工程中的目标系统可执行文件。除此之外还可以定义要被装载到控制器中的这些文件, 它与外部工具的接口可以在目标文件中预定义或者插入到工程资源树中。Codesys 的可视化可以处理目标系统, 如网页或目标可视化, 这样可以通过因特网或者PLC 监视器的运行来显示可视化界面。1.3 用户文档总览模块 文档内容 文件名Codesys 编程系统通过编程系统中用户手册和联机帮助菜单,得到Codesys 系统(样例)入门教程Manual_V23_E.pdf First Stepswith Codesys V23.pdf网关服务器概念、安装、用户接口;通
19、过网关菜单来获得用户接口联机帮助(通过在系统图标上单击网关符号来获得帮助)Gateway Manual.pdfOPC 服务器OPC 服务器V2.0 版本的安装和使用OPC_20_How_to_use_E.pdfCodesys 的可视化Codesys 的可视化文档包括了HMI 、目标系统和WEB可视化Codesys_Visu_V23_E.pdfSOFTMOTION怎 样 使 用 和 描 述SOFTMOTION 库 的 主 要模块CoDeSys_SoftMotion_V23_E.pdf库文档手册中讲述standard.lib 和util.lib 库 , 对 于 每 个Codesys系统库都有一个对
20、应 这 个 文 件 名 字 的 文 档.pdfSoftMotion 库:看 SoftMotion文件.pdfCoDeSys_V23_E.pdf第一章 CoDeSys 简介- 1-3 -ENI 服务器在外部数据库中安装和配置有关对于Codesys 工程源控制部分的ENI 服务器ENI 服务器的配置: 参看用户手册ENI 管理、ENI 控制和ENI浏览器:参看联机帮助EniServerQuickstart_E.pdfCoDeSys_V23_E.pdf第二章 CoDeSys 的结构2 Codesys 的结构2.1 工程的构成工程一个工程包含了PLC 程序中的所有对象,以工程文件命名存储。工程中包含下
21、列对象:POU,数据类型,可视化界面,资源及库。POU( POU)函数,功能块及程序是 POU,它们可以随时增补。每一个 POU都包含一个局部和主题声明定义,主体部分可以用IEC 的语言来编写,这些语言包括指令列表,结构化文本,顺序功能图,功能模块图,梯形图或连续功能图表(IL, ST, SFC, FBD, LD or CFC)。Codesys支持所有IEC标准的POUs,如果在工程文件中使用这些POU,必须在工程文件中包含标准库文件 standard.lib。POUs 可以调用其它的POUs,但递归调用是不允许的。函数一个函数是一个POU,它正确地产生一个数据元素(可以包含若干元素,比如,字
22、段或结构体),在处理过程中,可以作为文本化语言表达式中的一个操作数来调用它。在声明一个函数的时候,一定要给它一个类型,这就是说,在函数名后面加上一个冒号然后跟一个数据类型。一个正确的函数声明可以参考下面的例子:FUNCTION Fct: INT另外,必须分配给函数一个结果,即把函数名作为一个输出变量。函数的声明从关键字FUNCTION 开始。在IL中函数的调用被安排在单步操作或单个转换之内。 在ST中一个函数的调用可以作为表达式中的操作数。 下面是一个在IL中一个函数带有三个输入变量并返回前两个变量的乘积与第三个变量相除的结果。在IL指令调用函数举例:函数调用:在ST文本中函数的调用可以作为表
23、达式中的一个操作数。在SFC中,函数的调用被安排在单步操作或单个转换之内。调用函数应该注意:函数不会有任何内部条件,这就是说,调用带有相同的输入变量的函数,将会返回相同的输出结果。下面是调用函数的例子:in IL:LD 7Fct 2,4 ST Resultin ST: Result := Fct(7, 2, 4);- 2-1 -第二章 CoDeSys 的结构in FBD:函数不会保存任何内部状态,这就是说,调用带有相同的输入变量(输入参数)的函数,将会返回相同的值(输出)函数不会保存任何内部状态,这就是说,调用带有相同的输入变量(输入参数)的函数,将会返回相同的值(输出) 。这是因为函数不包含
24、全局变量和地址。注意:如果一个局部变量在一个函数中被声明为RETAIN,这也没有任何影响,为此变量将不会写到保留区。注:下面函数名检查解释了应用规范。如果定义了一个函数名为CheckBounds,可以用它来检验工程中的溢出范围,定义函数名是它的唯一标识符,更详细的内容请参考 10.1章节中关于数学运算符中的DIV。如果在工程中定义了CheckDivByte, CheckDivWord, CheckDivDWord 和CheckDivReal函数, 如果用了除法算式,可以用它们来检查除数的值,可以避免分母为零。如果定义了函数名CheckRangeSigned 和 CheckRangeUnsign
25、ed, 就避免定义超出变量定义范围的数据子类型。功能块一个功能块是一个 POU,在程序中提供一个或多个值。与函数相反,一个功能块没有返回值。功能块的声明用关键字 FUNCTION_BLOCK开始,可以创建功能块的备份或实例。下面是一个IL功能块的例子:在此 IL功能块中包含两个输入变量和两个输出变量,一个输出是两个输入变量的乘积,另一个是两个输入变量的是否相等的比较。功能块实例可以创建功能块的备份或实例。 每一个实例都有它自己的标识符, 并且一个数据结构体中包含它的输入输出和内部变量, 实例可以象变量一样被声明为局部变量或全局变量, 而功能块的名称表示标识符的类型。例如名为INSTANCE 功
26、能块FUB 实例:INSTANCE :FUB;功能块通常是通过上述的实例来调用的。 从此功能块实例的外部只能访问它的输入输出- 2-2 -第二章 CoDeSys 的结构- 2-3 -变量,不能访问它的内部变量调用。下面是一个访问输入变量的例子。功能块FB有一个整型的输入变量in1 :PROGRAM progVARinst1:fb;END_VARLD 17ST inst1.in1CAL inst1功能块和程序的声明部分可以包含实例的声明, 实例的声明不能包含在函数之中。 访问功能块实例仅限于它被声明的 POU中,除非它被声明为全局变量。注意: 在一个功能块处理完后的所有值将保存下来, 直到下一个
27、功能块调用进程。 所以,功能块调用相同的输入往往不返回相同的输出值。注意:如果存在至少一个功能块变量是保留变量,整个实例将被存储在保留区。调用一个功能块通过建立一个功能块的实例并且用下面的语法来规定要求的变量,可以从其它的POU访问这个功能块的输入和输出变量。.在调用时为参数赋值:如果喜欢在调用功能块的时候再设置输入或输出变量, 可以用IL指令列表和ST结构化文本语言。 通过在功能块实例名后面的括号中为变量赋值来进行 (对输入变量的赋值就象在声明位置的变量初始化一样,使用 “:=” 来分配变量的值,对输出变量使用“= ”赋值。)如果在ST或IL POU的执行窗口中使用插入变量选项,并通过输入帮
28、助( F2)来插入实例,它将根据这个句式显示所有的参数,但不必为这些参数赋值。例如:FBINST是一个功能块的局部变量, 它包含了输入变量xx和输出变量yy。 当FBINST是通过输入帮助插入到了 ST程序中,将显示如下的调用:FBINST1(xx:= , yy= )。在调用中插入输出变量:请注意,功能块的插入输出变量作为指针来处理。因此在调用一个功能块时,常量是不能赋予 VAR_IN_OUT,并且从外部没有读和写的权限。VARinst:fubo;var:int;END_VARvar1:=2;inst(instout1:=var1);在这种情况下,下列语句示不允许的:inst(instout1
29、:=2) ;或 inst.inout1 :=2 ;下面举例说明调用功能块FUB关于功能块FUB,参照上述“ 功能块”章节部分。乘法运算的结果被存储在变量ERG中,比较的结果存储在QUAD 中,FUB的实例被声明为INSTANCE。第二章 CoDeSys 的结构下面是功能块的实例在IL指令列表中调用的例子:下面是功能块的实例在ST结构化文本中调用的例子 (声明部分与IL指令列表部分相同) :下面是功能块的实例在功能模块图中调用的例子(声明部分与IL指令列表部分相同)在SFC顺序功能图中功能块的调用只能一步一步进行。程序一个程序是一个POU,它在操作过程中返回几个值,程序在工程文件中是全局的。程序
30、的所有最终值将保留直到下一次程序运行。下面是程序的一个例子:- 2-4 -第二章 CoDeSys 的结构程序可以被调用,但不允许在一个函数中调用程序,同时也不能调用程序中的实例。如果一个POU调用一个程序,并且如果程序的值发生了变化,那么这些变化将保留到下一次程序的调用时,即使是其它的POU 内部调用了它。这和调用功能块不同, 那里只有给定的功能块实例中的特定的值才会变化。 当相同的实例被调用时,这些变化才会发挥重要的作用。程序的声明开始于关键字PROGRAM,结束于END_PROGRAM如果喜欢在调用程序的时候再设置输入或输出参数, 可以用文本语言如IL指令列表和ST结构化文本来做这些。 在
31、功能块的实例名后面的括号中为变量赋值 (对输入变量的赋值就象在声明位置的变量初始化一样,使用 “:=” 来赋值, 对输出变量使用“= ”赋值。)在ST结构化文本或者IL指令列表程序的执行窗口中, 如果程序是通过带 变量选项的输入帮助 () 插入的,根据这个语法,程序和它的所有变量将自动的显示出来。但是不必给这些参数赋值。下面是程序调用的例子:In IL:CAL PRGexample2LD PRGexample2.out_varST ERGor with assigning the parameters (input assistant “With arguments“, see above):
32、CAL PRGexample2(in_var:=33, out_var=erg )In ST:PRGexample2;Erg := PRGexample2.out_var;or with assigning the parameters (input assistant “With arguments“, see above):PRGexample2(in_var:=33, out_var=erg );In FBD:PLC_PRG调用顺序图的例子:请参照本页之上的程序 PRGexample :LD 0ST PRGexample.PAR (*Default setting for PAR is
33、0*)- 2-5 -第二章 CoDeSys 的结构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_PRGPLC_PRG是一个特殊的预定义的 POU,每一个工程文
34、件中必须包含一个这样的特殊的程序。实际上这个POU在每个控制循环中只调用一次。在一个新工程文件创建之后,将首次使用“Project (工程)”“Object Add(添加对象)”命令, 在POU 的对话框的缺省项目是一个名为PLC_PRG的程序类型的POU。 不能更改这些默认的设置。如果定义了任务,那么工程中可以不包含PLC_PRG,因为在这种情况下,程序的时序依赖于任务的分配。注意:不要删除或者重命名 POU PLC_PRG(假如没有使用任务配置),PLC_PRG是一个单任务程序中的主程序。动作:动作能够被定义并分配给功能块和程序, 动作表现为一个更进一步的执行, 它可以用其它的语言进行创建
35、,每一个动作都有一个名称。每一个动作都是和功能块或者程序中的数据一起工作的,动作使用相同的输入/输出变量和局部变量来执行。下面是一个功能块的动作的例子:在上面的例子中,调用一个功能块计数器增加或减少输出变量out的值,它依赖输入变量in的值,调用功能块的复位来设置输出变量为零,相同的变量out写到了两个例子中。调用一个动作:调用一个动作是通过. 或., 注意在FBD 中的注释(看下例)!如果需要在自己的模块中调用这个动作,只需要在文本编辑器和图形界面中使用动作的名称来调用功能块,而不必需要实例的信息。下面是一个从其他的 POU调用上述动作的例子:- 2-6 -第二章 CoDeSys 的结构对全
36、部例程的声明PROGRAM PLC_PRGVARInst : Counter;END_VAR在另外一个POU中调用“ 复位”动作,用IL编程:CAL Inst.Reset(In := FALSE)LD Inst.outST ERG在另外一个POU中调用“ 复位”动作,用ST编程:Inst.Reset(In := FALSE);Erg := Inst.out;在另外一个POU中调用“ 复位”动作,用 FBD编程:注意:动作在顺序功能图中发挥重要的作用,参照顺序功能图,IEC标准只识别顺序功能图中的动作。资源需要用资源来配置和组织的工程文件和追踪变量的值。全局变量用于全部工程文件或网络中。库管理器
37、用于添加库文件到工程中。日志文件记录在线期间的动作。PLC Configuration配置可编程控制器的硬件。任务配置通过任务划分来引导程序的工作。监视和接收管理器来显示变量值和设置默认变量值。目标系统设置用来选择和在必要时进行目标系统的最终配置。工作区作为工程选项的映像。在Codesys中构建工程需要的目标系统和目标系统设置,也可能用到下列资源。用于变量值图形显示的采样追踪。用于在同一个网络中与其它控制器交换数据的参数管理器。作为控制器监视的PLC浏览器。工具,与目标系统相关,在Codesys内外调用外部工具程序。 库文件可以在工程文件中包含一系列的库文件,可以象使用自定义的变量一样使用库文
38、件的POU,数据类型,和全局变量。库文件中的standard.lib和util.lib 是可以自由调用的程序单元,更多的知识请参照“ 库管理器”数据类型参照标准的数据类型, 用户可以定义自己的数据类型, 可以建立结构体枚举类型和引用类型。详见“ 数据类型”可视化界面Codesys提供了可视化界面,因此可以显示工程的变量,通过可视化的帮助可以在离线的情况下绘制几何图形, 在联机模式下能够按照特定变量的值而改变他们的形状, 颜色和文- 2-7 -第二章 CoDeSys 的结构- 2-8 -本输出。可视化的界面可以用作带 Codesys的HMI 的PLC实用操作接口,或者作为一个网页或目标系统显示,
39、通过因特网或PLC直接可视化。详见“Codesys可视化”用户手册。2.2 语言Codesys支持IEC _61131所描述的所有语言文本化的语言:文本形式指令表结构文本图形化的语言:顺序功能流程图功能模块图梯形图还可采用基于功能模块图的连续功能图形化编辑器(CFC )2.2.1 指令表指令表中包含一系列的指令, 依赖于操作的类型, 每一条指令在一个新行开始并且包含运算符号和一个或多个用逗号隔开的操作数。在一个指令前面,还可以有一个标号,后缀一个冒号。注释部分在一行的最后,指令与指令之间可以插入空行。例如:LD 17ST lint (* Kommentar *)GE 5JMPC nextLD
40、idwordEQ istruct.sdwordSTN testnext:在指令列表中将用到下面的操作符和 限定 符:限定符:C 与操作符 JMP, CAL, RET 连用: 当前面的表达式处理的结果为 TRUE时,才执行此指令。N 与操作符 JMPC, CALC,RETC 连用: 当前面的表达式处理的结果为 FALSE时,才执行此指令。N 用于其它情况: 取操作数的反 ( 不包括累加器) 。下面是操作符和它们可能的限定符以及相关的意义:操作符及限定符意义LD N 使当前的值等于操作数ST N 在操作数的位置保存当前值S 当前的值为TRUE时,把布尔型操作数置为TRUER 当前的值为TRUE时,
41、把布尔型操作数置为 FALSEAND N,( 位逻辑运算符号“与”OR N, ( 位逻辑运算符号 “或”XOR N,( 位逻辑运算符号 “异或”ADD ( 加法第二章 CoDeSys 的结构- 2-9 -SUB( 减法MUL( 乘法DIV( 除法GT( GE( =EQ( =NE( 布尔运算“ 与” AND布尔运算“异或” XOR布尔运算“或” OR 最弱的约束力下面这些是结构化文本中的其它指令,和例子一起安排在一个表中。指令类型 例子赋值 A:=B ; CV := CV + 1 ; C :=SIN(X) ;调用一个功能块并使用功能块输出 CMD_TMR(IN := %IX5, PT := 30
42、0) ;A:=CMD_TMR.QRETURN RETURN ;IF D:=B*B ;IF D 70 DO J:=J+2;END_WHILE;REPEAT J:=-1 ;REPEATJ:=J+2 ;UNTIL J= 101 OR ARRJ = 70END_REPEAT;EXIT EXIT ;空指令 ;赋值操作符赋值符号左边是一个操作数(变量,地址),“ :=” 右边是赋予它的表达式的值,例如:Var1 :=Var2*10在运算结束后,变量Var1 就得到了Var2的10倍值。在结构化文本中调用功能块通过写功能块的实例名, 以及随后在括号中给参数分配值来调用一个功能块。 在下面的例子中,通过给两个
43、参数IN和PT赋值来调用一个定时器,然后结果变量Q的值赋予变量A。结果变量,就象在指令表中,被表示为功能块名称后跟一个小点和变量的名字。CMD_TMR(IN := %IX5, PT := 300);A:=CMD_TMR.QRETURN指令返回指令可以用来按照条件离开一个POU( POU)。IF指令IF指令可以检验一个条件,根据这个条件,执行指令。语法:IF THEN第二章 CoDeSys 的结构- 2-12 -ELSIF THEN.ELSIF THENELSE END_IF;在中的部分是可选的。如果布尔运算表达式返回TRUE,只有if 指令部分执行,其它部分不执行。否则,布尔运算表达式从开始,
44、一个接一个的计算,直到某个布尔表达式返回为TRUE。然后,在这个布尔运算表达式2之后,ELSE或ELSE IF 之前的部分被计算。如果没有任何一个布尔运算表达式返回 TRUE,那么只计算ELSE下的指令。例如:IF temp OF: Languages.2-14 CoDeSys V2.3: : : .: ELSE END_CASE;CASE指令根据下面的模式来处理:如果变量Var1有值Value1,那么执行指令 Instruction1。如果变量 Var1不是所指定的值,那么执行ELSE Instruction。如果有多个变量值要执行同一个指令,那么这些条件执行一个公共指令。如果对于一个变量在
45、一个值的范围内执行同一个指令,那么在初始值和最后值之间用两个句点隔开,所以可以规定公共条件。例如:第二章 CoDeSys 的结构- 2-13 -CASE INT1 OF1, 5: BOOL1 := TRUE;BOOL3 := FALSE;2: BOOL2 := FALSE;BOOL3 := TRUE;1020: BOOL1 := TRUE;BOOL3:= TRUE;ELSEBOOL1 := NOT BOOL1;BOOL2 := BOOL1 OR BOOL2;END_CASE;FOR 循环通过FOR 循环程序可以编写重复执行的处理过程。句式:INT_Var :INT;FOR := TO BY D
46、OEND_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 DOVar1:=Var1*2;END_FOR;Erg:=Var1;我们假
47、设Var1的默认值是1,那么在循环结束后它将得到值32。注意:END_VALUE一定不要大于等于与计数器INT_VAR的极限值,例如:如果变量计数器是一个 SINT类型,并且END_VALUE为127,那么这将是一个死循环。WHILE循环WHILE循环可以象 FOR循环那样使用,不同之处在于WHILE循环的退出条件可以是任何布尔型表达式,当条件满足时,就会执行循环。句式:WHILE END_WHILE;只 要 Boolean_expression 返 回 TRUE , 那 么 就 重 复 执 行 Instructions , 如 果Boolean_expression在首次计算出FALSE,那
48、么指令将不再执行,如果Boolean_expression从不出现FALSE ,Instructions 将没完没了的重复执行。注意:程序员必须保证不出现死循环,这可以通过改变循环中指令部分的条件来实现,第二章 CoDeSys 的结构- 2-14 -例如:可以通过计数器增加或减少。例如:WHILE countera)ST: afbinst(in1:=1, out1=a);如果通过输入帮助 ()用选项“With arguments”在ST 或IL POU的执行窗口中插入一个POU,它将自动和所有的变量以这个句法格式显示出来,但不能强制这些变量赋值。The text editors in Onli
49、ne mode在编辑器中的联机功能是用来设置断点和单个步处理(步),和监视功能结合起来,用户就拥有了标准语言调试器的调试功能。在联机模式,文本编辑器窗口垂直分为两部分,在窗口左边的部分是标准程序文本,在右边是显示的变量,它的值在各自的行上被改变。显示与声明部分的显示一样。当PLC 运行时,将会显示各自变量的当前值。当监视表达式或位地址变量时要注意以下:在监视表达式时,通常显示整个表达式的值。例如,a 和b 显示为蓝色或如果 a 和b 的值是TRUE 显示“:=TRUE”。对于位地址变量,位值通常被监视(例如, a.3 显示为蓝色或如果a 有值4)。如果用鼠标在变量上停留一会,变量的类型、地址、注释将会在工具提示中显示出来。Extras Monitoring Options用这个命令可以配置监视窗口。在文本编辑器中,在监视过程中窗口被分成两部分,程序加载在左边部分,在右边部分中,相应程序行中的变量被监视。可以指定监视器窗口的宽度和距离,两个变量应在一行内。声明的距离为1对应,在这种情况下,一行高度即选定的字体。窗口宽度还可以进行修改,用鼠标调整窗口分割器。Monitoring Options Dialog Box第五章 Codesys 中的编辑器Brea