汇川AM系列PLC的modbus从站离线的诊断.docx

汇川AM系列PLC的modbus从站离线的诊断.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

汇川AM系列PLC的modbus从站离线的诊断

本文介绍如下几个内容:

如何通过编写的FC_ModbusDiagnosis判断modbus子节点的在线与离线情况。

三个附录:

【附录1】汇川AM402-CPU1608TN通过RS485读取颜色传感器数值方法

【附录2】modbus从站断线、断电后情况:

【附录3】FC_ModbusDiagnosis的具体代码

FC_ModbusDiagnosis使用方法:

拷贝DB_BusDiagnosis到程序中:

拷贝FC_ModbusDiagnosis到程序中

3.判断对应的节点是否正常,举例来讲:判断节点1是否正常的方法如下。

FC_ModbusDiagnosis(ComID:=0,SlaveID:=1,start:=TRUE);

Slave1ComOK:=DB_BusDiagnosis.ModbusSlaveDiagData[1].Status=E_BusDiag_Status.OK

Slave1ComNG:=DB_BusDiagnosis.ModbusSlaveDiagData[1].Status=E_BusDiag_Status.Error

备注:FC_ModbusDiagnosis(ComID:=0,SlaveID:=1,start:=TRUE);

ComID是主站的RS485通讯口,一般是0;SlaveID根据实际情况设置。

FC_ModbusDiagnosis的代码介绍

内部主要调用了:SysHC_ModbusRtuSlaveDiagnose来实现从站的监控。

下图所见:byDiagData就是设备诊断的故障码。认为byDiagData=0表示ok;不等于0表示NG。

【附录1】汇川AM402-CPU1608TN通过RS485读取颜色传感器数值方法

钉钉上有篇文章详细介绍了这个使用过程,此处简单摘抄如下:

步骤1:双击网络组态,右键plc模块,勾选Modbus主站,然后拖动Modbus子站到modbus总线上

步骤2:设置主站波特率:115200,奇偶校验无,数据位8,停止位1,传输RTU

步骤3:设置modbus从站,站号为1,读取寄存器5,6.

步骤5:程序中启动modbus,然后即可以得到结果。下图所示:

SM1001:=TRUE;

_temp1:=ColorSensor1_value1;

_temp2:=ColorSensor1_value2;

【附录2】modbus从站断线、断电后情况:

1.Modbus子节点断电后:

A.主站设备诊断中会出现与从站1通讯失败提示:

B.从站1设备诊断中也会出现通讯失败实体

SysHC_ModbusRtuDeviceDiagnose这个FB块的实例可以看到有故障提示:Slave_Not_exist.

注意:此FB应该有问题,应为这个报警出现后就无法清除。即使子站1重新上电+XEnable=false,true后仍然不能消除。

SysHC_ModbusRtuSlaveDiagnose这个FB块的实例可以看到有故障提示:0x75.

而且子站1重新上电后该故障提示消失

Modbus子节点重新上电后:

SysHC_ModbusRtuSlaveDiagnose这个FB块的实例读取的byDiagData=0;

【附录3】FC_ModbusDiagnosis具体代码

IFSlaveID1ORSlaveID32THEN

FC_ModbusDiagnosis:=FALSE;

RETURN;

END_IF

_SlaveDiag(

xEnable:=Start,

byComID:=ComID,

bySlaveID:=SlaveID,

);

IF_SlaveDiag.xValidAND_SlaveDiag.xBusyTHEN

IF(_SlaveDiag.stDiagData.byDiagData0)THEN

IFDB_BusDiagnosis.ModbusSlaveDiagData[SlaveID].StatusE_BusDiag_Status.ERRORTHEN

DB_BusDiagnosis.ModbusSlaveDiagData[SlaveID].Status:=E_BusDiag_Status.ERROR;

DB_BusDiagnosis.ModbusSlaveDiagData[SlaveID].ErrorCode:=_SlaveDiag.stDiagData.byDiagData;

DB_BusDiagnosis.ModbusSlaveDiagData[SlaveID].ErrorTime:=

您可能关注的文档

文档评论(0)

157****7260 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档