西门子PLC中使用SCL语言编程的技巧_第1页
西门子PLC中使用SCL语言编程的技巧_第2页
西门子PLC中使用SCL语言编程的技巧_第3页
西门子PLC中使用SCL语言编程的技巧_第4页
西门子PLC中使用SCL语言编程的技巧_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在西门子在西门子 PLCPLC 中使用中使用 SCLSCL 语言编程的技巧语言编程的技巧 前言 两年半前我就在工控网上发表了有关 SCL 编程的知识 但发表完 后 即使我自己都从没有把任何使用 SCL 编写的程序用到实际控制中 当时的感觉是使用 SCL 编程到处受限 没有 STL 语言灵活和强大 直到最近使用施耐德的 Unity 软件编程 并使用这种已经国际标准化的文本语言 等同于西 门子的 SCL 语言 才体会到它的优点 程序容易阅读 便于诊断和维护 程序容易在不同厂家之间的 PLC 之间转换 西门子的 STL 语言是强大 但难于阅读 编写程序也需要异常小心 其最强大的可能是它的寄存器 寻址 类似于一些计算机高级语言中的地址指针 SCL 没有这个功能 那就多费一些程序代码来实现同样的功能 程序是否优秀更应该看重程序的架构和提高程序生产效率的标准化 好的 PLC 程序不应该只有自己明白 而是让更 多的人明白 在西门子 PLC 中使用 SCL 语言的场合一般是编写标准功能块 FB 其编程方式和西门子的其他编程语 言 如梯形图 Lad 语句表 STL 是完全不同的 同时为了实现程序的国际标准化 即为了方便的将程序代码移植到 不同厂家的 PLC 系统上 尽量不要在 SCL 中使用西门子独有的功能块 1 在 FB 块中使用结构 编写 FB 块的准则 就是其使用的内部变量尽量与外部隔离 除了像 PLC 的新启动 重启动 标志 以及一些方波 脉冲波等全局变量可以在 FB 块中使用外 其他的任何全局变量都不应该在 FB 内部使用 即 使是自定义结构也应该在 FB 中单独定义 在 FB 块中使用结构应该在静态类型变量中定义 如下 VAR Static Variables IM STRUCT Data structure of Internal Flags H1 AFCountImp BOOL False Aux Flag Counter Impulse H1 CountImp BOOL False Counter Impulse H1 ELCountMV BOOL False Endless Counter Maximum Value END STRUCT other data structure END VAR 在使用这些结构时 可以按照如下方式 IM H1 CountImp Imp 2 在 SCL 中替代 Set Reset 指令的方法 SCL 中不存在 Set Reset 指令 或者说也没有必要使用 在 SCL 中 不 使用排他条件 Else 的条件语句就是一个 Set Reset 指令 如下编程 IF THEN Variable name 1 END IF 其等同于 S 若加上 Else 条件 如下 IF THEN Variable name 1 ELSE Variable name 0 END IF 则等同于 一条完整的包含置位和复位的语句可以使用如下方式编程 IF THEN Variable name 1 END IF IF THEN Variable name 0 END IF 其等效于 SR 指令 若将上面的两个 条件语句的先后次序颠倒一下 则等效于 RS 指令 3 简化程序指令 尽量使用赋值语句替代那些不用于 SR RS 指令的 BOOL 型赋值条件语句 如下 IF fnAdd ELSE pus1 false END IF 其等效于 pus1 fnAdd ELSE pus1 value2 END IF 其等效于 pus1 SEL G fnAdd 使用该函数时注意两点 参数名不能省略 当选择条件 G 为 TRUE 时 选择后 一个参数值 IN1 为 FALSE 时 选择前一个参数值 IN0 这点与计算机 C 语言等正好相反 XOR 指令有着比 AND 和 OR 更为复杂的表达 能使用 XOR 的地方应该尽量使用 IF condition1 AND NOT condition2 OR condition2 AND NOT condition1 THEN Result true ELSE Result false END IF 其等效于 Result condition1 XOR condition2 XOR 功能就是两条件不同输出 TRUE 相同输出 FALSE 4 脉冲沿检测功能使用以下两条语句替代脉冲上升沿检测函数 譬如检测 button Input 上升沿的代码如下 Puls button Input button Last button Input 同样的下降沿脉冲检测如下 Puls NOT button Input button Last button Input 5 编写脉冲发生器 波峰持续时间仅为一个 PLC 扫描周期的波形称为脉冲波 而波峰持续时间大于或等于两个 PLC 扫描周期的波形 称为方波 脉冲波可用于计数 定时 方波可用于控制信号灯的闪烁输出 可以在西门子 PLC 的硬件配置中配置一个字节的各种时间 的方波 波峰时间和波谷时间为 1 1 假设 FP 1Sec 为这个字节中 1 秒的方波 则 间隔 1 秒的脉冲波 Impls 1Sec 如下编程 Impls 1Sec FP 1Sec AND NOT Impls 1Sec Aux Impls 1Sec Aux FP 1Sec 间隔 10 秒 的脉冲波 Impls 10Sec 如下编程 IF Impls 10Sec THEN Count Actual 0 Impls 10Sec 0 ELSE IF Impls 1Sec THEN Count Actual Count Actual 1 END IF Impls 10Sec Count Actual 10 END IF Count Actual 的初始值为 0 同时当系统新启动时 也需将其设为零 间隔更长时间的脉冲波编程都可以按照上面的方式编程 6 尽量使用编程计数功能来替代定时器功能 这样使程序更可靠和易于阅读假设 Input Condition 为输入 Output Delay 为通过定 时处理后的输出 Timer Setpoint 为时间设定点 Timer Actual 为当前时间计数的实际值 Impls 1Sec 为系统编程产生的 1 秒 脉冲 在输入条件满足的情况下 延时输出的定时器 IF NOT Input Condition THEN Timer Actual 0 Output Delay 0 ELSE IF Impls 1Sec AND NOT Output Delay THEN Timer Actual Timer Actual 1 END IF Output Delay Timer Actual Timer Setpoint END IF 有记忆的延时输出定时器 即在延时过程中 若输入条件终止 不影响延时 这种 定时器必须使用其它的信号复位 IF Input Condition THEN Output Aux 1 END IF IF NOT Output Aux THEN Timer Actual 0 Output Delay 0 ELSE IF Impls 1Sec AND NOT Output Delay THEN Timer Actual Timer Actual 1 END IF Output Delay Timer Actual Timer Setpoint END IF 若想终止 Output Delay 的输出 必须在后面追加一条条件语句 用于复位 Output Aux 立即输出 延时断开的定时器 IF Input Condition THEN Timer Actual 0 Output Aux 0 Output Delay 1 立即输 出 ELSE IF Impls 1Sec AND NOT Output Aux THEN Timer Actual Timer Actual 1 END IF Output Aux Timer Actual Timer Setpoint END IF IF Output Aux THEN Output Delay 0 延时断开 END IF 在检测到一个上升沿脉冲后 立即输出 并开始计时 在 时间到达后断开 IF Input Condition THEN Output Aux 1 END IF IF NOT Output Aux THEN Timer Actual 0 Timer Arrived 0 ELSE IF NOT Timer Arrived AND Impls 1Sec THEN Timer Actual Timer Actual 1 END IF Timer Arrived Timer Actual Timer Setpoint END IF IF Timer Arrived THEN Output Aux 0 END IF Output Delay Output Aux 通过以上的编程方式可以实现任何定时器功能 而代码却可以为不同的 PLC 系统所使用 7 使用编程计数功能来替代计数器在 SCL 语言中使用计数功能是最为简单的 其关键是必须首先对输入进行脉冲检测假设 Input Imp 为输入脉冲 CountImp 为输入脉冲检测 Counter 为计数值 Factor 为计数因子 更详细点就是每来一次脉冲 计数值增 加多少 Create Impulse Impulse Evaluation CountImp Input Imp AND NOT CountImp Old CountImp Old Input Imp Counter IF CountImp THEN Counter Counter Factor END IF 一个完整的 计数程序应该还有计数器复位功能以及计数值上限检测条件 以防止计数值溢出 8 新故障 新警告的检测 一个完整的 FB 块应该能够检测故障 警告 以及新故障 新警告 假设 Input1 Input2 Inputn 对应故 障的输入 有信号表示 OK Fault1 Fault2 Faultn 对应故障位 NFault1 NFault2 NFaultn 对应新故障位 Flt 和 NFlt 分别 对应综合的故障和新故障 Ackn 对应故障应答输入 为常开点 Mute 对应新故障消除输入 或者称为蜂鸣器沉寂 为常开点 Fault1 NOT Input1 OR Fault1 AND NOT Ackn NFault1 Fault1 AND Mute OR NFault1 Fault2 NOT Input2 OR Fault2 AND NOT Ackn NFault2 Fault2 AND Mute OR NFault2 Flt Fault1 OR Fault2 OR Faultn NFlt Fault1 AND NOT NFault1 OR Fault2 AND NOT NFault2 OR Faultn AND NOT NFaultn NFlt 就是最终的新故障输出指示 新警告的检测与之类似 9 字中取位 字中取位有两种方式 一种是通过西门子所特有的字取位方式实现 一种是通过计算机编程的标准方式实现 假设 Input Word 为输入参数 Word 类型 W0 W1 W15 为位变量 通过西门子的 M 变量实现 Temp Aux MW 10 MW 10 Input Word W0 M 11 0 W1 M 11 1 W2 M 11 2 W3 M 11 3 W4 M 11 4 W5 M 11 5 W6 M 11 6 W7 M 11 7 W8 M 10 0 W9 M 10 1 W10 M 10 2 W11 M 10 3 W12 M 10 4 W13 M 10 5 W14 M 10 6 W15 M 10 7 MW 10 Temp Aux 通过标准编程实现 w0 Input Word w1 Input Word w2 Input Word w3 Input Word w4 Input Word w5 Input Word w6 Input Word w7 Input Word w8 Input Word w9 Input Word w10 Input Word w11 Input Word w12 Input Word w13 Input Word w14 Input Word w15 Input Word 使用方式 1 会更加简单和容易理解一些 但方式 2 具有更加宽广的应用场合 更加标准化 即使是当今的计算机编程在取位操作时也 类似于上面的编程 字取位的场合 一般用于总线数据 譬如变频器的状态数据 则可能是字 整数 此时就需要用到上面的编程 10 将位组合成字 相当于 字中取位 的反向操作 这也有两种方法 一种方法是使用 M 变量 类似于 字中取位 的方式 另 一种也是标准编程 假设 Output Word 为输出参数 Word 类型 W0 W1 W15 为位变量 通过西门子的 M 变量实现 Temp Aux MW 10 M 11 0 W0 M 11 1 W1 M 11 2 W2 M 11 3 W3 M 11 4 W4 M 11 5 W5 M 11 6 W6 M 11 7 W7 M 10 0 W8 M 10 1 W9 M 10 2 W10 M 10 3 W11 M 10 4 W12 M 10 5 W13 M 10 6 W14 M 10 7 W15 Output Word MW 10 MW 10 Temp Aux 通过标准编程实现 IF W0 THEN Output Word Output Word OR 16 1 ELSE Output Word Output Word AND NOT 16 1 END IF IF W1 THEN Output Word Output Word OR 16 2 ELSE Output Word Output Word AND NOT 16 2 END IF IF W2 THEN Output Word Output Word OR 16 4 ELSE Output Word Output Word AND NOT 16 4 END IF IF W3 THEN Output Word Output Word OR 16 8 ELSE Output Word Output Word AND NOT 16 8 END IF IF W4 THEN Output Word Output Word OR 16 10 ELSE Output Word Output Word AND NOT 16 10 END IF IF W5 THEN Output Word Output Word OR 16 20 ELSE Output Word Output Word AND NOT 16 20 END IF IF W6 THEN Output Word Output Word OR 16 40 ELSE Output Word Output Word AND NOT 16 40 END IF IF W7 THEN Output Word Output Word OR 16 80 ELSE Output Word Output Word AND NOT 16 80 END IF IF W8 THEN Output Word Output Word OR 16 100 ELSE Output Word Output Word AND NOT 16 100 END IF IF W9 THEN Output Word Output Word OR 16 200 ELSE Output Word Output Word AND NOT 16 200 END IF IF W10 THEN Output Word Output Word OR 16 400 ELSE Output Word Output Word AND NOT 16 400 END IF IF W11 THEN Output Word Output W

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论