# IEC60870-5-104

IEC60870-5-104 是一种电力自动化系统中常用的通信协议，使用 TCP/IP 协议作为底层通信协议，用于监视和控制电力系统中的各种设备，如变电站、发电机、开关等。

Neuron 支持以总召唤以及设备主动上报数据的方式采集遥信、遥测和遥脉（电度召唤）数据，以及支持通过遥控遥调对设备进行控制。

## 添加插件

在 **配置 -> 南向设备**，点击**添加设备**来创建设备节点，输入插件名称，插件类型选择 **IEC60870-5-104** 启用插件。

## 设备配置

点击插件卡片或插件列，进入**设备配置**页。配置 Neuron 与设备建立连接所需的参数，下表为插件相关的配置项。

| 参数          | 说明                  |
| ------------ | --------------------- |
| **设备 IP 地址** | 设备的 IPv4 地址                |
| **设备端口**     | 设备端口号，默认为 2404  |
| **公共地址**       |  公共地址，唯一标识数据对象               |
| **总召唤间隔** | 发送总招唤指令的间隔         |
| **时钟同步间隔** | 是否开启时钟同步，定期向设备发送时钟同步请求|
| **遥脉间隔** | 是否开启遥脉，定时召唤总电度信息|
| **T0** | T0 超时时间，建立 TCP 连接的超时时间，单位：秒 |
| **T1** | T1 超时时间，等待接收方响应请求的超时时间，单位：秒 |
| **T2** | 如果 T2 时间内未接收到新的 I 帧报文，则发送 S 帧报文，单位：秒 |
| **T3** | 如果 T3 时间内未接收到任何报文，则发送测试报文，单位：秒 |
| **W** | 如果接收到 W 个 I 帧，必定发送 S 帧 |

## 设置组和点位

完成插件的添加和配置后，要建立设备与 Neuron 之间的通信，首先为南向驱动程序添加组和点位。

完成设备配置后，在**南向设备**页，点击设备卡片/设备列进入**组列表**页。点击**创建**来创建组，设定组名称以及采集间隔。完成组的创建后，点击组名称进入**点位列表**页，添加需要采集的设备点位，包括点位地址，点位属性，数据类型等。

点位属性配置为`Read`，则代表该点位不仅会根据配置的`总召唤间隔`，定期上报104 Server发出的数据点的值，同时还会根据组的`采集间隔`，定期上报数据。

点位属性配置为`Subscribe`，则代表该点位不仅会根据配置的`总召唤间隔`，定期上报104 Server发出的数据点的值，同时当数据点位变化后，Neuron也会收到变化的数据点，并通过北向应用配置将数据点北向上报。

::: tip 提示
由于104协议的实时性要求，配置为`Subscribe`的点位，Neuron会在收到数据点位变化后，立即将变化的数据点位上报到北向应用，并且不受采集组的`采集间隔`限制。
::: 

::: tip 提示
当采集组的数据点位都配置为`Subscribe`类型，即使数据点位没有任何变化，总召唤上报仍会触发。
::: 

点位属性配置为`Write`，则代表该点位支持Neuron主动写入数据到104 Server，注意，104协议的读地址与写地址是分离的，一个点位地址位要么是读点位要么是写点位，不存在同时可读可写的点位，具体信息可查阅104协议相关文档。

点位属性`Subscribe`、`Read`、`Write`只可单独配置。

::: tip 提示
建议在同一个采集组中，只配置一种点位属性，例如，一个采集组中，只配置`Subscribe`属性的点位，或者只配置`Read`属性的点位，或者只配置`Write`属性的点位。
::: 

公共配置项部分可参考[连接南向设备](../south-devices.md)，本页将介绍支持的数据类型和地址格式部分。

### 地址格式

> IOA

#### IOA
在 IEC60870-5-104 协议中，IOA (Information Object Address) 指的是信息对象地址，是用于唯一标识一个数据对象的地址，用于指定一个信息对象（遥信、遥测、遥控等）的地址。

::: tip
IEC60870-5-104 协议中，一个 IOA 标识的地址只属于一种类型，且能读的点位如遥测等与控制点位如遥控等的 IOA 并不相同，例如，遥测点位 IOA 为 100，这个点位对应的遥控点位 IOA 并不是 100，而是映射到其他的 IOA。
::: 

### 实现规范

#### 设备通讯流程

