# Brother CNC

Brother CNC 驱动用于通过 Brother NC 协议访问 Brother（兄弟）数控加工中心，采集机床的坐标、主轴、刀具、报警、计件、程序号、PLC 软元件以及刀具补偿等运行数据。驱动支持通过串口（Serial）或以太网（Ethernet）两种物理链路与设备建立连接。

通用配置步骤见[添加南向驱动](../south-devices.md)与[组与点位](../../groups-tags/groups-tags.md)。

::: tip
Brother CNC 驱动为只读驱动，仅支持数据采集（读取），不支持反向控制（写入）。
:::

## 添加驱动

在 **数据采集 → 南向设备** 页点击 **添加设备**，驱动类型选择 **Brother CNC**。

## 连接参数

点击驱动卡片进入**设备配置**页填写：

| <div style="width:100pt">参数</div> | 说明 |
| ------------------ | ----------------------------------------------------------- |
| **物理链路** | 选择使用 Serial（串口）或者 Ethernet（以太网）通信介质，默认为 Ethernet。 |
| **连接超时时间 (ms)** | 等待设备返回指令响应的时间，取值范围 1000~30000，默认为 3000。 |
| **串口设备** | 串口模式下，串口设备的路径，如 Linux 系统中 /dev/ttyS0。 |
| **波特率** | 串口模式下的连接参数，可选 115200/57600/38400/19200/9600/4800，默认为 9600。 |
| **数据位** | 串口模式下的连接参数，可选 7/8，默认为 8。 |
| **停止位** | 串口模式下的连接参数，可选 1/2，默认为 1。 |
| **校验位** | 串口模式下的连接参数，可选 none/odd/even，默认为 none。 |
| **CNC IP 地址** | 以太网模式下，目标 CNC 设备的 IPv4 地址。 |
| **CNC 端口** | 以太网模式下，目标 CNC 设备的端口号，取值范围 1~65535，默认为 10000。 |

## 点位配置

以下为本驱动支持的数据类型与地址格式。

::: tip
Brother CNC 驱动仅支持点位属性为**只读**。采集时驱动会按数据区域（PDSP、ALARM、PLCD 等）对同组点位进行批量请求，建议将同一区域的点位归入同一组以提升采集效率。
:::

### 数据类型

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

### 地址格式

Brother CNC 驱动按数据区域（Area）组织点位地址，不同区域的地址格式与支持的数据类型有所不同。

#### PDSP（机床运行数据）

| 地址 | 数据类型 | 属性 | 说明 |
| ----------------------- | --------------------------------------------------- | ---- | -------------- |
| PDSP.MACHINE_X | INT16/UINT16/INT32/UINT32/INT64/UINT64/FLOAT/DOUBLE | 只读 | 机床 X 轴坐标 |
| PDSP.MACHINE_Y | INT16/UINT16/INT32/UINT32/INT64/UINT64/FLOAT/DOUBLE | 只读 | 机床 Y 轴坐标 |
| PDSP.MACHINE_Z | INT16/UINT16/INT32/UINT32/INT64/UINT64/FLOAT/DOUBLE | 只读 | 机床 Z 轴坐标 |
| PDSP.FEED_SPEED | INT16/UINT16/INT32/UINT32/INT64/UINT64/FLOAT/DOUBLE | 只读 | 进给速度 |
| PDSP.SPINDLE_SPEED | INT16/UINT16/INT32/UINT32/INT64/UINT64/FLOAT/DOUBLE | 只读 | 主轴转速 |
| PDSP.TOOL_NO | INT16/UINT16/INT32/UINT32/INT64/UINT64 | 只读 | 当前刀具号 |
| PDSP.NEXT_TOOL_NO | INT16/UINT16/INT32/UINT32/INT64/UINT64 | 只读 | 下一刀具号 |
| PDSP.RAPID_OVERRIDE | INT16/UINT16/INT32/UINT32/INT64/UINT64 | 只读 | 快移倍率 |
| PDSP.FEED_OVERRIDE | INT16/UINT16/INT32/UINT32/INT64/UINT64 | 只读 | 进给倍率 |
| PDSP.SPINDLE_OVERRIDE | INT16/UINT16/INT32/UINT32/INT64/UINT64 | 只读 | 主轴倍率 |

