# DeviceNet主站操作手册

### 新建工程

> 本文主要描述如何使用中科时代DeviceNet主站连接从站设备。

1. 安装设备描述文件

单击工具 ➔设备存储库 ➔ 安装。

导入厂商提供的Eds文件。

2.扫描从站

右击主站，单击扫描设备

稍等一段时间，在弹出的界面中显示扫描到的从站列表。

点击智能拷贝;设备添加到工程中。

3.下装运行

1. 首先，连接到工智机设备。输入工智机IP地址，输入回车符。

如果状态图标显示为绿色，且IP地址后提示激活的;表示连接成功。

- 点击【登录】。

如果工程发生了变更，则会提示登录选项，新工程直接下装运行。

登录成功后可以看到工程的运行状态。

### 配置页面说明

#### 主站配置页面

1.1 【通用】页面

- 读取当前主站的波特率（在卡件处可拨码，需与网络中的从站一致）

- 可以实时监控当前总线负载和当前总线流量

1.2 【诊断】页面

总线状态：实时更新总线状态

- 总线断开: 红色表示主站没有连接到总线上，否则显示空白

- 网络电源异常: 红色表示总线没有连接电源，否则显示空白

- 接收错误: 接收超时或者接收到的数据帧错误

- 发送错误: 一般是发送数据帧超时

主站状态：出现此类错误后，需要排查现场设备，重新下装。

- 配置错误: 主站初始化出错，一般是IDE中的插件版本和RTE中的插件版本不一致

- Mac地址重复: 显示红色表示有从站设备的mac id和主站一样。

- 内存分配错误: 显示红色表示有从站设备的mac id和主站一样。

从站状态：实时更新从站状态

- 远程I0通信运行: 绿色表示至少有一个从站运行正常，即【运行从站数量】>0;

- 通信错误: 显示红色表示至少有一个从站运行异常，即【故障从站数量】>0;

- 已配置从站数量: 主站下添加的从站数量(包括空闲从站)

- 故障从站数量: 主站下运行异常的从站数量

- 运行从站数量: 主站下IO通讯正常的从站数量

#### 从站配置页面

2.1 【通用】页面

- 显示当前从站的mac地址

- 是否使用UCMM通讯。如果使用UCMM通讯，使用的组号。

### 2.2 【连接】页面

消息类型: 只支持【轮询】，从站如果选择了其他连接方式，会在诊断页面报错【不支持的连接】

双击表格区域，可以编辑连接详细信息。

1. PRI(ms)：可为每个从站配置独立的轮询周期，即IO交换周期，单位毫秒。

2. 连接入口：下拉框显示EDS文件中列出的可选配置文本名称，也可以选择【自定义】来自由编辑连接路径和字节数大小

3. 路径：要下发给从站的输入/输出的具体路径（路径字段具体含义，请查询Devicenet协议文档）。

   注意：如果路径填空值，则表示不下发IO配置，运行时从从站读取实际路径。扫描智能拷贝添加的从站默认不下发IO配置。

4. 输入/输出大小(字节)：告知此从站的IO字节数大小。需要与当前配置的路径一致，如果字节数大小不匹配，运行时，会在诊断页面报错**【无效IO大小】。

2.3 【用户参数】页面

1. 如果从站EDS文件中包含下发参数，则该页面显示当前的下发参数，否则显示空。

2. 支持修改参数值: 首先要停止运行工程，双击值进行修改，选中该参数，点击保存按钮。工程下装并运行时，会将此参数值下发到从站中。

注意: 有些参数需要从站断电重启才会生效

- 参数被改动提醒:检测到界面有勾选或者其他修改，保存按钮会黄色高亮显示，按钮旁边出现个感叹号，将鼠标放上去显示"参数已修改”。

2.4 【只读参数】页面

1. 如果从站EDS文件中包含只读参数，则该页面显示当前的只读参数值，否则显示空。

2.5 【诊断】页面

配置故障: 出现此类错误后，需要排查现场设备问题，重新下装。

1. 无效的连接路径: 显示红色表示配置的路径不合法。

