『7x24小时有问必答』
SIMATIC WinCC Professional 项目中可以通过脚本获取外部变量的变量状态,从而判断通信状态。
WinCC Professional 通信状态变量
在变量表中建立变量 @TestConnection@ForceConnectionState 和 @TestConnection@ConnectionState 其中 TestConnection 为与 PLC 通信的连接名称,如下图:
注意:@TestConnection@ForceConnectionState 和 @TestConnection@ConnectionState 变量类型为 DWORD,连接选择需要查看或设置通信状态的 PLC 连接,本例为 TestConnection,地址需设置一个未被使用的地址,本例中使用 DB40000.DBD0及 DB40000.DBD4,访问方式选择 <绝对访问>。如下图:
@TestConnection@ConnectionState 变量用来显示与当前 PLC的连接状态,为1表示通信正常,为0表示通信中断。
@TestConnection@ForceConnectionState 变量为0时则将与 PLC的连接设置为断开状态,为1时则将与 PLC 的连接设置为连接状态。此处为了使与 PLC 的连接状态默认为连接状态,可将该变量起始值设为1。如下图:
至此即可通过 @TestConnection@ForceConnectionState 和 @TestConnection@ConnectionState 这两个变量来控制和查看与 PLC 连接的状态,如下图:
如何获取Portal WinCC Runtime Professional 项目与PLC的通信状态,通常推荐较简单的通信连接状态变量功能。
WinCC Professional 通信状态变量
另一种方法:通过外部变量(PLC通信连接下创建的变量)的状态来获得,我们可以通过脚本来获得外部变量的变量状态。
在 WinCC Runtime Professional 项目的”HMI 变量“相应变量表中,添加 Int 类型的外部变量External_tag_1,Bool 类型的内部变量 Trigger_connection_interrupted,如下图:
在项目树中的 WinCC Runtime Professional 项目中脚本的“C脚本” 中添加新脚本“DiagConnection",如下图:
在脚本中填写如下语句,语句内容为通过检查“External_tag_1“的变量状态来判断通信状态,如果通信正常给变量“Trigger_connection_interrupted”赋值为0,通信异常给变量“Trigger_connection_interrupted”赋值为1。
===========================================
DWORD dwState = 0;

GetTagSWordState ("External_tag_1", &dwState);

if (dwState == 0)
{

//Tag status OK

printf ("Tag status Ok: [Statuscode (hex):%X]\r\n",dwState);

SetTagBit ("Trigger_connection_interrupted", FALSE);

}

else if (dwState&0X0001)

{

printf ("Tag status deviant: [Statuscode (hex):%X]\r\n",dwState);

SetTagBit ("Trigger_connection_interrupted", TRUE);

}

else

{

//Tag status deviant

printf ("Tag status deviant: [Statuscode (hex):%X]\r\n",dwState);

SetTagBit ("Trigger_connection_interrupted", FALSE);

=======================================
如下图:
然后在项目树中打开”计划任务“,新建 "DiagConnection" 的计划任务,计划任务类型选择“函数列表”,触发器选择 10秒,然后点击“属性”窗口中的“事件”选项卡,然后选择已经建立的C脚本“DiagConnection”。
然后在项目树中的 “运行系统设置” 中选择“服务”,并勾选 “运行系统中的计划任务” 选项。如下图:
示例效果为每 10秒检查一次 外部变量 "External_tag_1" 所隶属的连接的通信状态,如果通信正常,则 “Trigger_connection_interrupted” 变量值为0,如果通信异常则 “Trigger_connection_interrupted” 变量值为1。
注意:可通过对计划任务中触发器的设置,来调整通信诊断的时间间隔,本例中设置为10秒。
微信技术群:PLC工业自动化社区 (加好友标注:姓名-城市)

公众号:  巨控电子( 扫码关注 )       

西门子WINCC

自动语音播报WinCC报警消息
西门子TIA博途
西门子TIA博途SCL学习

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码