#### ALARM（报警数据）

| 地址 | 数据类型 | 属性 | 说明 |
| ----------- | -------------------------------- | ---- | ----------------------------------- |
| ALARM.\<N\> | INT32/UINT32/INT64/UINT64 | 只读 | 报警数据，N 为报警数据列索引（从 0 开始） |

#### WKCNTR（计件数据）

| 地址 | 数据类型 | 属性 | 说明 |
| ------------ | -------------------------------------- | ---- | -------- |
| WKCNTR.COUNT | INT16/UINT16/INT32/UINT32/INT64/UINT64 | 只读 | 加工计件数 |

#### PRDC2（生产时间数据）

| 地址 | 数据类型 | 属性 | 说明 |
| ----------------- | -------------------------------------- | ---- | -------- |
| PRDC2.CYCLE_TIME | INT16/UINT16/INT32/UINT32/INT64/UINT64 | 只读 | 循环时间 |
| PRDC2.CUTTING_TIME | INT16/UINT16/INT32/UINT32/INT64/UINT64 | 只读 | 切削时间 |

#### PRGN（程序号数据）

| 地址 | 数据类型 | 属性 | 说明 |
| ------------ | ---------------------- | ---- | -------------- |
| PRGN.CURRENT | INT32/UINT16/STRING | 只读 | 当前程序号 |
| PRGN.MAIN | INT32/UINT16/STRING | 只读 | 主程序号 |
| PRGN.BLOCK | INT32/UINT16/STRING | 只读 | 当前程序段号 |

#### PLCD（PLC 软元件）

| 地址 | 数据类型 | 属性 | 说明 |
| ------------- | --------------------------------------------- | ---- | ------------------------------ |
| PLCD.D.\<N\> | INT16/UINT16/INT32/UINT32/FLOAT/DOUBLE | 只读 | D 数据寄存器，N 为寄存器地址 |
| PLCD.M.\<N\> | BIT/BOOL | 只读 | M 继电器，N 为寄存器地址 |

#### TOLSD（刀具补偿数据）

| 地址 | 数据类型 | 属性 | 说明 |
| ------------------------- | -------------------------------------------------------- | ---- | ------------------------------------------ |
| TOLSD.\<DB\>.\<ID\>.\<N\> | INT16/UINT16/INT32/UINT32/INT64/UINT64/FLOAT/DOUBLE | 只读 | 刀具补偿数据，DB 取值 1~10，ID 取值 1~99，N 为数据列索引 |

### 地址示例

| 地址 | 数据类型 | 说明 |
| ----------------- | -------- | ---------------------------------- |
| PDSP.MACHINE_X | FLOAT | 机床 X 轴坐标 |
| PDSP.SPINDLE_SPEED | INT32 | 主轴转速 |
| PDSP.TOOL_NO | INT16 | 当前刀具号 |
| PDSP.FEED_OVERRIDE | INT32 | 进给倍率 |
| ALARM.1 | INT32 | 报警数据第 1 列 |
| WKCNTR.COUNT | INT32 | 加工计件数 |
| PRDC2.CYCLE_TIME | INT32 | 循环时间 |
| PRGN.CURRENT | INT32 | 当前程序号 |
| PRGN.MAIN | STRING | 主程序号 |
| PLCD.D.100 | INT16 | D 寄存器，地址为 100 |
| PLCD.M.2048 | BIT | M 继电器，地址为 2048 |
| TOLSD.1.1.2 | FLOAT | DB 为 1，刀具 ID 为 1，数据列索引为 2 |