2. 无效I0大小: 【连接】页面输入的IO字节大小与实际读到的大小不一致时，会显示此错误，需修改并重新下装。

3. 不支持的连接: 【连接】页面中配置的连接方式不是【轮询】

4. 身份不匹配: 当前配置的从站供应商编码、产品类型、产品编号与实际读到的不一致。

5. 其他配置错误: 提示出现的其他配置错误

运行故障: 实时显示运行过程中的一些故障状态

1. 远程I0通信运行: 显示绿色表示从站在正常运行，否则表示通讯失败。

2. 接收到无效的IO封包: 显示红色表示在运行的过程中接收到不正确的I0数据包

3. 设置通讯循环时间失败: 显示红色表示设置从站的RPI失败。

### PLC编程

提供了两个2个PLC函数用于获取主站和从站的状态。

#### 获取主站状态

1.1 输出

    VAR_OUTPUT
       status:ST_DNetMasterStatus;
       bError : BOOL;
    END_VAR

名称 | 类型 | 描述
--- | --- | ---
status | ST_DNetMasterStatus | 主站的运行状态
bError | BOOL | 函数执行是否报错

1.2 ST_DNetMasterStatus 主站状态结构体，字段如下：

字段 | 类型 | 说明
--- | --- | ---
total_slave_num | USINT | 已配置的从站数量
error_slave_num USINT | 运行异常的从站数量 |
running_slave_num USINT | IO通讯正常的从站数量 |
bus_off BOOL | 总线是否断开 |
no_bus_power | BOOL | 网络电源异常
receive_failed | BOOL | 接收错误
send_failed | BOOL | 发送错误
config_error | BOOL | 配置错误
duplicate_mac_id | BOOL | mac地址重复
memory_alloc_error | BOOL | 内存分配错误
io_running | BOOL | 至少有一个从站正常通讯
comm_error | BOOL | 至少有一个从站通讯错误

1.3 示例

    PROGRAM PLC_PRG
    VAR
       bError: BOOL;
       tMasterStatus: ST_DNetMasterStatus;
    END_VAR
    GetMasterStatus(status=>tMasterStatus,bError=>bError);

2. 获取所有从站状态

2.1 输入

    VAR_INPUT
        pStatus: POINTER TO ARRAY[0..63] OF ST_DNetSlaveStatus;
        cbBufLen: UDINT;
    END_VAR

名称 | 类型 | 描述
--- | --- | ---
pStatus | POINTER TO ARRAY[0..63] OF ST_DNetSlaveStatus | 所有从站状态
cbBufLen | UDINT | pStatus缓存区的字节数大小. 至少为实际从站数量*10个字节.

2.2 输出

    VAR_OUTPUT
        actualSlaveNum:USINT;
        bError : BOOL;
    END_VAR

名称 | 类型 | 描述
--- | --- | ---
actualSlaveNum | USINT | 实际从站数量
bError | BOOL | 函数执行是否报错

2.3 ST_DNetSlaveStatus

字段 | 类型 | 描述
--- | --- | ---
mac_id | USINT | 从站Mac地址
unsupported_connection | BOOL | 不支持的连接类型
identityMismatch | BOOL | 身份不匹配：供应商编码、产品类型、产品编码不一致
invalid_io_size | BOOL | 无效IO大小
config_error | BOOL | 其他配置错误
invalid_connection_path | BOOL | 非法连接路径
io_running | BOOL | 从站IO通讯成功
set_epr_failed | BOOL | 设置EPR失败
connect_fail | BOOL | 从站无法连接
recv_invalid_io_packet | BOOL | 接收到无效的IO数据包

2.4 示例

    PROGRAM PLC_PRG
    VAR
        bError: BOOL;
        statuses: ARRAY[0..63] OF ST_DNetSlaveStatus;
        uActualSlaveNum: UINT;
    END_VAR

    GetAllSlaveStatus(pStatus:=ADR(statuses),cbBufLen:=SIZEOF(statuses[0])*63,actualSlaveNum=>uActualSlaveNum, bError=>bError)