关于ABB PLC DP通讯时检查通讯状态DPM_SYS_DIAG库的使用 点击:883 | 回复:2



酒醉、笑红尘

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 78回
  • 年度积分:0
  • 历史总积分:590
  • 注册:2010年6月19日
发表于:2011-10-15 22:30:25
楼主

最近用到ABB的PLC,有个问题请教各位。 (没找到ABB PLC 版块,就发到DCS版区了,望版主见谅!)

主站是ABB AC500 PM581的PLC,配一个CM572的DP通讯模块,下面有两个DP从站,一个是西门子的EM277,另一个313C-2DP。

现在通讯没什么问题,我想在程序里做一个检查两个从站通讯状态的程序,也就是当从站通讯中断时,我要在上位机上做出提示。 codesys 里面有个profibus dp库 DPM_SYS_DIAG ,可以从这个库SLV 输出 获取从站状态 。SLV 输出是一个bool量的输出,帮助文件上写是的

SLV ARRAY 【0..127】 OF BOOL
SLV以位形式输出调查状态。这个域中每个位代表一个DP从站。索引号码对应于DP从站的节点地址。当一个位被设置为TRUE,则把TYP选择的状态应用到相应的DP从站。

现在搞不清楚SLV 输出 这个bool变量该用什么变量名。

用SLV【2】(2表示从站地址) 编译提示:

错误 4110: DP_COM_CHECK(3):"【<index>】"要求数组变量

用ARRAY【2】 编译提示:
错误 4268: DP_COM_CHECK(3):期望表达式 (DP_COM_CHECK 是子程序的名字,(3)是这该子程序的第三个网络。)

各位用过的朋友指点迷津! <script type="textja<x>vascript">(function(sogouExplorer){ sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});//alert("content script stop js loaded "+document.location); if (typeof comSogouWwwStop == "undefined"){ var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&"; window.comSogouWwwStop = true; setTimeout(function(){ if (!document.location || document.location.toString().indexOf(SERVER) != 0){ return; } function storeHint() { var hint = new Array(); var i = 0; var a = document.getElementById("hint_" + i); while(a) { hint.push({"text":a.innerHTML, "url":a.href}); i++; a = document.getElementById("hint_" + i); } return hint; } if (document.getElementById("windowcloseit")){ document.getElementById("windowcloseit").onclick = function(){ sogouExplorer.extension.sendRequest({cmd: "closeit"}); } var flag = false; document.getElementById("bbconfig").onclick = function(){ flag = true; sogouExplorer.extension.sendRequest({cmd: "config"}); return false; } document.body.onclick = function(){ if (flag) { flag = false; } else { sogouExplorer.extension.sendRequest({cmd: "closeconfig"}); } };/* document.getElementById("bbhidden").onclick = function(){ sogouExplorer.extension.sendRequest({cmd: "hide"}); return false; } */ var sogoutip = document.getElementById("sogoutip"); var tip = {}; tip.word = sogoutip.innerHTML; tip.config = sogoutip.title.split(","); var hint = storeHint(); sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}}); }else{ if (document.getElementById("windowcloseitnow")){ sogouExplorer.extension.sendRequest({cmd: "closeit", data: true}); } } }, 0); } })(window.external.sogouExplorer(window,7));




ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2011-10-24 16:02:17
1楼

首先申明 Profibus_Slave_Status:DPM_SYS_DIAG;

如果从站地址是2,Profibus_Slave_Status.SLV[2]就是bool变量啦

这个值如果为1,那就证明2号从站在线 。否则不在线。

 

比如可使用“if Profibus_Slave_Status.SLV[2] then 2号站为ok end_if ”这样的语句

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2011-10-27 16:41:52
2楼

对于SLV管脚变量的定义可以使用

Slave: ARRAY [0..127] OF BOOL ;

直接在管脚输入Slave即可。

另外在使用IF Slave[2]  THEN  2号站为ok  END_IF


热门招聘
相关主题

官方公众号

智造工程师