编程经验
- 自加或自减前面要有沿信号。
- PLC梯形图中停止或急停按钮可以常开 -| |-,而在外部的接线中使用常闭,如因接触不良或线路故障,可自动急停。
- 一定要看示例程序。
- 当一个子程序在一个扫描周期内多次调用时,在子程序中不能使用沿信号/定时器/计数器。
- INT 表示有符号的整数。WORD 表示无符号整数。
- 字节不能为负数,但字和双字可以。
- 指针在子程序中,只能作为IN参数。
- smart 200 模拟量采集满量程范围27648单极。4-20ma 5530-27648。 s7-200 为32000。4-20ma 6400-32000。
- 模拟量的选择,优先选用电流型,现场实践证明,电流型比电压型抗干扰能力高80%。
- 优先选用模拟量类型去调控第三方控制器件,因为模拟量的响应速度要远远大于通信的响应速度。
- 对于使用起保停编程法写的程序。启动按钮需要使用沿信号。电路中使用自复位按钮,如果按钮出现物理损坏,按钮不能自动复位,在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. 动作执行程序编程
安全、互锁、保护
- 编写紧急停止、停止、限位部分的程序,防止调试的时候,设备不能停下来,或者造成机械设备的损坏。 首先要保证安全,想停止的时候,能停下来,其次才能进行其他部分程序的编写,一套没有安全保护机制的程序不是完善、完整的程序。
- 进行手动部分程序的编写,方便机械部分调试的顺利进行。对于正反转的控制,不仅外部接线要进行电气的互锁,而且程序里面也要加上互锁部分。 对于SET置位指令,要考虑是否用了锁存寄存器(断电保持型),在上电初始化的时候是否加上复位RST,以防设备突然启动,或者动作不按照预定动作执行。
- 对于高速脉冲输出指令等使用,要先进行脉冲频率、脉冲数量、加减速时间等参数的赋值,然后再启动高速脉冲指令。
- 进行自动部分程序的编写,当手动部分的程序编写完善之后,自动部分的程序可谓是水到渠成。
5. 整体程序优化减轻PLC运行负荷,精简程序
PLC扫描周期的时间长短,对程序能否顺畅执行,起着至关重要的作用,在输出响应要求高的场合更能体现出来。 总体来说PLC程序步骤越多,PLC的扫描周期时间越长,因此就需要把整个程序进行优化。 把程序按功能逻辑优化成若干个子程序,基本数据的运算,手动部分的操作,配方的上传下载,在执行自动程序的时候,以上程序并不是必须要执行的,因此可以把他们切除掉。 特别说明 指令的扫描时间和指令的执行时间不是一个概念,只要指令在主程序里面,PLC都会去扫描他们,具体执行与否是要看指令前面是否导通、使能。 譬如,当M8.0导通的时候,PLC会执行后面的四条浮点除法运算指令。当M8.0不导通的时候,PLC则不会执行后面的指令,但还是会去扫描他们,并不会跳转下去执行别的指令,当程序里面这种状况多的时候,还是会延长扫描周期的时间。 所以,整个程序就有了化繁为简的优化空间。 初始化的参数,因为只执行一次,所以放在一个子程序里面,用作上电初始化。