前段时间做了一个WINCC与MES系统通讯的项目,局域网读取数据库,当服务器断线时,WINCC再访问数据库,会有几十秒的超时报错,而且会影响WINCC其它的VBS脚本执行。关于数据库访问超时问题,网上搜了很多资料也没彻底解决。后来另辟蹊径,通过检测服务器IP是否连接成功,然后再进行数据库访问,成功解决了此问题。贴出来,给大家分享一下!
Dim objWMIservice,colltems,objitem
Dim ip
Set objWMIservice=GetObject("winmgmts:\\.\root\cimv2")
'********客户机1 IP检测
ip=HMIRuntime.Tags("IP1").Read '***变量IP1 输入查询IP地址
Set colltems=objWMIservice.Execquery("Select * from WIn32_PingStatus Where Address='"&IP&"' ")
For Each objitem In colltems
Select Case objitem.statusCode
Case 0 '***连接成功
HMIRuntime.Tags("SQL1_STATE").Write 1 '***变量SQL1_STATE更新状态
HMIRuntime.Trace "IP连接成功"
Case Else '***连接失败
HMIRuntime.Tags("SQL1_STATE").Write 0 '***变量SQL1_STATE更新状态
HMIRuntime.Trace "IP连接失败"
End Select
Exit For
Next
HMIRuntime.Trace "IP检测完成"
检测在线,基本1S内;断线检测基本在2-3S之内。通过此脚本还可以判断PLC与WINCC的通讯状态,或者第三方的TCP设备,也可以做通讯状态检测使用。