CTH300-C 系列运动控制器系统手册 CODESYS 支持所有 IEC 标准的 POUs,如果在工程文件中使用这些 POU,必须在工程文件中包含标 准库文件 standard.lib。POUs 可以调用其它的 POUs,但递归调用是不允许的。 函数 一个函数是一个 POU,它正确地产生一个数据元素(可以包含若干元素,比如,字段或结构体),在处 理过程中,可以作为文本化语言表达式中的一个操作数来调用它。在声明一个函数的时候,一定要给它 一个类型,这就是说,在函数名后面加上一个冒号然后跟一个数据类型。 一个正确的函数声明可以参考下面的例子: FUNCTION Fct: INT 另外,必须分配给函数一个结果,即把函数名作为一个输出变量。 函数的声明从关键字 FUNCTION 开始。 在 IL 中函数的调用被安排在单步操作或单个转换之内。在 ST 中一个函数的调用可以作为表达式中的操 作数。下面是一个在 IL 中一个函数带有三个输入变量并返回前两个变量的乘积与第三个变量相除的结 果。 功能块 一个功能块是一个 POU,在程序中提供一个或多个值。与函数相反,一个功能块没有返回值。功能块的 声明用关键字 FUNCTION_BLOCK 开始,可以创建功能块的备份或实例。 程序 一个程序是一个 POU,它在操作过程中返回几个值,程序在工程文件中是全局的。程序的所有最终值将 保留直到下一次程序运行。 PLC_PRG PLC_PRG 是一个特殊的预定义的 POU,每一个工程文件中必须包含一个这样的特殊的程序。实际上这 个 POU 在每个控制循环中只调用一次。 在一个新工程文件创建之后,将首次使用“Project(工程)”→“Object Add(添加对象)”命令,在 POU 的对话框的缺省项目是一个名为 PLC_PRG 的程序类型的 POU。不能更改这些默认的设置。 如果定义了任务,那么工程中可以不包含 PLC_PRG,因为在这种情况下,程序的时序依赖于任务的分 配。 <注意> 不要删除或者重命名 POU PLC_PRG(假如没有使用任务配置),PLC_PRG 是一个单任务程序 中的主程序。 41
CODESYS 的结构 动作 动作能够被定义并分配给功能块和程序,动作表现为一个更进一步的执行,它可以用其它的语言进行创 建,每一个动作都有一个名称。 每一个动作都是和功能块或者程序中的数据一起工作的,动作使用相同的输入/输出变量和局部变量来执 行。 资源 你需要用资源来配置和组织的工程文件和追踪变量的值。 · 全局变量用于全部工程文件或网络中。 · 库管理器用于添加库文件到工程中。 · 日志文件记录在线期间的动作。 · PLC Configuration 配置可编程控制器的硬件。 · 任务配置通过任务划分来引导程序的工作。 · 监视和接收管理器来显示变量值和设置默认变量值。 · 目标系统设置用来选择和在必要时进行目标系统的最终配置。 · 工作区作为工程选项的映像。 在 CODESYS 中构建工程需要的目标系统和目标系统设置,也可能用到下列资源: · 用于变量值图形显示的采样追踪。 · 用于在同一个网络中与其它控制器交换数据的参数管理器。 · 作为控制器监视的 PLC 浏览器。 · 工具,与目标系统相关,在 CODESYS 内外调用外部工具程序。 库文件 可以在工程文件中包含一系列的库文件,可以象使用自定义的变量一样使用库文件的 POU,数据类型, 和全局变量。库文件中的 standard.lib 和 util.lib 是可以自由调用的程序单元。 数据类型 参照标准的数据类型,用户可以定义自己的数据类型,可以建立结构体枚举类型和引用类型。 可视化界面 CODESYS 提供了可视化界面,因此可以显示工程的变量,通过可视化的帮助可以在离线的情况下绘制 几何图形,在联机模式下能够按照特定变量的值而改变他们的形状,颜色和文本输出。 42
CTH300-C 系列运动控制器系统手册 可视化的界面可以用作带 CODESYS 的 HMI 的 PLC 实用操作接口,或者作为一个网页或目标系统显示, 通过因特网或 PLC 直接可视化。 6.2 语言 CODESYS 提供了对应的编辑器,支持所有在 IEC_61131 标准中规定的编程语言: · 文本形式的语言:指令表(IL)、结构化文本(ST) · 图形化的语言:顺序功能图表(SFC)、功能模块图(FBD)、梯形图(LD)、基于功能模块图的 连续功能图表(CFC) 6.2.1 指令表(IL) 指令表中包含一系列的指令,依赖于操作的类型,每一条指令在一个新行开始并且包含运算符号和一个 或多个用逗号隔开的操作数。在一个指令前面,还可以有一个标号,后缀一个冒号。注释部分在一行的 最后,指令与指令之间可以插入空行。 在指令列表中将用到下面的操作符和限定符: 限定符: C 与操作符 JMP, CAL, RET 连用:当前面的表达式处理的结果为 TRUE 时,才执行此指令。 N 与操作符 JMPC, CALC,RETC 连用:当前面的表达式处理的结果为 FALSE 时,才执行此指令。 N 用于其它情况:取操作数的反(不包括累加器)。 下面是操作符和它们可能的限定符以及相关的意义: 操作符及限定符意义 LD N 使当前的值等于操作数 ST N 在操作数的位置保存当前值 S 当前的值为 TRUE 时,把布尔型操作数置为 TRUE R 当前的值为 TRUE 时,把布尔型操作数置为 FALSE AND N,( 位逻辑运算符号“与” OR N, ( 位逻辑运算符号“或” XOR N,( 位逻辑运算符号“异或” ADD ( 加法 SUB( 减法 43
CODESYS 的结构 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*) Lable: LD BOOL2 (* 保存 BOOL2 的值 *) ST ERG (*把 BOOL2 保存在 ERG*) 在 IL 中也可以在操作之后放一个圆括号。圆括号内的值被认为是一个操作数。例如: LD 2 MUL 2 ADD 3 Erg 这里 Erg 的值为 7,但是如果加一个圆括号: 44
CTH300-C 系列运动控制器系统手册 LD 2 MUL (2 ADD 3 ) ST Erg Erg 的结果是 10,当到达\")\"时操作 MUL 才开始计算;此时操作数 5 计算 MUL。 6.2.2 结构化文本(ST) 结构化文本中包含一系列的指令,这些用高级语言编写的指令能够被执行(例如 IF……THEN…… ELSE)或者在循环(WHILE……DO)。 表达式 表达式是一个在运算后返回一个值的结构。表达式由运算符和操作数组成,操作数可以是常量、变量、 函数调用或其它表达式。 表达式的计算 依照一定的规则来处理操作数可以计算出表达式的值,约束力最高的运算符首先参加运算,然后是约束 力稍高的运算符,直到所有的运算符都被处理为止。相同约束力的运算符号的处理是从左到右的顺序。 下面是结构文本中运算符号约束力的级别排列: 操作 符号 约束力 最强的约束力 放入圆括号 ( 表达式) 函数调用 函数名(参数列表) 求幂 EXPT 取反 乘法 - 除法 * 取模 / 加法 MOD 减法 + 比较 - 等于 <,>,<=,>= = 45
CODESYS 的结构 不等于 <> 布尔运算“与” AND 布尔运算“异或” XOR 布尔运算“或” OR 最弱的约束力 下面这些是结构化文本中的其它指令,和例子一起安排在一个表中。 指令类型 例子 赋值 A:=B; CV := CV + 1 ;C:=SIN(X); 调用一个功能块并使用功 CMD_TMR(IN := %IX5, PT := 300) ; 能块输出 A:=CMD_TMR.Q RETURN RETURN ; D:=B*B ; IF D<0.0 THEN C:=A; ELSIF D=0.0 THEN IF C:=B; ELSE C:=D; END_IF; CASE INT1 OF 1:BOOL1:= TRUE; 2:BOOL2:= TRUE; CASE ELSE BOOL1:= FALSE; BOOL2:= FALSE; END_CASE; J:=101 ; FOR I:=1 TO 100 BY 2 DO FOR IF ARR[I] = 70 THEN J:=I; EXIT; 46
CTH300-C 系列运动控制器系统手册 END_IF; END_FOR; WHILE J:=1 ; WHILE J<= 100 AND ARR[J] <> 70 DO J: REPEAT =J+2; EXIT END_WHILE; 空指令 J:=-1 ; REPEAT J:=J+2; UNTIL J= 101 OR ARR[J] = 70 END_REPEAT; EXIT ; ; 赋值操作符 赋值符号左边是一个操作数(变量,地址),“:=”右边是赋予它的表达式的值,例如: Var1 :=Var2*10 在运算结束后,变量 Var1 就得到了 Var2 的 10 倍值。 在结构化文本中调用功能块 通过写功能块的实例名,以及随后在括号中给参数分配值来调用一个功能块。在下面的例子中,通过给 两个参数 IN 和 PT 赋值来调用一个定时器,然后结果变量 Q 的值赋予变量 A。 RETURN 指令 返回指令可以用来按照条件离开一个 POU( POU)。 IF 指令 IF 指令可以检验一个条件,根据这个条件,执行指令。 语法: IF <Boolean_expression1> THEN <IF_instructions> {ELSIF <Boolean_expression2> THEN 47
CODESYS 的结构 <ELSIF_instructions1> . . ELSIF <Boolean_expression n> THEN <ELSIF_instructions n-1> ELSE <ELSE_instructions>} END_IF; 在{}中的部分是可选的。 如果布尔运算表达式<Boolean expression>返回 TRUE,只有 if 指令部分执行,其它部分不执行。否 则,布尔运算表达式从<Boolean expression 2>开始,一个接一个的计算,直到某个布尔表达式返回为 TRUE。然后,在这个布尔运算表达式 2 之后,ELSE 或 ELSE IF 之前的部分被计算。 如果没有任何一个布尔运算表达式返回 TRUE,那么只计算 ELSE 下的指令。例如: IF temp<17 THEN heating_on := TRUE; ELSE heating_on := FALSE; END_IF; 这里当温度降到 17 度以下时加热开始,否则保持关闭状态。 CASE 指令 使用 CASE 指令,可以在一个结构中,用同一个条件变量组合多个有条件判断的指令。句式: CASE <Var1> OF <Value1>: <Instruction 1> Languages... 2-14 CoDeSys V2.3 <Value2>: <Instruction 2> <Value3, Value4, Value5>: <Instruction 3> <Value6 .. Value10>: <Instruction 4> ... <Value n>: <Instruction n> 48
CTH300-C 系列运动控制器系统手册 ELSE <ELSE instruction> 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 <INT_Var> := <INIT_VALUE> TO <END_VALUE> {BY <Step size>} DO <Instructions> END_FOR; 49
CODESYS 的结构 {}内的部分是可选的。 只要计数器 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。 <注意> END_VALUE 一定不要大于等于与计数器 INT_VAR 的极限值,例如:如果变量计数器是一个 SINT 类型,并且 END_VALUE 为 127,那么这将是一个死循环。 WHILE 循环 WHILE 循环可以象 FOR 循环那样使用,不同之处在于 WHILE 循环的退出条件可以是任何布尔型表达 式,当条件满足时,就会执行循环。句式: WHILE <Boolean expression> <Instructions> END_WHILE; 只要 Boolean_expression 返回 TRUE,那么就重复执行 Instructions,如果 Boolean_expression 在首次 计算出 FALSE,那么指令将不再执行,如果 Boolean_expression 从不出现 FALSE,Instructions 将没 完没了的重复执行。 <注意> 程序员必须保证不出现死循环,这可以通过改变循环中指令部分的条件来实现,例如:可以通 过计数器增加或减少。 例如: WHILE counter<>0 DO Var1 := Var1*2; Counter := Counter-1; 50
CTH300-C 系列运动控制器系统手册 END_WHILE 对于 WHILE 和 REPEAT 循环,在循环之前不必知道循环的次数,从这个意义上来说,这两种循环要比 FOR 要强大一些。 因此在此类情况下,可以用这两种循环。如果循环数比较明确,那么因为 FOR 没有死循环反而更好应 用。 REPEAT 循环 REPEAT 循环和 WHILE 循环的不同之处在于它的中断条件是在循环执行之后才被检查,这就是说,循 环至少要执行一次,不管中断是什么条件。 句式: REPEAT <Instructions> UNTIL <Boolean expression> 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 指令,那么内循环就结束,不管中断是什么条件。 51
CODESYS 的结构 6.2.3 顺序功能图表(SFC) 顺序功能图表是基于图形化的语言,用它可以描述一个程序中不同动作的先后顺序。因为这些动作分配 给单步元素,以及采用过度转换变量来控制处理的顺序。 步(Step) 用顺序功能图编写的 POU 包含了一系列的步,这些步之间是通过定向连接(转换条件)实现的。 有两种类型的步: · 简单类型:每步包括一个动作和一个标记,这个标记用来表示此步是否激活。如果单步动作正在执 行,那么在步的右上角方向会出现一个小三角形。 · IEC 类型:每步包含一个标记和一个或多个赋值的动作或布尔变量。相关的动作出现在步的右边。 动作(Action) 一个动作可以包含一系列的指令表或结构化文本指令,功能模块图或梯形图许多的网络,或者又包含另 外顺序功能图。 在简单步中,动作经常是和步连接在一起的,为了能编辑一个动作,在步上双击鼠标或选择此步,再选 择菜单命令“Extras”“Zoom Action / Transition”。另外,每一个步中只允许一个输入或输出动作。 IEC 步的动作是附加在顺序功能图- POU 内的对象管理器中,通过双击或者在它的编辑器中按 Enter 键 可以加载它。也可以通过“Project”“Add Action”来创建一个新的动作。可以为一个 IEC 步分配最多九个 动作。 进入和退出动作 可以额外的为一个步添加一个进入和退出的动作,在一个步激活后,一个进入动作只能执行一次。退出 动作只在步失效之前执行一次。 带进入动作的步左下角一个“E”来表示,退出动作用右下角的“X”表示。 转换/转换条件 在步和步之间有所谓的转换。 转换条件的值必须是 TRUE 或 FALSE,因而它可以是一个布尔变量、布尔地址或布尔常量。在结构化 文本句式(例如(I<=100)AND b)或者在任何一种期望的语言(参照‘Extras’‘Zoom Action/Transition’) 中,它也能包括一系列有布尔结果的指令。转换中不能包括程序、功能块或赋值。 <注意> 除了转换外,也能用渐进模式跳到下一步,查看 SFCtip 和 SFCtipmode。 52
CTH300-C 系列运动控制器系统手册 激活步 在调用顺序功能图的 POU 后,将首先执行初始化步的动作(被一个双边线包围)。正在执行的步动作, 状态是激活的,在联机模式下,激活的步显示为蓝色。在一个控制循环中激活步的所有动作都将执行。 所以,当激活步之后的转换条件是 TRUE 时,它之后的步被激活。当前激活的步将在下个循环中再执 行。 <注意> 如果激活的步包含一个输出动作,譬如它下面转换条件是 TRUE,那么它只能在下个循环过程 中执行。 IEC 步 在顺序功能图中可以使用标准的 IEC 步。 为了能使用 IEC 步,必须在工程文件中联接 Iesfc.lib 库文件。 一个 IEC 步中不能分配超过九个动作,IEC 的动作不象简单步那样固定地作为输入或输出到某个步的动 作,而是和步分开存储并且能够在一个 POU 中重复使用多次。因此,它们必须用命令“ Extras Associate action”和单个步联系在一起。 除了动作,布尔变量也能分配给步。 能够使用所谓的限定词来控制激活和未激活的动作和布尔变量。可能有时间延迟,如果一个动作依然激 活中,而下一个步已经开始处理了,通过限定词 S(设置),可以取得并发的过程。 随着每一个顺序功能模块的调用,相关联的布尔变量被设置或复位,也就是说,随着每一次调用,这个 值将在 TRUE 到 FALSE 之间来回变化。 IEC 步的关联动作在步右边的两长方形中表示,左边的区域包含了限定词,可能带有时间常量,右边的 区域包含了动作名和各自的布尔变量名。 限定符 为了关联动作和 IEC 步,用到下面的限定词 N 非存储 动作和步一起激活 R 复位 动作是未激活的 S 设置 动作被激活,再复位前保持激活状态 L 时间限制 动作激活一段时间,最大值和步激活时间一致 如果步仍然激活,动作在一定时间后激活,然后只要步是激活的, D 时间延迟 它就保持激活 P 脉冲 如果步激活,动作只执行一次。 53
CODESYS 的结构 SD 存储和时间延迟 在一定时间之后动作激活并保持激活状态到下一个复位开始。 只要步仍然激活并且保持到下一个复位开始,那么在一定时间后动 DS 延迟和保持 作被激活 SL 保持和时间限制 动作激活并保持一段时间 限定符 L、D、SD、DS 和 SL 需要一个 TIME 常量格式的时间值。 <注意> 当一个动作失去激活时,它会再执行一次。这就是说每个动作至少执行两次。 SFC 中的隐含变量 在 SFC 中使用一些隐含声明的变量。 每一个步都有一个标记,标记中存储着步的状态。对于 IEC 步来说,步的标记(激活或未激活)被称为 <StepName>.x 或者对一个简单的步来说称为<StepName>。当关联的步激活的时候这个布尔变量值为 TRUE,反之则值为 FALSE。它能够用在 SFC 模块中的每一个动作和转换中。 可以通过查询<ActionName>.x 来查询一个 IEC 步是否激活。 隐含变量<StepName>.t 能够用来查询步激活的时间。 隐含变量也能够被其它程序访问,例如,boolvar1:=sfc1.step1.x; 这里 step1.x 是隐含布尔变量,它代 表了 POUsfc1 中的 IEC 步 step1 的状态。 SFC 标志符 标志符用来控制 SFC POU 操作,它在工程运行期间隐含创建。为了能读这些标志符,必须定义合适的 全局变量或局部变量。例如,如果在一个 SFC POU 中一个步激活的时间超过了它定义的属性,那么就 会设置一个标志符,通过用一个“SFCError”变量可以访问到这个标志符(此时 SFCError 得到真值)。 可以定义下列标志符变量: SFCEnableLimit: 这 个 变 量 的 类 型 是 布 尔 型 , 当 它 的 值 为 TRUE 时 , 这 一 步 的 超 时 将 会 注 册 进 SFCError,其它的超时将被忽略。 SFCInit:当这个布尔变量值为 TRUE 时,顺序功能图复位到初始状态,其它的 SFC 标志符也会被复位。 初始步保持激活,直到变量值为 TRUE 时,才开始执行。只有当 SFCInit 被重新设置为 FALSE 时,模 块才能正常工作。 SFCReset:这个布尔变量,与 SFCInit 很相似,不同之处在于,进一步的处理发生在初始化步的初始化 之后,因而,例如 SFCReset 标志符可以在初始化步中被复位到 FALSE。 54
CTH300-C 系列运动控制器系统手册 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:这是数组型变量 ARRAY [0..n],它提供一个转换表达式的分析结果。对有 影响的每个元素转换注册为 FALSE,以及上一步超时记录,所以要把下列信息写进 ExpressionResult 结构中,写进:名称,地址,注释,当前值。 最大可以容纳 16 个元素,因此,数组的范围从(0~15)。 ExpressionResult 结构和隐含使用的分析模块都是由 AnalyzationNew.lib 库文件提供的,分析模块也能 够被其它的不用 SFC 编写的 POU 显式使用。 上一步的超时注册是分析一个转换表达式的先决条件,因此在这里必须有一个时间监视的应用,而且 SFCError 必须在声明窗口被定义。 SFCTip, SFCTipMode:这个布尔变量允许 SFC 的渐进模式。当用在 SFCTipMode=TRUE 来切换它时, 如果 SFCTip 设置值为 TRUE 它只可能跳到下一个步,只要 SFCTipMode 是设置为 FALSE 时,它可能 跳过转换。 可选分支 在 SFC 中可以定义两个或两个以上的可选择分支。每一个分支的开始和结束必须带有一个转换。可选 分支可以包含并行的分支和其它的选择分支,一个可选分支开始于一个水平线并终止于一个水平线(选 择结束),或是一个跳跃。 55
CODESYS 的结构 如果在可选分支开始行前面的步是激活的,每一个可选分支的首次变换将从左到右被计算,最先的转换 将从左边转换条件为 TRUE 的开始,然后下面的步被激活。 并行分支 在 SFC 中可以定义两个或两个以上的分支为并行分支。每一个并行分支在开始和结束处必须有一个步。 并行分支可以包含可选择的分支或其它并行分支,一个并行分支开始于一个双划线,结束于一个双划线 或者一个跳跃,它能提供一个跳跃标识。 如果并行分支的先前步是激活的,并且这个步之后的变换条件值是 TRUE 时,那么并行分支的第一步激 活。这些分支彼此并行处理。当所有并行步激活并且这些步之后转换条件为 TRUE 时,那么并行分之末 端线后的那一步被激活跳转。 跳转是对在跳转符号下面指明的步名的一个连接。当在不允许创建向上或互相交叉联络的时候,必须使 用跳转。 6.2.4 功能模块图(FBD) 功能模块图是一种基于图形的编程语言,它用一串网络来工作,每一个网络包含一个提供算术或逻辑表 达式、功能块的调用、跳转或返回指令的结构。 6.2.5 连续功能图表(CFC) 连续功能图表编辑器不象功能模块图那样操作,但是可以自由放置元素,它允许使用反馈。 6.2.6 梯形图(LD) 梯形图也是一种基于图形化的编程语言,它接近于电子电路的结构,一方面,梯形图很适合构建逻辑开 关,另一方面,它也能创建象 FBD 中的网络图,所以梯形图在控制调用其它 POU 的时候是很有用的。 梯形图包含了一系列的网络,左右两边各有一个垂直的电流线,网络图仅限制于左右两母线之间的范围 内,在中间是由线圈触点和连接线组成的电路图。 每一个网络包含左边的一系列触点,这些触点根据布尔变量值的 TRUE 和 FALSE 来传递从左到右的开 和关的状态。每一个触点是一个布尔变量,如变量值为 TRUE,电路从左到右通过连接线就连通。否则 右边接收到“关”的值。 触点 56
CTH300-C 系列运动控制器系统手册 在梯形图中的每一个网络图的左边都有触点(触点是用两个并行线| |来表示),它用来表示电路的“开”“关” 状态。 这些状态与布尔变量 TRUE 和 FALSE 相一致。布尔变量属于每一个触点。如果变量值为 TRUE,那么 状态可以通过连接线从左传到右边。否则,右边接收到的是“断开”。 触点可以并联使用,其中的一个并联分支必须传递“开”状态时,并联分支才能传递“开”。或者触点串联连 接,此时,触点必须传递“开”状态时,最后的触点才传递“开”,这些与串并联连接的电路一致。 线圈 在梯形网络图的右边有一些所谓的线圈,它们用()表示,并且只能通过水平线来连接。线圈传递从左 到右的连接状态,并且复制状态到布尔变量中,可以描述入口线的状态为“开”(对应布尔变量的 TRUE) 或者“关闭”状态(对应布尔变量的 FALSE)。 触点和线圈也可以取反值(在上例中的触头 SWITCH1 和线圈%QX3.0 是取反值)。如果触点取反值(在 触头符号中用“/”来表示),然后它复制反后的值到相应的布尔型变量中。如果一个触点取反值,仅当相 应的布尔变量取到 FALSE 时,电路才能连通。 梯形图中的功能块 可以在网络图中添加功能块和程序,但它们必须具有布尔型值的输入和输出,并且可以象触点那样用在 梯形图的左边。 触点的设置/复位 触点可以被定义为设置/复位触点。设置触点在触点符号中用“S”表示,它从不覆盖相应的布尔变量中的 TRUE 值,也就是说,如果变量一旦设置为 TRUE,它将保持状态不变。 复位触点用“R”来表示,它从不覆盖相应布尔变量中 FALSE 值,如果变量已经设置了 FALSE,它将保持 这种状态不变。 当使用梯形图时候,可以用触点开关的结果来控制其它的 POU。一方面可以用线圈把结果输出给全局 变量,这个全局变量可以在其它的地方使用。也可以通过引入一个带 EN 输入的 POU 来直接在梯形网 络图中插入可能的调用。 这些 POU 是完整的正常的操作数、功能、程序或功能块。它们都有一个附加的输入标志符 EN。EN 输 入是一个布尔变量,只有当 EN 值为 TRUE 时,带有 EN 输入的 POU 才会被计算。 6.3 联机调试功能 57
CODESYS 的结构 采样追踪 采样追踪允许追踪变量的连续变化的值,它依赖于所谓的触发事件,触发事件是先前定义的布尔变量(触 发变量)的上升沿或下降沿。CODESYS 允许对 20 个变量进行追踪,每一个变量可以追踪 500 个值。 调试 CODESYS 的调试功能使得错误很容易被找到。为了调试,运行命令“Project”“Options”,在自动 弹出的创建选项的对话框中选择已经激活的选项。 断点 断点是程序处理过程中停止的位置,因而它可以在程序中的特定位置观察变量值的变化。 断点可以在编辑器中设置,在文本编辑器中断点在行的编号处设置,在连续功能图中和梯形图中是在网 络编号处设置,在 CFC 中是在 POU 处设置,在 SFC 中是在步处设置,在功能模块图的实例中不能设 置断点。 单步 单步是: 在指令表中:执行程序直到运行 CAL LD 和 JMP 命令。 在结构化文本中:执行下一条指令。 在功能模块图梯形图中:执行下一步网络。 在顺序功能图中:继续目前的动作直到下一个步开始。 通过一步一步的运行可以检查程序中的逻辑错误。 单循环 如果选择了单循环,每一个循环结束,执行也就结束。 联机模式下改变值 在操作过程中,变量可以设置为一个特定的值(write value),或者在每一个循环之后重新定义为特定 的值(force value)。在联机模式下可以通过双击变量的值来改变它的值,布尔变量从 TRUE 变为 FALSE, 或从 FALSE 变为 TRUE。对于每一种类型的变量都可以打开 Write Variable xy 对话框,在这里可以编 辑变量的真实值。 监视 58
CTH300-C 系列运动控制器系统手册 在联机模式下,所有的变量可以从控制器中读出并及时的显示。可以在定义和程序编辑器中找到这些显 示。也可以在观察和接收器中读出变量的当前值,并且可以看到它们。如果要监视功能块的实例中的变 量,相应的实例块必须已经打开。 仿真 在仿真模拟过程中,创建的 PLC 程序不在实际的 PLC 中运行,而是在 CODESYS 系统中的计算器中运 行。所有的联机功能都是可用的。它允许在无需 PLC 硬件的情况下检测逻辑的正确性。 <注意> 外部库文件的 POU 是不能运行在仿真模式的。 日志 日志记录着用户的操作、内部进程、状态变换和联机模式处理过程中发生的意外的情形。它用来监视和 跟踪错误。 6.4 标准化 IEC61131-3 是一种国际标准化的 PLC 编程语言。在 CODESYS 中提供的可编程语言符合标准化的要求。 根据这个标准,一个程序包含以下元素: · 结构 · POU · 全局变量 通用的语言的元素在标识符、地址、类型、注释和常量部分中已经讲述。CODESYS 程序的处理是从一 个特殊的 POU(POU)PLC_PRG 开始的,POU PLC_PRG 能调用其它的 POU。 59
CTH300-C 系列运动控制器系统手册 7 使用指南 本章基于几个具体实例,介绍如何配置 CTH300-C 系列运动控制器,以及与其它设备进行 Modbus、 CANopen、EtherCAT 通信等。 7.1 总线通信实例 本指南通过一个具体实例让大家了解如何使用 CODESYS 软件控制 CTH300-C 系列运动控制器与扩展 模块的总线通信。 7.1.1 示例组件 组件 功能 安装有 CODESYS V3.5 对 CTH300-C 系列运动控制器进行组态、编程和调试 的编程设备 装配导轨 CTH300-C 机架,用于固定系统中的各模块。 电源模块 PWR-02 提供 CTH300-C 系列运动控制器及其 24 VDC 负载电路。 C37-00 运动控制器 CPU 执行用户程序,向 CTH300-C 总线提供 5 V 电压,并通过以太网接 口与其它模块进行通讯。 扩展模块 SM SM 转换不同的过程信号电平,使其与 CTH300-C 系列运动控制器相匹配。 本例使用:数字量模块 DIT-16、DQT-16 标准网线 连接编程设备与C37-00 60
使用指南 7.1.2 网络连接 DC 24V 01234567 01234567 SF 01234567 01234567 安装有CODESYS的编程设备 01234567 01234567 01234567 01234567 DC 24V I0.2 Q0.2 RUN ST O P PWR-02 I0.4 L1 C35-00 N 1A L+ 1B M L+ L+ M M 1A 1B ● PWR C37-00 D I T- 1 6 D Q T- 1 6 7.1.3 操作步骤 1、为 C37-00、电源模块、数字量输入和输出模块接线 打开 C37-00、电源模块 PWR-02、数字量输入(DIT-16)和输出模块(DQT-16)的前面板,然后按照 “7.1.2 网络连接”为它们接线。 警告 电源模块上电后或将电源电缆连接到主电源后不得触摸通电电缆,只有在关闭电源后才能进行接线工 作! 2、连接电缆 参考“7.1.2 网络连接”连接各设备,连接操作描述如下: 1)使用标准网线连接 PC 与 C37-00 2)DIT-16 通过总线方式连接至 C37-00 3)DIQ-16 通过总线方式连接至 DQT-16 3、在 CODESYS 中进行组态 1)在设备视图选中“Co-trust LocalBus”并点击右键选择“添加设备”,即可在弹出的对话框中选择并 添加中继模块,参考如下示意图: 61
CTH300-C 系列运动控制器系统手册 2)参照以上操作,在设备视图中右键点击中继模块选择“添加设备”,即可在“添加设备对话框”中选 择添加扩展模块 DIT-16 和 DQT-16。或者右键点击中继模块选择“扫描设备”,与 C37-00 相连的扩展 模块即会显示在中继模块下方。 <备注> C37-00 支持的扩展模块有中继模块、数字量输入/输出模块、模拟量输入/输出模块、温度模块、 CAN 主站模块,扩展模块的规格信息请参考“C 扩展模块技术规范”。 4、参考章节“2.3 设置通信”设置 C37-00 与上位机的通信 5、运行、调试与监控 1)选择菜单项“在线”→“登录到...”使应用程序与 C37-00 建立起连接,并进入在线状态。然后,选 择菜单项“调试”→“启动”使 C37-00 中的应用程序开始运行,此时即可对当前工程进行监控和调试 操作。 2)在 CODESYS 软件的 Internal I/O 映射表中为%QX0.2 写入 1,则 DQT-16 模块的输出点 Q0.2 被点 亮。同时,DIT-16 模块的输入点 I0.2 和 I0.4 被点亮,在 DIT-16 模块的 Internal I/O 映射表中查看%IX0.2 和%IX0.4 的值变为 1。 7.2 Modbus TCP 通信实例 62
使用指南 本指南通过一个具体实例来引导您建立一个应用程序,通过本例,您将熟悉 CTH300-C 系列运动控制器 的 Modbus TCP 的通信功能。 7.2.1 示例组件 组件 功能 安装有 CODESYS V3.5 的 对 CTH300-C 系列运动控制器进行组态、编程和调试 编程设备 装配导轨 CTH300-C 机架,用于固定系统中的各模块。 电源模块 PWR-02 提供 CTH300-C 系列运动控制器的 24VDC 工作电源 C37-00 运动控制器 执行用户程序,为总线提供 5 V 电压,并通过以太网接口与其它模块进 行通讯。 标准网线 连接编程设备与C37-00 7.2.2 网络连接 使用标准网线连接编程设备与 C37-00,然后通过编程设备分别对作为 Modbus 主站、从站的 C37-00 进 行编程: 使用标准网线将作为 Modbus 主站和 Modbus 从站的两台 C37-00 连接起来,继而可进行 Modbus TCP 通信: 63
CTH300-C 系列运动控制器系统手册 Modbus TCP 通信 DC 24V DC 24V SF SF DC 24V DC 24V RUN RUN ST O P ST O P PWR-02 PWR-02 C37-00 C37-00 L1 L1 N N 1A 1A 1B 1B L+ L+ M L+ M L+ M 1A M 1A L+ 1B L+ 1B M● M ● PWR- 02 C37-00 PWR- 02 C37-00 Modbus主站 Modbus从站 7.2.3 操作步骤 1、连接电缆 参考“7.2.2 网络连接”,使用一条标准网线连接 PC 与 Modbus 从站。 2、对 Modbus 从站 C37-00 进行编程 1)在 PLC SHELL 中输入命令,如“setip 192.168.0.1”按 ENTER 键可设置 IP 地址。 2)在 PLC_PRG(PRG)中为 Modbus 从站编程 以下指令为“CO-TRUST MODBUS LIBRARY”库文件中的“Modbus_TCP_Slave”库指令: 3)编译并下载程序到 Modbus 从站设备中 3、连接电缆 64
使用指南 参考“7.4.2 网络连接”,使用标准网线连接 PC 与 Modbus 主站。 4、对 Modbus 主站 C37-00 进行编程 1)在 PLC_PRG(PRG)中为 Modbus 主站编程 以下指令为“CO-TRUST MODBUS LIBRARY”库文件中的“Modbus_TCP_REQ”库指令 5、Modbus 主站与 Modbus 从站互联通信 1)给 Modbus 主站、从站接通电源 2)使用标准网线连接 Modbus 主站与从站,即它们开始进行 Modbus TCP 通信。 7.3 Modbus RTU 通信实例 本指南通过一个具体实例来引导您建立一个应用程序,通过本例,您将熟悉 C37-00 的 Modbus RTU 的 通信功能。 7.3.1 示例组件 组件 功能 安装有 CODESYS V3.5 的编程设备 对 CTH300-C 系列运动控制器进行组态、编程和调试 装配导轨 电源模块 PWR-02 用于固定系统中的各模块。 C37-00 运动控制器 提供 CTH300-C 系列运动控制器及 HMI 的 24VDC 工作电源 CPU 执行用户程序,向 CTH300-C 总线提供 5V 电压,并通过以太网接 65
CTH300-C 系列运动控制器系统手册 口与其它模块进行通讯。 Copanel 系列 HMI,作为 Modbus 主站与 C37-00 通信 HMI 支持 Modbus 协议的变频器,作为 Modbus 从站与 C37-00 通信 变频器 连接编程设备与C37-00 标准网线 7.3.2 网络连接 ◆ C37-00 作为主站与变频器通信 Modbus主站 Modbus从站 DC 24V SF DC 24V RUN ST O P PWR-02 C37-00 L1 N 1A 1B L+ M L+ M 1A L+ 1B M● 安装有CoDeSys的编程设备 PWR-02 C37-00 变频器 ◆ C37-00 作为从站与 HMI 通信 Modbus从站 DC 24V SF DC 24V Modbus主站 RUN HMI ST O P PWR-02 C37-00 L1 N 1A 1B L+ M L+ M 1A L+ 1B M● 安装有CoDeSys的编程设备 PWR-02 C37-00 7.3.3 操作步骤 1、为 C37-00、电源模块、HMI 和变频器接线 参考“7.3.2 网络连接”分别为 C37-00、电源模块 PWR-02、HMI 和变频器接线。 2、连接电缆 1)使用一条标准网线连接 PC 与 C37-00。 66
使用指南 2)当 C37-00 作为 Modbus 主站与变频器通信时,将 C37-00 的 RS485 接线端子的 1A、1B 连接至变 频器的 Modbus 通信口。 3)当 C37-00 作为 Modbus 从站与 HMI 通信时,将 C37-00 的 RS485 接线端子的 1A、1B 连接至 HMI 的 Modbus 通信口。 3、当 C37-00 作为 Modbus 主站与变频器通信时,为 C37-00 编程如下: 4、当 C37-00 作为 Modbus 从站与 HMI 通信时,为 C37-00 编程如下: 67
CTH300-C 系列运动控制器系统手册 7.4 CANopen 通信实例 本指南通过一个具体实例使您熟悉 C37-00 通过 CAN-01 主站模块实现 CANopen 通信功能。 7.4.1 示例组件 组件 功能 安装有 CODESYS V3.5 的 对 CTH300-C 系列运动控制器进行组态、编程和调试 编程设备 装配导轨 用于固定系统中的各模块。 电源模块 PWR-02 提供 CTH300-C 系列运动控制器及其 24 VDC 负载电路。 C37-00 运动控制器 执行用户程序,为总线提供 5 V 电压,并通过以太网接口与其它模块进 行通讯。 CAN 主站模块 CAN-1T 作为 CAN 主站,与 CAN 从站进行通信 EM277C 作为 CAN 从站 扩展模块 CAN 从站的扩展模块,挂接在 EM277C 后面 本例使用:数字量模块 EM222-1HH32 68
使用指南 标准网线 连接编程设备与C37-00 连接CAN-1T与CAN从站 7.4.2 网络连接 D C 2 4V D C 2 4V M SF SF L+ DC 24V EM 277C EM222 C AN RUN S T OP PWR-02 C37-00 CAN-1M L1 N 1A 1B L+ M L+ L+ M 1A M L+ 1B M ● ● 安装有CoDeSys的编程设备 PWR-02 C37-00 CAN-1T 注意:如果采用 C35-01、C36-01、C36-02、C37-01 作为主站,则无需 CAN 主站模块,直接通过其 CAN 接口连接 CAN 从站即可。 7.4.3 操作步骤 1、为各设备接通电源 打开电源模块 PWR-02、C37-00、EM277C 及 CAN-1T 的前面板,然后参考“7.4.2 网络连接”为它们 接通电源。 2、连接电缆 参考“7.4.2 网络连接”连接各设备,具体操作如下: 1)使用一条标准网线连接 PC 与 C37-00 2)CAN-1T 主站模块通过总线方式连接至 C37-00 3)使用一条标准网线连接 CAN-1T 主站模块与 EM277C 4)数字量模块 EM222 通过总线方式连接至 EM277C 3、在 CODESYS 中进行 CANopen 组态 1)添加 CANbus 在设备视图中右键点击“Device(CodeSys control from Co-trust)”选择“添加设备”,即可在弹出的对 话框中选择添加 CANbus:供应商选择“<全部供应商>”、现场总线选择“CANBUS”作为 CAN 总线。 2)添加 CAN 主站 69
CTH300-C 系列运动控制器系统手册 在设备视图中选中已经成功添加的“CANBUS”并右键选择“添加设备”,即可在“添加设备”对话框 中添加 CAN 主站:现场总线→CANopen→CANopen 管理器→CANopen_Manager。 3)添加或扫描 CAN 从站 在设备视图中选中已经成功添加的“CANopen_Manager”并右键选择“添加设备”,即可在“添加设 备 ” 对 话 框 中 添 加 CAN 从 站 : 现 场 总 线 → CANopen → 远 程 设 备 → EM277C ; 或 者 右 键 点 击 “CANopen_Manager”选择“扫描设备”,即可将从站设备(EM277C)显示在 CAN 主站(CAN-1T 模块)下方。 4)CANbus 设置 CANbus 选项卡:本例中“网络”设置为 0、“波特率”设置为 1000000。 5)配置 CAN 主站 CANopen_Manager 主站中的 NODE_ID 设为 127。 6)配置 CAN 从站(EM277C) “CANopen 远程设备”选项卡:节点 ID 设为 4、勾选“使能专家设置”。 <备注> 需要将 EM277C 的拨码开关设为 4,具体配置方法可参考《CANopen 用户手册》。 “服务器数据对象”:新建添加 16#2200 的 16#01 参数; “接收 PDO 映射”:在 RPDO1 parameter 中添加如下映射: “发送 PDO 映射”:在 TPDO1 parameter 中添加如下映射: 70
使用指南 <备注> 请参考附录“F.2 配置 CANopen 从站设备”获取更多关于 CANopen 从站配置详情。 4、参考章节“2.3 设置通信”设置 C37-00 与上位机的通信 5、运行、调试与监控 1)选择菜单项“在线”→“登录到...”使应用程序与 C37-00 建立起连接,并进入在线状态。然后,选 择菜单项“调试”→“启动”使 C37-00 中的应用程序开始运行,此时即可对当前工程进行监控和调试 操作。 2)在 EM277C 从站的选项卡“CANopen I/O 映射”(勾选 always update variable)中调试其挂接的模 块,本例选择的是数字量模块 EM222,则通过点亮其输出点 Q0.5,操作如下图: 结果:Bit13 写入 TRUE 后,EM222 模块的 Q0.5 即被点亮。 7.5 基于 CANopen 通信的单轴运动控制 本指南通过一个具体实例来引导您建立一个应用程序,通过本节您将熟悉 C37-00 基于 CANopen 通信 的单轴运动控制功能。 71
CTH300-C 系列运动控制器系统手册 7.5.1 示例组件 组件 功能 安装有 CODESYS V3.5 的 对 CTH300-C 系列运动控制器进行组态、编程和调试 编程设备 装配导轨 用于固定系统中的各模块。 电源模块 PWR-02 提供 CTH300-C 系列运动控制器及其 24 VDC 负载电路。 外部电源 提供 H1A 伺服驱动器工作电源 C37-00 运动控制器 执行用户程序,为总线提供 5 V 电压,并通过以太网接口与其它模块进 行通讯。 CAN 主站模块 CAN-1T 作为 CAN 主站,与 CAN 从站进行通信 H1A 伺服驱动器及电机 本例使用:H1A 伺服驱动器及配套电机 标准网线 连接编程设备与C37-00 连接CAN-1T与H1A伺服驱动器 编码器电缆 连接H1A伺服驱动器与电机 7.5.2 网络连接 注意:C35-01、C36-01、C36-02、C37-01 作为主站时无需 CAN-00 主站模块,直接通过其 CANopen 接口连接 CAN 从站。 7.5.3 操作步骤 1、为各设备接通电源 1)打开 C37-00、电源模块 PWR-02 的前面板,然后按照“7.5.2 网络连接”将 C37-00 连接到 PWR-02。 2)为 H1A 伺服驱动器接通主电源和控制电源。 2、使用电缆连接各设备 72
使用指南 参考“7.5.2 网络连接”连接各设备,具体操作如下: 1)使用标准网线连接 PC 与 C37-00 2)使用标准网线连接 C37-00 与 H1A 伺服驱动器 3)使用编码器电缆连接 H1A 驱动器与电机 3、在 CODESYS 中进行 CANopen 组态 1)添加 CANbus 在设备视图中右键点击“Device(CodeSys control from Co-trust)”选择“添加设备”,即可在弹出的对 话框中选择添加 CANbus 作为 CAN 总线。 2)添加 CAN 主站 在设备视图中右键点击“CANbus”,在弹出的菜单项中选择“添加设备”,即可在“添加设备”对话 框中添加 CAN 主站:现场总线→CANopen→CANopen 管理器→CANopen_Manager。 3)添加或扫描 CAN 从站 在设备视图中右键点击“CANopen_Manager”,在弹出的菜单项中选择“添加设备”,即可在“添加 设备”对话框中添加 CAN 从站:现场总线→CANopen→远程设备→H1A;或者右键点击 CANopen_Manager(CAN-1T)选择“扫描设备”,即可将 CAN 从站(H1A)显示在 CAN 主站(CAN-1T) 下方。 4)添加 CAN 从站(H1A)的驱动 若在第 3)步中添加了 H1A 作为 CAN 从站,那么此处可以为 H1A 添加驱动:在设备视图中选中 CAN 从站(H1A)并点击右键,在弹出的菜单中选择“Add softmotion-DSP402-axis”,即驱动添加成功。 5)配置 CANbus 73
CTH300-C 系列运动控制器系统手册 6)配置 CANOpen 主站 在主站的“CANopen 管理器”中输入 CAN 主站的节点 ID:127 7)配置 CANopen 从站(H1A) 首先,在“CANopen 远程设备”选项卡设置从站的节点 ID(即从站 H1A 的地址),然后勾选“使能专 家设置”。 然后,在“PDO 映射”选项卡中选择需要使用的参数,本例设置如下图所示: 在“接收 PDO 映射”选项卡中添加映射: 在“发送 PDO 映射”选项卡中添加映射: 74
使用指南 在“CANopen I/O 映射”选项卡中勾选“always update variable”。 <备注> 请参考附录“F.2 配置 CANopen 从站设备”获取更多关于 CANopen 从站配置详情。 8)配置 H1A 驱动(SM_Driver_GenericDSP402) SM_Driver_GenericDSP402 的“Softmotion 驱动:基本的”选项卡设置如下: 运行轨迹选择为“Modulo”,Modulo 值设置为 360.0,Velocity ramp type(速度斜坡类型)选择为 Trapezoid (梯形)。 4、参考章节“2.3 设置通信”设置 C37-00 与上位机的通信 5、运行与调试 1)参考《H1A 使用说明书》对当前 H1A 伺服从站进行参数配置 通过 H1A 伺服驱动器的前面板设置控制模式和 CANopen 波特率:P01=1(通信位置控制模式);P11=1 (CANopen 波特率设置为 1000Kbps)。 2)选择菜单项“在线”→“登录...”使应用程序与 C37-00 建立起连接,并进入在线状态;然后,选择 菜单项“调试”→“启动”使 C37-00 中的应用程序开始运行。 75
CTH300-C 系列运动控制器系统手册 3)在 H1A 的“CANopen I/O 映射”选项卡中设置 P97、P290 和 P50。其中 P97 设置电机的运行速度, P290 设置给定的位置大小,P50(通信模式指令插补模式选择)选择电机按 P97 设定的速度运行,还 是按控制器内部速度运行;本例的 P50 设置为 0,即选择按 P97 设定的速度运行。参数配置如下图所示: 设置电机的运行速度 设置给定位置 设为0时,电机按照P97 设定的速度运转 4)在设备视图中双击“SM_Drive_GenericDSP402”,即可在其“Softmotion 驱动”选项卡中监控电 机的运行情况,本例中电机的运行情况如下图所示: 结果:与 H1A 伺服驱动器相连的伺服电机按照 P97 设定的速度(500)执行给定位置 10000。 7.6 EtherCAT 通信实例 本指南通过一个具体实例来引导用户建立一个应用程序,并熟悉 C37-00 使用 EtherCAT 从站模块时的 具体读写操作。 76
使用指南 7.6.1 示例组件 组件 功能 编程设备 PG\\PC 安装有 CODESYS V3.5 的编程设备,对 CTH300-C 系列运动控制器进行组态、 装配导轨 编程和调试 电源模块 PWR-02 用于固定系统中的各模块 提供 CTH300-C 系列运动控制器及其 24 VDC 负载电路 C37-00 运动控制器 执行用户程序,为总线提供 5V 电压,并通过以太网接口与其它模块进行通讯 EtherCAT 主站模块 1 个 CTH300 系列 CPU,C37-00 EtherCAT 从站模块 2 个 ECT-00 扩展 I/O 模块 16 个 CTH300 系列数字量和模拟量 I/O 模块,两个 EtherCAT 从站模块后分别挂 接8个 ● 连接C37-00与编程设备 标准网线 3 根 ● 将C37-00的EtherCAT通信口的OUT接口连接到第一个ECT-00的IN口 ● 将第一个ECT-00的OUT口连接到第二个ECT-00的IN口 7.6.2 网络连接 下图为 EtherCAT 从站模块搭配 CTH300-C 系列 CPU 使用时的典型应用架构: E CT-00 E CT-00 77
CTH300-C 系列运动控制器系统手册 7.6.3 CPU 通信设置 在应用 EtherCAT 从站模块之前,请参照章节 7.6.2 连接 EtherCAT 通信架构并接通电源,然后执行以下 操作来设置 CPU 通信。 1、设置通信 IP 设置通信前,需要将编程设备 PG/PC 的 IP 设置与 C37-00(IP:192.168.0.x)同一个网段,设置方法: 将 PC 机的本地连接属性打开,双击 TCP/IP 协议,将“自动获得 IP 地址”更改为“使用下面的 IP 地址”, 然后在 IP 地址中填写“192.168.0.X”即可,如下图所示。 2、设置 CPU 在 Codesys 的设备视图中双击“Device (Codesys Control from Co-Trust )”打开设备对话框,如下图所 示。在选项卡“通讯设置”中的“网关”下拉菜单中点击“添加网关”按钮,在弹出的“网关”对话框 中输入“名称”、“驱动器”选择“TCP/IP”、“IP 地址”选择“localhost”,最后点击“确定”关闭 对话框,C37-00 即被添加到通讯对话框。 C37-00 添加成功后点击“扫描网络”按钮,可以在本地网络上搜寻可用的设备。若搜索成功,则选中搜 索到的设备并点击“设置活动路径”按钮,该操作会激活通讯通道设置,所有与通讯相关的操作将与该 通道关联。 78
使用指南 <备注> 系统启动时,系统托盘处会出现 CODESYS 相关服务程序(如 、 等),如无特殊要求, 无需对托盘中的服务程序进行操作。 7.6.4 操作步骤 1、为各设备接通电源 1)打开 C37-00、电源模块 PWR-02 的前面板,然后按照“7.6.2 网络连接”将 C37-00 连接到 PWR。 2)为系统接通主电源和控制电源。 2、使用电缆连接各设备 参考“7.6.2 网络连接”连接各设备,具体操作如下: 1)使用标准网线连接 PC 与 C37-00 的 EtherNET 通信口; 2)使用标准网线连接 C37-00 的 EtherCAT 通信 OUT 口与第一个 EtherCAT 从站模块的 IN 口; 3)使用标准网线连接第一个 EtherCAT 从站的 OUT 口与第二个 EtherCAT 从站模块的 IN 口。 3、在 CODESYS 中进行 EtherCAT 组态 双击桌面图标 或在开始菜单中启动 CODESYS 软件,然后执行以下步骤: 1) 安装设备描述文件 79
CTH300-C 系列运动控制器系统手册 安装示例组件中所用 CPU C37-00 和 EtherCAT 从站模块的 COTRUST 设备描述文件 (Co-Trust_C37_V2.3.devdesc.xml 和 Co-Trust_ECAT_SLAVE.V1.2.xml),安装成功后即可在程序系 统中使用 COTRUST 设备,具体安装操作如下: 选择菜单项“工具”→“安装设备”打开如下对话框,在该对话框里可以浏览并安装系统中的设备描述。由 COTRUST 提供的描述文件可通过设置相应的过滤器来选择(注意:必须选择 EtherCAT XML 设备描述 配置文件)。点击“打开”按钮确认选项,随即在“设备库”中添加新设备到设备目录。 以上操作执行完成后,可参考如下步骤进入设备目录查看文件是否正确安装: 选择菜单项“工具”→“选项”→“特性”→“设备管理”→“使能设备库对话框”: 80
使用指南 选择菜单项“工具”→“设备库”打开设备库对话框,如下所示: 在设备库对话框中展开“PLC”→“SoftMotion PLCs”即可看到已经成功安装的 COTRUST 设备“CodeSys Control from Co-Trust”;展开“现场总线”→“EtherCAT”→“从站”即可看到已经成功安装的 EtherCAT 从站 “EtherCAT Slave”。查看完毕,若还需要继续安装设备文件,请在“工具”→“选项”中取消勾选“使能设备库 对话框”即可。 提示 1)如果您还需要使用 COTRUST 的其它设备(CANopen 或其他 EtherCAT 从站设备),那么您还需 要安装如下设备描述文件: CANopen 从站设备配置文件(*.eds):Co-Trust E10.eds、Co-Trust EM277C.eds、Co-Trust H1A.eds; Softmotion 设备配置文件(*.devdesc.xml):H1A EtherCAT Drive(CoE) SoftMotion.devdesc、H1A CANopen Drive SoftMotion.devdesc; 2)请于合信官网下载所需的设备配置文件:http://www.co-trust.com。 2) 新建一个工程 在 CODESYS 主页面选择菜单项“文件”→“新建工程”,然后在弹出的对话框中选择“标准工 程”并设置文件名和存储目录。 执行以上操作并确认后会弹出另一个对话框,在对话框中选择刚添加的 CPU 文件设备(CTH3 C37-000S1)和使用的编程语言,再点击“确定”即可完成工程的创建。 81
CTH300-C 系列运动控制器系统手册 3) 添加 EtherCAT 主站 在打开的工程中,右键点击设备视图中的“Device (CodeSys control from Co-trust)”选择“添加设备”,即 可 在 弹 出 的 对 话 框 中 选 择 添 加 EtherCAT 主 站 : 供 应 商 选 择 “< 全 部 供 应 商 >” 、 现 场 总 线 选 择 “EtherCAT”→“主站”→“EtherCAT Master”。 4) 添加 EtherCAT 从站 在设备视图选中 EtherCAT 主站并点击右键选择“添加设备”,即可在弹出的对话框中选择添加 EtherCAT 从站:供应商选择“<全部供应商>”、现场总线选择“EtherCAT”→“从站”→“ECT-00”,即可将 连接到 C37-00 的 EtherCAT 从站(ECT-00)显示在 EtherCAT 主站(C37-00)下方。 5) 配置 EtherCAT 主站 在“主站”选项卡中设置源地址(MAC):点击“源地址(MAC)”右侧的“浏览”按钮,然后在弹出 的对话框中选择相应的 MAC 地址。 82
使用指南 <备注> 如果环型拓扑支持冗余,则可以勾选“Enable Redundancy”。通过使用这个功能,EtherCAT 网络功能即使在电缆破损时也可以被保存。如果勾选“Enable Redundancy”,必须定义“Redundancy EtherCAT NIC Setting”。 6) 配置 EtherCAT 从站(ECT-00) 在“从站”选项卡中勾选“使能专家设置”,分布式时钟选择 DC“SM-Synchron”。 <备注> 请参考附录“F.3 配置 EtherCAT 从站设备”获取更多关于 EtherCAT 从站配置详情。 5、参考章节“7.6.3 CPU 通信设置”设置 C37-00 与上位机的通信 6、运行与调试 1)选择菜单项“在线”→“登录...”使应用程序与 C37-00 建立连接,并进入在线状态;然后,选择菜 单项“调试”→“启动”使 C37-00 中的应用程序开始运行。 2)对当前工程进行监控和调试操作 在 ECT_00 从站的选项卡“EtherCAT I/O 映射”(勾选 always update variable)中调试其挂接的模块, 以 Digital Output 16 Bits 数字量输入模块为例,点亮其输出点 Q0.5 操作如下: 83
CTH300-C 系列运动控制器系统手册 7.7 基于 EtherCAT 通信的电 子凸轮 本指南通过一个具体实例来引导您建立一个应用程序,通过本节您将熟悉 C37-00 基于 EtherCAT 通信 的电子凸轮控制功能。 7.7.1 示例组件 组件 功能 安装有 CODESYS V3.5 对 CTH300-C 系列运动控制器进行组态、编程和调试 的编程设备 装配导轨 用于固定系统中的各模块。 电源模块 PWR-02 提供 CTH300-C 系列运动控制器及其 24 VDC 负载电路。 外部电源 提供 H1A 伺服驱动器工作电源 C37-00 运动控制器 执行用户程序,为总线提供 5V 电压,并通过以太网接口与其它模块进行通 讯。 H1A 伺服驱动器及电机 本例使用:H1A 伺服驱动器及配套电机 连接编程设备与C37-00 标准网线 连接C37-00与H1A伺服驱动器 H1A伺服驱动器之间的互联 编码器电缆 连接H1A伺服驱动器与电机 84
使用指南 7.7.2 网络连接 7.7.3 操作步骤 1、为各设备接通电源 1)打开 C37-00、电源模块 PWR-02 的前面板,然后按照“7.7.2 网络连接”将 C37-00 连接到 PWR-02。 2)为 H1A 伺服驱动器接通主电源和控制电源。 2、使用电缆连接各设备 参考“7.7.2 网络连接”连接各设备,具体操作如下: 1)使用标准网线连接 PC 与 C37-00 2)使用标准网线连接 C37-00 与 H1A 伺服驱动器 3)使用编码器电缆连接 H1A 驱动器与电机 3、在 CODESYS 中进行 EtherCAT 组态 1)添加 EtherCAT 主站 在设备视图中右键点击“Device(CodeSys control from Co-trust)”选择“添加设备”,即可在弹出的对 话框中选择添加 EtherCAT 主站:供应商选择“<全部供应商>”、现场总线选择“EtherCAT”→“主站” →“EtherCAT Master”。 85
CTH300-C 系列运动控制器系统手册 2)添加或扫描 EtherCAT 从站 在设备视图选中 EtherCAT 主站并点击右键选择“添加设备”,即可在弹出的对话框中选择添加 EtherCAT 从站:供应商选择“<全部供应商>”、现场总线选择“EtherCAT”→“从站”→“H1A”;或者右键点 击 EtherCAT 主站(C37-00)选择“扫描设备”,即可将连接到 C37-00 的 EtherCAT 从站(H1A)显 示在 EtherCAT 主站(C37-00)下方。 3)添加 EtherCAT 从站的驱动 在设备视图中选中 EtherCAT 从站(H1A)并点击右键,在弹出的菜单中选择“Add softmotion- DSP402-axis”,即驱动添加成功。 4)配置 EtherCAT 主站 在“主站”选项卡中设置源地址(MAC):点击“源地址(MAC)”右侧的“浏览”按钮,然后在弹出 的对话框中选择相应的 MAC 地址。 <备注> 如果环型拓扑支持冗余,则可以勾选“Enable Redundancy”。通过使用这个功能,EtherCAT 网络功能即使在电缆破损时也可以被保存。如果勾选“Enable Redundancy”,必须定义“Redundancy EtherCAT NIC Setting”。 5)配置 EtherCAT 从站(H1A) 在“从站”选项卡中勾选“使能专家设置”,分布式时钟选择“DC for synchronization”。 86
使用指南 <备注> 请参考附录“F.3 配置 EtherCAT 从站设备”获取更多关于 EtherCAT 从站配置详情。 6)配置 H1A 驱动(SM_Driver_GenericDSP402) SM_Driver_GenericDSP402 的“Softmotion 驱动:基本的”选项卡设置如下: 运行轨迹选择为“Modulo”,Modulo 值设置为 360.0,Velocity ramp type(速度斜坡类型)选择为 Trapezoid (梯形)。 7)新建 CAM 表 在设备视图展开“Device”→“PLC”,然后右键点击“Application”选择“添加对象”→“电子凸轮 表”,在弹出的对话框中输入表的名称,点击“打开”,则 Cam 表即被创建成功。双击打开刚创建的 Cam 表,将电子凸轮表调整成理想状况,如下所示: 87
CTH300-C 系列运动控制器系统手册 4、编程 88
使用指南 5、参考章节“2.3 设置通信”设置 C37-00 与上位机的通信 6、运行与调试 1)选择菜单项“在线”→“登录...”使应用程序与 C37-00 建立起连接,并进入在线状态;然后,选择 菜单项“调试”→“启动”使 C37-00 中的应用程序开始运行。 2)对当前工程进行监控和调试操作 89
CTH300-C 系列运动控制器系统手册 在设备视图中双击“PLC_PRG(PRG)”打开程序表,依次触发并下载各指令。 在设备视图中双击打开主轴 Master_Axis,Master_Axis 的执行效果如下: 在设备视图中双击打开从轴 Slave_Axis,Slave_Axis 的执行效果如下: 7.7.4 跟踪(Trace) 1、创建跟踪表(Trace) 90




