1. 项目基本信息
Basic Project Information
制药机械、SMART plc ST20、V20变频器、V90伺服电机和驱动、SMARTLINE触摸屏。
2. 问题描述
Problem Description
故障现象:新设备安装完成后首次上电运行, PLC运行正常,用户正常试机操作,大约一分钟后变频器报F72通信故障,监控PLC程序后发现USS通信块故障代码1--驱动器无响应。重新下载程序和复位驱动器故障均无效。客户工程师更换新的PLC后又能正常运行,但是一分钟左右之后再次出现同样问题,连续更换三台ST20 现象都一致。
系统构成:
3. 问题分析
Problem Analysis
1) V20 变频器F72通讯故障后,更换新的PLC后又能正常工作,变频器能正常运行,表明变频器
没有损坏。
2) 由于该典型配置同类型制药机械已经使用了好几百套,并且都在最终用户那边正常运行,因此编程错误的可能性也是很小的。
3) 外围线路存在问题的可能性非常大如接线错误,接地问题,干扰等。
4. 问题处理步骤
Problem Solving Steps
1) 这个柜体第一个重要的问题是底板,通过颜色就能很直观的看出来,它不是铁板,经过
询问后确认这是一块绝缘板。就是说装在这块底板上的设备都是无法通过外壳地线接通的,经过实际观察发现所有变频器均将外壳接地。PLC通过台达电源供电,供电系统均未接地,包括220V端和24V端,见下图:
2) 当接地受到破坏时,会导致设备外壳无法通过地线导向大地,电压积累在设备外壳或者
内部,严重者会损坏设备本身。用万用表测量PLC与变频器间有64VAC的电势差,对其它设备测量,电势差小于2V。64V AC电压已经很高了,高到足以损坏设备本身,将PLC和24V电源都接地之后,该压差消失,且再拆去接地线后也无法测量到压差,说明已通过接地线导向大地。
3) 检查USS通讯电缆后发现,变频器V20侧只接了P和N两个端子,根据手册要求,必须将V20的 5号端子 0V与PLC M端连接(等电位连接线),避免共模压差损坏通讯口,而该线在当前设备上是没有的,正确的连接方法如下图:
等电位连接线
4) 根据以上现象,怀疑PLC通讯口已经损坏,查看带RS485通讯口电路板,发现RS485通讯口背面的电阻已经烧黑,确认PLC通信口损坏。拆开另外几个损坏的PLC发现也是同样的现象。
损坏的RS485接口电阻
5. 处理结果
Final Result
问题已经找到,原因是没有接地和没有连接等电位连接线。对于问题产生的原因是由于某种因素导致PLC与变频器之间存在一个64V AC的压差,(限于万用表测量交流电压的原理,此点的高频和瞬时强电压无法测量,而此类EMC问题对于电气设备都属于严重威胁)由于没有共地,导致该电压无法通过地线导向大地,更因为没有等电位线,导致只能通过通讯线流动,造成了 PLC通讯口烧毁。
用户认可西门子提出的解释和说明,并且表示会在以后的使用过程中增加等电位线 和解决接地问题。目前该设备已正常运行。
电阻都烧黑了,我不是功率器件啊,我没有你想的那么坚强, S7-200 SMART 喃喃地说。
得到准确ms级的代码执行周期,做自己的多功能定时器块
//************************
//****得到代码执行周期*******
//************************
1、OB1的临时变量区提供了OB1_PREV_CYCLE INT 上一次扫描的运行时间(ms),,长时间的累积会有不少的误差。为什么呢,因为系统提供给你的数值可能是有舍弃小数后值。而且提供的是用户程序运行时间,是否包含接口扫描、通讯、映射等时间不得而知。你可以通过累积OB1_PREV_CYCLE 和sfc64的后台时间比较就知道,两个的差别。
我的方法是通过读取系统时钟,这样无累积误差,(SFC64提供正向增长的双字运行时间)
//****获得系统时钟和程序执行周期***
CALL SFC 64 (
RET_VAL := LD 96);
L LD 96;
L #sysT;
-D ;
JPZ posA; //计数满了,就少计一个周期,影响可以忽略
L #cycT;
posA: T #cycT;
L LD 96;
T #sysT;
//-------------------
消除了系统提供时钟的累积误差。误差最大一个执行周期(3~10ms);
//***************************
//*******多功能定时器********
//***************************
嵌入程序的定时器,是实现功能块封装的重要部分,实现方便的移植
系统提供的IEC定时器,复位比较麻烦,必须再次执行;
自制FB功能块可同时方便实现以下几个功能
1、开关量滤波功能;延时接通延时断开,也可处理有干扰波动值阀值比较;
2、Ton定时器;(TofSet=0)
3、Tof定时器;(TonSet=0)
定时精度最小1ms,实际精度是一个周期;
定时范围2,147,483,647ms(596小时);
//--以下是写的FB块,测试用了好长时间,也还能精简,抛砖引玉;欢迎指教;
//----
//符号注释:开关量滤波,单位ms;
//计数到后, tonAct(DINT)/tofAct(DINT)不再递增。设定值小于等于0,输出同步输入。
//设定时间=set*ration,单位ms。电平使能,复位结束后,使能还在则重新计时;
VAR_INPUT
TonSet : INT ; //设定延时启动值,默认为0无延时;DIW0
TofSet : INT ; //设定延时断开值,默认为0无延时;DIW2
Ratio : INT := 100; //设定值倍率1=1ms(默认100ms)DIW4
CycT : INT ; //OB1上次扫描周期,单位ms,DIW6
Rst : BOOL ; //复位计时器内部保存值和输出,DIX8.0
En : BOOL ; //需要滤波的DI,DIX8.1
END_VAR
VAR_OUTPUT
OK : BOOL ; //滤波输出,DIX10.0
END_VAR
VAR
tonAct : DINT ; //DID12
tofAct : DINT ; //DID16
END_VAR
//*************************************
BEGIN SET ;
L l#0;
A #Rst;
JCN ton;
R #OK;
T #tonAct;
T #tofAct;
BE ;
ton: A #En;
JCN tof;
T #tofAct;
A #OK;
BEc ;
L #Ratio;
L #TonSet;
*I ; //不要用*D,如果设定错误成负数,会错误被解释成正的大值;
L #tonAct;
<=D ;
S #OK;
BEC ;
L #CycT;
+D ;
T #tonAct;
BE ;
tof: T #tonAct;
AN #OK;
BEc ;
L #Ratio;
L #TofSet;
*i ; //不要用*D,如果设定错误成负数,会错误被解释成正的大值;
L #tofAct;
<=D ;
R #OK;
BEC ;
L #CycT;
+D ;
T #tofAct;
BE ;
END_FUNCTION_BLOCK
(责任编辑:admin) |