西门子6ES7511-1UK01-0AB0现货供应
缺省的情况下,PLC的逻辑地与供电系统M端以及PE相通,在接地良好且有等电位连接的情况下,各个分散的设备之间电位相同,便于互连。但是如果接地不好,例如共模干扰或其他干扰通过地线传导,这样干扰将会影响到PLC的逻辑地的点位,使之不能提供一个参考点位,造成CPU数据的混乱,从而使CPU进入故障模式。这种情况下,将PE与PLC的逻辑地分开及所说的浮地(CPU31X不能分开),将会避免干扰进入CPU的数据总线,但是在多个PLC连接时要注意之间的点位差是否在允许的范围内。
另外一种情况也需要注意,例如24V的电源不但给CPU供电,还给一些中间继电器供电,一些情况下,线圈在断开后释放能量,在电源回路上产生的高电压将影响到CPU的逻辑地,从图1种可以看到,高电压干扰直接影响到逻辑地,即使将PE与PLC的逻辑地分开也没有多少作用,因为与PE没有关系,有没有干扰可以使用示波器直接连接PLC的电源侧进行测量,如果有干扰,可以将CPU的电源与继电器控制回路分开,也可以使用二极管作为释放高电压,在西门子的手册可以找到这些资料,图2为使用二极管和齐纳二极管连接的释放回路,这些保护回路是对触点的保护,使用齐纳二极管也可以起到钳制电压的作用。
希望大家通过这个故事不仅可以解决与此相同故障,还能够掌握一些解决干扰的问题的思路和方法。
为避免发生某种错误时CPU进入停机,可以在CPU中建立一个对应的空的组织块。用户可以利用OB中的变量声明表提供的信息来判别错误的类型。
根据S7 CPU检测到并且用户可以通过组织块对其进行处理的错误分为异步错误和同步错误。
异步错误是与PLC的硬件或操作系统密切相关的错误,与程序执行无关。异步错误的后果一般都比较严重。异步错误对应的组织块为OB70~OB73和OB80~OB87,有的优先级。操作系统检测到一个异步错误时,将启动相应的OB。
OB执行时出现故障S7-300 CPU的操作系统调用OB80。这样的故障包括循环时间超出、执行OB时应答故障、向前移动时间以致于跃过了OB的启动的时间、CLR后恢复RUN方式。
如果当循环中断OB仍在执行前一次调用时,该OB块的启动事件发生,操作系统调用OB80。如果OB80未编程,CPU变为STOP方式,可以使用SFC39至42或延时和在使用时间B。
如果在同一个稍描周期中由于扫描时间超出OB80被调用两次,CPU就变为STOP方式,可以通过在程序中适当的位置调用SFC43“RE_TRIGR"来避免这种情况。
打开OB80可以从OB80的临时变量中得到故障信息,见图7-14所示
变量 类型 描述
OB80_EV_CLASS BYTE 事件级别和标识:B#16#35
OB80_FLT_ID BYTE 故障代码
OB80_PRIORITY BYTE 优先级:在RUN方式时OB80以优先级26运行,OB请求缓冲区溢出时以优先级28运行
OB80_OB_NUMBR BYTE OB号
OB80_RESERVED_1 BYTE 保留
OB80_RESERVED_2 BYTE 保留
OB80_ERROR_INFO WORD 故障信息:根据故障代码
OB80_ERR_EV_CLASS BYTE 引起故障的启动事件的事件级别
OB80_ERR_EV_NUM BYTE 引起故障的启动事件的事件号
OB80_OB_PRIORITY BYTE 故障信息:根据故障代码
OB80_OB_NUM BYTE 故障信息:根据故障代码
OB80_DATE_TIME DATE_AND_TIME OB被调用时的日期和时间4
与电源(仅对S7-400)或后备电池有关的故障事件发生时,S7-300 CPU的操作系统调用OB81,表7-7为OB81的变量申明表。
如果OB81未编程,CPU并不转换为STOP方式。可以使用SFC39至42来禁用、延时或再使用电源故障(OB81)。
OB81_EV_CLASS BYTE 事件级别和标识:B#16#38,离去事件;B#16#39,到来事件
OB81_FLT_ID BYTE 故障代码
OB81_PRIORITY BYTE 优先级:可通过STEP 7选择(硬件组态)
OB81_OB_NUMBR BYTE OB号
OB81_RESERVED_1 BYTE 保留
OB81_RESERVED_2 BYTE 保留
OB81_MDL_ADDR INT 位0至2:机架号;位3:0=备用CPU,1=主站CPU;位4至7:1111
OB81_RESERVED_3 BYTE 仅与部分故障代码有关
OB81_RESERVED_4 BYTE
OB81_RESERVED_5 BYTE
OB81_RESERVED_6 BYTE
OB81_DATE_TIME DATE_AND_TIME OB被调用时的日期和时间如果模块具有诊断能力又使能了诊断中断,当它检测到错误时,它输出一个诊断中断请求给CPU,以及错误消失时,操作系统都会调用OB82。当一个诊断中断被触发时,有问题的模块自动地在诊断中断OB的起动信息和诊断缓冲区中存入4个字节的诊断数据和模块的起始地址。可以用SFC39至42来禁用、延时或再使用诊断中断(OB82),表7-8描述了诊断中断OB82的临时变量。
OB82_EV_CLASS BYTE 事件级别和标识:B#16#38,离去事件;B#16#39,到来事件
OB82_FLT_ID BYTE 故障代码
OB82_PRIORITY BYTE 优先级:可通过SETP 7选择(硬件组态)
OB82_OB_NUMBR BYTE OB号
OB82_RESERVED_1 BYTE 备用
OB82_IO_FLAG BYTE 输入模板:B#16#54;输出模板:B#16#55
OB82_MDL_ADDR WORD 故障发生处模板的逻辑起始地址
OB82_MDL_DEFECT BOOL 模板
OB82_INT_FAULT BOOL 内部
OB82_EXT_FAULT BOOL 外部
OB82_PNT_INFO BOOL 通道
OB82_EXT_VOLTAGE BOOL 外部电压
OB82_FLD_CONNCTR BOOL 前连接器未插入
OB82_NO_CONFIG BOOL 模板未组态
OB82_CONFIG_ERR BOOL 模板参数不正确
OB82_MDL_TYPE BYTE 位0至3:模板级别;位4:通道信息存在;位5:用户信息存在;位6:来自替代的诊断中断;位7:备用
OB82_SUB_MDL_ERR BOOL 子模板丢失或有
OB82_COMM_FAULT BOOL 通题
OB82_MDL_STOP BOOL 操作方式(0:RUN,1:STOP)
OB82_WTCH_DOG_FLT BOOL 看门狗定时器响应
OB82_INT_PS_FLT BOOL 内部电源
OB82_PRIM_BATT_FLT BOOL 电池
OB82_BCKUP_BATT_FLT BOOL 全部后备电池
OB82_RESERVED_2 BOOL 备用
OB82_RACK_FLT BOOL 扩展机架
OB82_PROC_FLT BOOL 处理器
OB82_EPROM_FLT BOOL EPROM
OB82_RAM_FLT BOOL RAM故
OB82_ADU_FLT BOOL ADC/DAC
OB82_FUSE_FLT BOOL 熔断器熔断
OB82_HW_INTR_FLT BOOL 硬件中断丢失
OB82_RESERVED_3 BOOL 备用
OB82_DATE_TIME DATE_AND_TIME
近项目用到S7-1500,网上找了FIFO队列的实现,有STL语言写的,但STL着实不方便阅读,就自己用SCL搞了一个,把队列的基本功能封装成块,用着还行,跟大家分享一下吧。若有缺陷也请大家指出。
使用方法:操作都是上升沿触发;Push触发前请保证数据已写到i_push_data;输出的队首元素Front是实时状态,Pop触发前按需取用。
1.FB封装:左边是队列操作,右边输出队列状态及队首元素
2.FB接口参数:队列的数据存在static区queue里面
3.FB源码
3.1 入队、出队
3.2 基本属性
3.3 清零、复位