最近看梁智斌的wincc教程,其中第57讲,说到连接的诊断,比如某个PLC停了,怎么样产生一条消息出来,它这里是拿300PLC的仿真软件S7-PLC SIM和wincc通讯,当S7-PLC SIM停了,就在wincc报警记录里面弹出一条消息,当然它是用C脚本实现的,用的是GetTagByteState这个函数,意思好像是说,取一个来至300PLC的外部变量(无符号8位)做状态,如果为1,说明故障;如果为0,说明正常,再把得到的结果给到报警记录里面的变量,周期触发报警
我呢300PLC不会用,为了实现这个,我自己想了无厘头的实验,反正GetTagByteState是取外部变量的状态位,那我200PLC和wincc通讯全靠pc access,我在pc access里面建立一个无符号8位的变量放到wincc里面,然后在wincc的全局变量中写上如下的一段
#include "apdefap.h"
int gscAction( void )
{
#pragma option(mbcs)
DWORD tt1,tt2;
DWORD tagState1=0;
GetTagByteState("vb200",& tagState1);
if (tagState1==1)
{
tt1=GetTagByte("C2");
tt2=tt1|2;
SetTagByte("C2",(BYTE)tt2);
}
return 0;
}
取pc access里面的VB200做状态判断,看是否会报警
但是结果是,当我wincc运行后,无论我是停下我的200PLC或是把VB200这个变量删除甚至把整个OPC外部变量都删除,都没看到报警,所以我在想是压根就不能这么用,还是可以用,我哪里做错了