找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
问题
取消精华
首页精华问答
取消推荐
高端用户推荐
申请置评
已申请置评
修改
修改标签
添加标签
官方认证
取消官方认证
修改标签
添加标签
转移分类
删除
{{itemCategory}}
收藏({{answerDetail.Q_FavoriteCounts}})
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
专家建议
取消最佳答案
修改
对于第1个问题,可以在全局脚本中用外部变量作触发器,这样当外部变量变化时,用SetTagByte函数将外部变量值赋给内部变量,实际上也达到了这两个变量总是在关联的目的。
对于第2个问题,可以而且最好使用质量代码,因为质量代码输出值中完全包含了对于winCC与PLC通讯的各种状态值。
使用质量代码的方法有三种方式:
1.动态对话框方式
可以在I/O 域的输入/输出属性输出值选择动态对话框,在对话框中的表达式中选择需要监控的PLC变量,然后选择质量代码,点击下方的PLC变量,在其右侧会出现输出值。在输出值中可以根据需求自己定义在不同的质量状态时,该PLC的输出值
2.事件代码方式
在I/O域的输出值事件中选择在“质量代码-更改变量”情况下,其动作选择C动作。在C动作中有以下的事件代码
void OnPropertyQualityCodeChanged(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, DWORD dwQualityCode){
#define connectState "commState"
SetTagDWord(connectState ,dwQualityCode);
}
该事件代码中dwQualityCode是质量代码值,根据该值即可判断被监控的PLC是否掉电。只有当值=0x80时才是正确的,否则异常。其具体的质量代码值所代表的含义可以参考动态对话框中的质量代码值所显示的。{}中的代码是我编写的实例可供参考。我的项目中使用的是这种方法。通过该方式可以随时获知PLC是否掉电。需要说明的是通过试验我发现VBS脚本虽然也可以取质量代码值,但却不能真实反映该变量的连接状态。
3.函数方式
也可以使用C函数,如:
GetTagByteStateQC(Tag_Name,lp_dwstate,pdwQualityCode); //Return-Type: BYTE
在全局脚本的Tag-get-stateQc下有许多不同变量类型的获取质量代码的函数可查询使用
等您来回答
换一换
{{item.CoinValue}}西币
{{item.VisitNum}}人想问
本版相关问题
换一换
专家置评
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!

西门子商城