* 支持数据防止数据丢失与重复，引用 IEC60870-5-104 中 5.1
* 支持测试链路功能，引用 IEC60870-5-104 中 5.2
* 支持启动停止链路功能，引用 IEC60870-5-104 中 5.3
* 支持链路初始化功能，引用 IEC60870-5-104 中 7.1
* 支持设备主动上送数据，引用 IEC60870-5-104 中 7.3, 7.4
* 支持总召唤设备所有数据功能，引用 IEC60870-5-104 中 7.5
* 支持时钟同步功能，引用 IEC60870-5-104 中 7.6
* 支持指令遥控功能，引用 IEC60870-5-104 中 7.7
* 支持召唤累积量功能，引用 IEC60870-5-104 中 7.8

#### 支持的 TypeIDs

##### 监控方向

* M_SP_NA_1: 单点信息 (BIT、 BOOL)
* M_SP_TB_1: 带时标的单点信息 (BIT、 BOOL)
* M_DP_NA_1: 双点信息 (UINT8)
* M_DP_TB_1: 带时标的双点信息 (UINT8)
* M_ST_NA_1: 步位置信息 (INT8)
* M_ST_TB_1: 带时标的步位置信息 (INT8)
* M_BO_NA_1: 32比特串 (UINT32、 INT32)
* M_BO_TB_1: 带时标的32比特串 (UINT32、 INT32)
* M_ME_NA_1: 测量值，归一化值 (FLOAT)
* M_ME_TD_1: 带时标的测量值，归一化值 (FLOAT)
* M_ME_NB_1: 测量值，标度化值 (UINT16、 INT16)
* M_ME_TE_1: 带时标的测量值，标度化值 (UINT16、 INT16)
* M_ME_NC_1: 测量值，短浮点数 (FLOAT)
* M_ME_TF_1: 带时标的测量值，短浮点数 (FLOAT)
* M_IT_NA_1: 累计量 (UINT32、 INT32)
* M_ME_ND_1: 测量值，归一化值，不带品质描述词 (FLOAT)

##### 控制方向

* C_SC_NA_1: 单点遥控 (BIT、 BOOL)
* C_DC_NA_1: 双点遥控 (UINT8)
* C_RC_NA_1: 步调节命令 (INT8)
* C_SE_NA_1: 设置归一化值 (FLOAT, -1.0 ~ 1.0)
* C_SE_NB_1: 设置标度化值 (UINT16、 INT16)
* C_SE_NC_1: 设置短浮点数 (FLOAT)
* C_BO_NA_1: 设置32比特串 (UINT32、 INT32)

::: tip
不支持 带时标的控制信息对象，如 C_SC_TA_1、C_DC_TA_1、C_RC_TA_1、C_SE_TA_1、C_SE_TB_1、C_SE_TC_1 等。
::: 


### 数据订阅
IEC60870-5-104 在协议层面支持点位发生改变时，设备主动上报点位值。在 Neuron 侧需要给点位配置 Subscribe 属性，当设备向 Neuron 发送变化数据时，Neuron 才会及时把此变化消息发送到对应的北向应用中。


### 地址示例

| IOA         | 类型  | 说明 |
| :-------- | :------------ | :---- |
| 100 | M_SP_NA_1 | 读取 IOA 为 100 的一位开关量（单点信息） |
| 1000| C_SC_NA_1 | 单点遥控，对 IOA 为 1000 的信息对象进行一位开关量进行控制写入 ｜
| 400 | M_ME_NA_1 | 读取 IOA 为 400 的测量值 ｜ 
| 4000|C_SE_NA_1 | 单点控制，对 IOA 为 4000 的信息对象进行控制写入 ｜

如上表中 100 与 1000 存在映射关系，则对 1000 进行控制写入后，能从 100 中读到写入的值；或是 400 与 4000 存在映射关系，则对 4000 进行控制写入后，能从 400 中读到写入的值。

::: tip
支持点位时间以及点位质量的数据点，在北向发送数据时，将会可选的增加对应点位的质量以及时间。
::: 

## 应用场景

您可通过[IEC 60870-5-104 Server Simulator](https://www.freyrscada.com/iec-60870-5-104-Client-Simulator.php) 模拟 IEC60870-5-104 设备测试到 Neuron 的连接，具体步骤，见[IEC 60870-5-104 Server 模拟器连接示例](./example/server-simulator/simulator.md)。

## 数据监控

完成点位的配置后，您可点击 **监控** -> **数据监控**查看设备信息以及反控设备，具体可参考[数据监控](../../../admin/monitoring.md)。

