技术论坛

 怎么检测WinCC与PLC的通信状态

返回主题列表
作者 主题
道草
游民

经验值:83
发帖数:43
精华帖:0
楼主    2011-03-15 11:42:24
主题:怎么检测WinCC与PLC的通信状态
怎么检测WinCC与PLC的通信状态

问:怎么检测WinCC与PLC的通信状态,当通信断开时在报警中显示“通信中断”,通信再次连接正常时在报警中显示“通信连接”,并计算出中间的间隔时间。

有一种方法:WINCC有函数可以获取变量的状态,得出一个32位无符号数,全为0时候通讯正常,可以试一下

答:可以将信号质量状态取出,进行编程

#include "apdefap.h"

int gscAction( void )
{
unsigned long status[1];
GetTagBitState("S7$Program(1)_Switch",&status[0]); //Return type :short int printf("%d",*status);

if (*status==1)
SetTagBit("ConnectionBool",1); //Return type :BOOL
else
SetTagBit("ConnectionBool",0); //Return type :BOOL

return(0);
}

也可以写成
DWORD state;
GetTagBitState("PLC_WINCC_Comm", &state);
if( state== 0) SetTagBit("Sta_PLCWinCCCommOK", 1);
else SetTagBit("Sta_PLCWinCCCommOK", 0);

同时,wincc还要通知PLC与其链接正常,在上面脚本再加上 SetTagBit("Comm_toPLC", 1); 这一句将每两秒把Comm_toPLC这个tag置一,PLC收到这个tag为1就复位之,然后PLC逻辑通过延时检验15s一直没有收到1,那么就置位一个与WinCC链接中断的标志位。



DB100.DBX103.4 就是 WinCC内地Tag:Comm_toPLC,收到上升沿开始计数,DB100.DBX103.0是给回WinCC的,让WinCC知道通讯状态。也是扫描条件就绪的条件之一。不过DB100.DBX103.0这个WinCC用不大保险,还是WinCC自己检测Tag State比较靠谱。15s内如果还没有收到下一个WinCC发来的上升沿(如前所述WinCC每2s置1一次),证明通讯中断,PLC会set DB100.DBX103.0,扫描会中断。

//////////////////////////////////////////
帮助中有:
Value (decimal)
Value (hexdecimal)
Meaning

0
0x0000
No error

1
0x0001
Connection to partner not established

2
0x0002
Handshake error

4
0x0004
Network module defective

8
0x0008
Configured upper limit exceeded

16
0x0010
Configured lower limit exceeded

32
0x0020
Format upper limit exceeded

64
0x0040
Format lower limit exceeded

128
0x0080
Conversion error

256
0x0100
Tag initialization value

512
0x0200
Tag replacement value

1024
0x0400
Channel addressing error

2048
0x0800
Tag not found or not available

4096
0x1000
Access to tag not permitted

8192
0x2000
Timeout, no check-back message from the channel

16384
0x4000
Server not available.
////////////////////////////////////////////////

在从站向上位送的数据表中定义一位恒1的位。

代表从站通讯状态正常。

当通讯失败的时候,如果不刷新画面,在画面中应用这位的控件保持断开之前的状态1,只有从新刷新当前画面以后才会变成0. 所以不能用于检测Wincc与PLC的通讯状态。
知难行易
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。