# ABB COMLI

COMLI 是 ABB 公司的一种专有通信协议，主要用于 ABB 的 PLC 和其他设备之间的数据交换。COMLI 协议支持点对点和多点通信，可以通过串行线路（例如 RS-232 或 RS-485）或以太网进行通信。

Neuron ABB COMLI 插件用于通过串口网络访问 ABB 的 COMLI 协议兼容控制系统。

## 添加插件

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

## 设备配置

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

| 参数                 | 说明                                                    |
| -------------------- | ------------------------------------------------------- |
| **接收超时时间** | 等待设备返回指令响应的时间。  |
| **指令发送间隔** | 发送每条读写指令之间的等待时间。某些串口设备在较短时间内接收到连续指令时，可能会丢弃某些指令。 |
| **发送重试次数** | 从机无响应指令返回时, 主机请求指令的重传次数。 |
| **串口设备** | 使用串口连接时，串口设备的路径，如 Linux 系统中 /dev/ttyS0。|
| **停止位** | 串口连接参数。 |
| **校验位** | 串口连接参数。 |
| **波特率** | 串口连接参数。 |
| **数据位** | 串口连接参数。 |

## 设置组和点位

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

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

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

### 数据类型

* INT16
* UINT16
* INT32
* UINT32
* INT64
* UINT64
* FLOAT
* DOUBLE
* BIT
* STRING

### 地址格式

> SLAVE!AREA.ADDRESS\[.BIT][#ENDIAN]\[.LEN\[H]\[L]\[D]\[E]]

#### **SLAVE**

必填，指从机地址或者是站点号。

#### AREA ADDRESS

| 区域 |数据类型 |寄存器大小| 属性  | 范围| 区域说明|备注                           |
| ---- | --------- | ---- | ---------- | ---- | ---- | -------------------------------- |
| 0    | bit       |1bit| 读/写 | 0 ~ 16384 | I/O-bits             ||
| 1   | 所有类型    |  16bit, 2byte | 读/写| 0 ~ 3071 | Register                         |bit 类型只读|


#### **.BIT**

选填，寄存器中的特定 bit，例如：
| 地址         | 数据类型 | 说明                                                |
| ----------- | ------- | --------------------------------------------------- |
| 1!1.100.0  | bit     | 指站号为1，Register 区域，地址为 100，第 0 位。    |
| 1!1.100.4  | bit     | 指站号为1，Register 区域，地址为 100，第 4 位。    |
| 2!1.200.15 | bit     | 指站号为2，Register 区域，地址为 200，第 15 位。   |

#### **#ENDIAN**

选填，字节顺序，适用于 int16/uint16/int32/uint32/float/int64/uint64/double 数据类型，详细说明见下表。
| 符号 | 字节顺序 | 支持的数据类型        | 备注 |
| --- | ------- | ------------------ | ----- |
| #B  | 2,1 or 8,7,6,5,4,3,2,1     | int16/uint16/int64/uint64/double       |       |
| #L  | 1,2 or 1,2,3,4,5,6,7,8    | int16/uint16/int64/uint64/double       | 不填，默认字节顺序 |
| #LL | 1,2,3,4 | int32/uint32/float | 不填，默认字节顺序 |
| #LB | 2,1,4,3 | int32/uint32/float | |
| #BB | 3,4,1,2 | int32/uint32/float | |
| #BL | 4,3,2,1 | int32/uint32/float | |

#### .LEN\[H]\[L]\[D]\[E]

当数据类型为 STRING 类型时，**.LEN** 是必填项，表示字符串需要占用的字节长度，每个寄存器中包含 **H**，**L**，**D** 和 **E** 四种存储方式，如下列表格所示。
| 符号 | 说明                                  |
| --- | ------------------------------------- |
| H   | 一个寄存器存储两个字节，高字节在前低字节在后。 |
| L   | 一个寄存器存储两个字节，低字节在前高字节在后。 |
| D   | 一个寄存器存储一个字节，且存储在低字节。      |
| E   | 一个寄存器存储一个字节，且存储在高字节。      |

### 地址示例

| 地址         | 数据类型 | 说明 |
| ----------- | ------- | --------- |
| 1!0.10      | bit      | 指站号为 1，I/O-bits 区域，地址为 10 |
| 1!0.1000      | bit      | 指站号为 1，I/O-bits 区域，地址为 1000 |
| 1!0.1100      | bit      | 指站号为 1，I/O-bits 区域，地址为 1100 |
| 1!1.10.12   | bit      | 指站号为 1，Register 区域，地址为 10，第12位 |
| 1!1.10      | int16    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #L |
| 1!1.10#L    | int16    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #L |
| 1!1.10#B    | int16    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #B |
| 1!1.10      | uint16    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #L |
| 1!1.10#L    | uint16    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #L |
| 1!1.10#B    | uint16    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #B |
| 1!1.10    | int32    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #LL |
| 1!1.10#BB | int32   | 指站号为 1，Register 区域，地址为 10，字节顺序为 #BB |
| 1!1.10#LB | int32   | 指站号为 1，Register 区域，地址为 10，字节顺序为 #LB |
| 1!1.10#BL | int32   | 指站号为 1，Register 区域，地址为 10，字节顺序为 #BL |
| 1!1.10    | uint32    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #LL |
| 1!1.10#BB | uint32   | 指站号为 1，Register 区域，地址为 10，字节顺序为 #BB |
| 1!1.10#LB | uint32   | 指站号为 1，Register 区域，地址为 10，字节顺序为 #LB |
| 1!1.10#BL | uint32   | 指站号为 1，Register 区域，地址为 10，字节顺序为 #BL |
| 1!1.10 | float    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #LL |
| 1!1.10#BB | float    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #BB |
| 1!1.10#LB | float    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #LB |
| 1!1.10#BL | float    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #BL |
| 1!1.10    | uint64    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #L |
| 1!1.10#B | uint64   | 指站号为 1，Register 区域，地址为 10，字节顺序为 #B |
| 1!1.10#L | uint64   | 指站号为 1，Register 区域，地址为 10，字节顺序为 #L |
| 1!1.10 | int64    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #L |
| 1!1.10#B    | int64    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #B |
| 1!1.10#L | int64   | 指站号为 1，Register 区域，地址为 10，字节顺序为 #L |
| 1!1.10 | double    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #L |
| 1!1.10#B    | double    | 指站号为 1，Register 区域，地址为 10，字节顺序为 #B |
| 1!1.10#L | double   | 指站号为 1，Register 区域，地址为 10，字节顺序为 #L |
| 1!1.10.10  | String  | 指站号为1，Register 区域，地址为 10，字符长度为 10，字节顺序为 L，即占用的地址为 10 ～ 15 |
| 1!1.10.10H | String  | 指站号为1，Register 区域，地址为 10，字符长度为 10，字节顺序为 H，即占用的地址为 10 ～ 15 |
| 1!1.10.10L | String  | 指站号为1，Register 区域，地址为 10，字符长度为 10，字节顺序为 L，即占用的地址为 10 ～ 15 |
| 1!1.10.10D | String  | 指站号为1，Register 区域，地址为 10，字符长度为 10，字节顺序为 D，即占用的地址为 10 ～ 20 |
| 1!1.10.10E | String  | 指站号为1，Register 区域，地址为 10，字符长度为 10，字节顺序为 E，即占用的地址为 10 ～ 20 |

## 数据监控

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