项目

一般

简介

01-03-14 Modbus

1. 前言


本章节讲述使用潘多拉盒子程序配置Modbus通讯协议连接PLC,通过潘多拉盒子程序实现SECS/GEM的功能。

2. 创建Modbus连接


使用潘多拉客户端程序连接潘多拉盒子程序后,在新建连接界面选择从站设备连接,并配置设备名称和描述信息,配置完成后点击创建按钮。
潘多拉客户端程序如何连接潘多拉盒子详细操作,请参考以下这篇文章。
https://project.kxware.com/projects/pandora/wiki/01-02_%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8


3. 参数配置


在客户端界面新建完连接后,在左侧设备列表会出现新建的设备名,选择该设备,在左侧设备详细界面选择参数配置标签,在标签界面点击修改按钮可配置设备参数信息。(注意:修改按钮必须当前设备处于停止状态才能点击)

在基本配置里根据是TCP连接还是串口连接配置对应Modbus通讯参数。

在基本参数里配置设备的EAP通讯连接、设备参数(SV/DV/EC)、设备报警(Alarm)、设备事件以及设备的MDLN信息;
要注意的是,在EAP通信连接配置中,潘多拉盒子程序默认会创建5000和5001两个HSMS的端口连接,如果一个潘多拉盒子挂载多个连接时,需在创建完连接后手动修改EAP的默认HSMS端口号,保障当前连接的EAP端口号不与其他连接的EAP端口号一样,如图:

3.1. 报警配置

在GEMAlarmDefinition中点击“Add”添加报警,在右侧的报警信息配置中配置报警代码(AlarmCode),报警ID(AlarmId,唯一,不能重复),报警描述(AlarmDescription),报警名称(AlarmName,唯一,不能重复),报警文本(AlarmText);

填写报警的发生和清除脚本,比如:线圈32769为true代表报警发生,false代表报警清除,那么根据AlarmTriggerInputType应做如下配置:
AlarmSETScript:

// if AlarmTriggerInputType is Expression input:
(bool)REG("F1R32769")

//if AlarmTriggerInputType is Function input:
return (bool)REG("F1R32769");

AlarmCLEARScript:

// if AlarmTriggerInputType is Expression input:
!(bool)REG("F1R32769")

//if AlarmTriggerInputType is Function input:
return !(bool)REG("F1R32769");

3.2. 事件配置

在GEMEventDefinition中点击“Add”添加事件,在右侧的事件信息配置中配置事件ID(EventId,唯一,不能重复),事件描述(EventDescription),事件名称(EventName,唯一,不能重复),事件关联的参数(EventAssociatedVariableNames,可为空);

填写报警的发生的脚本,比如:线圈32770为true代表事件发生,那么根据EventTriggerInputType应做如下配置:
EventTriggerScript:

// if EventTriggerInputType is Expression input:
(bool)REG("F1R32770")

//if EventTriggerInputType is Function input:
return (bool)REG("F1R32770");

3.3. 参数配置

在GEMVariableDefinition中点击“Add”添加参数,在右侧的参数信息配置中配置参数ID(VariableId,唯一,不能重复),参数名称(VariableName,唯一,不能重复),参数描述(Description),参数类型(VariableType,SV/DV/EC),单位(VariableUnit,可为空),最小值(VariableMin),最大值(VariableMax),默认值(VariableDefault),参数类型(VariableFormat.详细参考:https://project.kxware.com/projects/pandora/wiki/01-08-01_SECSGEM%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%AE%9A%E4%B9%89 ),断电保存(Persistent);

填写参数的获取和转换脚本,比如:MW0对应参数温度设定值,那么根据VariableValueInputType应做如下配置:
VariableValueScript:

// if VariableValueInputType is Expression input:
(ushort)REG("F3R12288")

//if EventTriggerInputType is Function input:
return (ushort)REG("F3R12288");


如果参数类型是EC,那么需要配置数据转换脚本:
VariableValueConvertbackScript:

W_REG("F3R12288",(ushort)Value)

4. Modbus 地址配置


根据参数类型配置地址示例如下:

//Coil
F1R32769
//Discrete Input
F2R32769
//Holding Register
F3R1           - WORD
F3R1_REAL      - REAL
F3R1_LREAL     - LREAL
F3R1_STRING250 - STRING Length 250
//Input Register
F4R1           - WORD
F4R1_REAL      - REAL
F4R1_LREAL     - LREAL
F4R1_STRING250 - STRING Length 250