Featured image of post 西门子S7-200(Smart)

西门子S7-200(Smart)

一些编程经验

编程经验

  1. 自加或自减前面要有沿信号。
  1. PLC梯形图中停止或急停按钮可以常开 -| |-,而在外部的接线中使用常闭,如因接触不良或线路故障,可自动急停。
  1. 一定要看示例程序。
  1. 当一个子程序在一个扫描周期内多次调用时,在子程序中不能使用沿信号/定时器/计数器。
  1. INT 表示有符号的整数。WORD 表示无符号整数。
  1. 字节不能为负数,但字和双字可以。
  1. 指针在子程序中,只能作为IN参数。
  1. smart 200 模拟量采集满量程范围27648单极。4-20ma 5530-27648。 s7-200 为32000。4-20ma 6400-32000。
  1. 模拟量的选择,优先选用电流型,现场实践证明,电流型比电压型抗干扰能力高80%。
  1. 优先选用模拟量类型去调控第三方控制器件,因为模拟量的响应速度要远远大于通信的响应速度。
  1. 对于使用起保停编程法写的程序。启动按钮需要使用沿信号。电路中使用自复位按钮,如果按钮出现物理损坏,按钮不能自动复位,在PLC中使用沿信号可以保证按钮只接通一次。

编程规范

1. I/O分配

合理的I/O分配是程序稳定的坚实基础
把功能一样的输入、输出归结在一起。
这样做方便程序编写,查找方便,外部接线也不容易接错。
如果点数允许的情况下,预先空出高速计数和脉冲输出(Q0.0、Q0.1 和 Q0.3)的输入输出点。以备工艺上的变更。
急停按钮,停止按钮,前进、后退、上升、下降这些极限限位,推荐外部接开关的常闭触点,程序里面用常开触点,这样的好处是,执行机构不会因为开关失灵,而造成机械设备损伤等意外。

2. 内存元件规划

内存软元件规划
稳定的程序离不开良好的软元件规划
同样的工艺,有的程序看起来错综复杂,没有头绪,而有的程序看起来清爽无比,一目了然,这就是内存软元件合理规划的结果。

VB0-VB19分配给读取系统时间相关以及类型转换。
VB20-VB27分配给写入统时间。
VB50-VB90分配给写入错误代码。
M0.0-M0.7 分配给系统全局标志位。
m3.0-m5.0 分配给Modbus通讯选择。
m27.0-m31.7 分配给Modbus通讯标志位。
做到同区域连续使用,切勿乱序使用。
需要运算的以偶数开头,用浮点数运算,这样既能提高运算精度,又能避免地址冲突和叠加。
因为整数、双整数的除法运算存在余数问题,需要占用额外的寄存器存放余数,使用浮点运算就能避免这个问题。
在多轴控制系统中,建议每轴的运算存储寄存器也要区别开。
在写程序时先规划地址,再写程序。并为地址写好注释。
程序符号命名规则如下表。

功能 规则 举例
手自动切换 *_ha b1_ha
手动启停 *_on_off b1_on_off
报警 alert_ * alert_dyw
警告 warn_ * warn_dyw
真实值 real_* real_yw
原始值 ori_* ori_yw
上限 *_upper yw_upper
下限 *_lower yw_lower
某和 sum_* sum_yw
开始时 *_start_hour b1_start_hour
开始分 *_start_mui b1_start_mui
结束时 *_stop_hour b1_stop_hour
结束分 *_stop_mui b1_stop_mui
运行时间 *_run_time b1_run_time
间隔时间 *_spac_time b1_spac_time
标志位 *_flag b1_on_flag
模式 *_mode b1_mode
临时值 temp_* temp_yw
从站号 slave_* slave_b1
类型选择 *_type b1_type
选用 select_* select_b1
设置值 Set* SetYear
读写地址 *_addr b1_addr
状态记录 *_status b1_status
周期 *_cycle b1_cycle
清除 clear_* clear_yw
平均值 avg_* avg_yw
错误 *_err b1_err

内存规划就象仓库划分区域一样,不同的区域存放不同的数据,不同的用途,划分不同的区域,做到有迹可循。

3. 参数计算部分编程

先乘后除,提高计算精度。
建议所有的数据运算全部使用浮点运算,这样触摸屏上的参数显示和设置用统一的格式32位浮点数。
触摸屏上的显示参数控件和设置参数控件用颜色加以区分,这样不会误导操作人员,也会避免不必要的麻烦。
例如灰底黑框为显示控件,白底黑框为输入控件。
做四则运算的时候,先乘后除,提高计算精度。运算公式,先进行精简,精简之后再拿到PLC里面做程序。
减少除法,对于比较简单的除法,可以用乘以倒数的形式。比如除以a/2,可以写成a*0.5。
对于复杂的运算公式,鉴于PLC的梯形图实现起来不直观,可以放到触摸屏脚本里面实现,计算完成之后,把结果再回传到PLC里面。
PLC程序里面先进行数据运算,运算完成之后,再拿运算结果进行比较,或者执行其它的动作输出。

4. 动作执行程序编程

安全、互锁、保护

  1. 编写紧急停止、停止、限位部分的程序,防止调试的时候,设备不能停下来,或者造成机械设备的损坏。
    首先要保证安全,想停止的时候,能停下来,其次才能进行其他部分程序的编写,一套没有安全保护机制的程序不是完善、完整的程序。
  1. 进行手动部分程序的编写,方便机械部分调试的顺利进行。对于正反转的控制,不仅外部接线要进行电气的互锁,而且程序里面也要加上互锁部分。 对于SET置位指令,要考虑是否用了锁存寄存器(断电保持型),在上电初始化的时候是否加上复位RST,以防设备突然启动,或者动作不按照预定动作执行。
  1. 对于高速脉冲输出指令等使用,要先进行脉冲频率、脉冲数量、加减速时间等参数的赋值,然后再启动高速脉冲指令。
  1. 进行自动部分程序的编写,当手动部分的程序编写完善之后,自动部分的程序可谓是水到渠成。

5. 整体程序优化减轻PLC运行负荷,精简程序

PLC扫描周期的时间长短,对程序能否顺畅执行,起着至关重要的作用,在输出响应要求高的场合更能体现出来。
总体来说PLC程序步骤越多,PLC的扫描周期时间越长,因此就需要把整个程序进行优化。
把程序按功能逻辑优化成若干个子程序,基本数据的运算,手动部分的操作,配方的上传下载,在执行自动程序的时候,以上程序并不是必须要执行的,因此可以把他们切除掉。
特别说明
指令的扫描时间和指令的执行时间不是一个概念,只要指令在主程序里面,PLC都会去扫描他们,具体执行与否是要看指令前面是否导通、使能。
譬如,当M8.0导通的时候,PLC会执行后面的四条浮点除法运算指令。当M8.0不导通的时候,PLC则不会执行后面的指令,但还是会去扫描他们,并不会跳转下去执行别的指令,当程序里面这种状况多的时候,还是会延长扫描周期的时间。
所以,整个程序就有了化繁为简的优化空间。
初始化的参数,因为只执行一次,所以放在一个子程序里面,用作上电初始化。

使用 Hugo 构建
主题 StackJimmy 设计