前言
通信是连通算法平台和外部设备的重要渠道,在算法平台中既支持外部数据的读入也支持数据的写出,当通信构建起来以后既可以把软件处理结果发送给外界,又可以通过外界发送字符来触发相机拍照或者软件运行。
通讯架构
通信相关的内容,主要分为了三个部分,分别为“通信管理”、“全局触发”、其他。
通信管理
通信管理分为五个部分,分别为:设备管理,接受事件,发送事件,心跳管理和响应配置。

设备管理
设备管理可用于创建通信设备,支持TCP、UDP、串口通信、Modbus、PLC等通信协议。

TCP通信:在算法平台中TCP通信既支持做客户端也支持做服务端
| 参数 | 说明 | | :——–: | :———————————————————-: | | 目标端口 | 该参数仅在TCP客户端情况下才有,填写TCP服务器的端口号即可 | | 目标IP | 该参数仅在TCP客户端情况下才有,TCP服务器的IP地址即可 | | 本机端口 | 该参数仅在TCP服务器情况下才有,此时本机作为TCP服务器,需填写本机的端口号 | | 本机IP | 该参数仅在TCP服务器情况下才有,此时本机作为TCP服务器,需填写本机的IP地址 | | 数据上传 | 开启后,软件界面上的数据会根据通信模块接收的内容实时更新 | | 自动重连 | 开启后与服务端断开后会自动重连 | | 接收结束符 | 使能后判断是否接收到结束符,并且再接收数据过程中在没有接收到结束符时将持续从缓存中接收数据直到接收到结束字符为止 | | 发送数据 | 仅供测试使用,可测试通信是否成功建立。勾选16进制也只能用于测试,不用于数据发送时的转换。仅支持发送字符串 | | 接收数据 | 仅供测试使用,测试通信是否成功建立 |
UDP通信:UDP通信和TCP通信的建立方式和使用方式基本相同,但是UDP标准协议中收发数据需要分别建立本机端口和目标端口
| 参数 | 说明 | | :——–: | :———————————————————-: | | 主机端口 | 该设备的UDP的端口号 | | 本机IP | 该设备的IP地址 | | 目标端口 | 目标设备的端口号 | | 目标IP | 目标设备的IP地址 | | 数据上传 | 开启后,软件界面上的数据会根据通信模块接收的内容实时更新 | | 自动重连 | 开启使能后断开连接后会自动重连 | | 接收结束符 | 使能后判断是否接收到结束符,并且再接收数据过程中在没有接收到结束符时将持续从缓存中接收数据直到接收到结束字符为止 | | 发送数据 | 仅供测试使用,可测试通信是否成功建立。勾选16进制也只能用于测试,不用于数据发送时的转换,仅支持发送字符串 | | 接收数据 | 仅供测试使用,测试通信是否成功建立 |
串口通信:串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。
| 参数 | 说明 | | :——–: | :———————————————————-: | | 串口号 | 本机的串口号,可在设备管理器中查看 | | 波特率 | 串口异步通讯中由于没有时钟信号,所以通讯双方需要约定好波特率,即每个码元的长度,以便对信号进行解码。常见的波特率有4800、9600、115200等 | | 数据位 | 起始位之后便是传输的主体数据内容了,也称为数据位,其长度一般被约定为6、7或8位长 | | 校验位 | 校验方法有奇校验(Odd)、偶校验(Even)、无校验(None)、标记奇偶校验(Mark)和存储器奇偶校验(space) | | 停止位 | 数据包从起始位开始,到停止位结束,双方约定一致即可 | | 字符超时 | 两次读取数据的时间间隔,可防止分包 | | 数据上传 | 开启后,软件界面上的数据会根据通信模块接收的内容实时更新 | | 自动重连 | 开启后与服务端断开后会自动重连 | | 接收结束符 | 使能后判断是否接收到结束符,并且再接收数据过程中在没有接收到结束符时将持续从缓存中接收数据直到接收到结束字符为止 | | 接收数据 | 仅供测试使用,可测试通信是否成功建立。勾选16进制也只能用于测试,不用于数据发送时的转换,仅支持发送字符串 | | 发送数据 | 仅供测试使用,测试通信是否成功建立 |
PLC通信:
在使用PLC通信时,需先在PLC设备里面建立通信连接,连接建立成功后可在设备里创建PLC通信。PLC类型支持三菱(Mitsu)、基恩士(Keyence)、松下(Mewtocol)和欧姆龙(Omronl)等;
不同PLC支持的通信方式不同,有TCP、UDP和串口等。不同通信方式需设置的通信参数有所差别,设置时可参考TCP、UDP和串口通信章节的参数介绍,基本一致。完成PLC连接后,还需对PLC寄存器地址的相关通信参数进行设置。不同类型的PLC,需设置的参数有所差别,具体请见以下表格。
基恩士PLC通信参数 说明 设备名称 可自定义设置各个地址的设备名称 整型数据类型 可选16位和32位两种值类型,可根据实际需求进行选择 软元件类型 仅支持D一种类型 软元件地址 寄存器地址,可根据实际需求自行设置 软元件点数 设置范围[1,128] 超时时间 数据轮询的超时时间,超过该时间显示运行失败 轮询读取 可根据需要使能,使能后会轮询读取使能地址的信息,不使能不读取。开启后通常会增加耗时 数据上传 开启后,软件界面上的数据会根据通信模块接收的内容实时更新 三菱PLC通信参数 说明 设备名称 可自定义设置各个地址的设备名称 帧格式 3E帧 3E帧支持二进制和ASCII报文类型,通信方式仅支持Tcp通信 3C帧格式3 3C帧格式仅支持ASCII报文类型,通信方式仅支持串口 4C帧格式5 4C帧格式仅支持二进制报文类型,通信方式仅支持串口 报文类型 配合通信协议可选ASCII和二进制两种类型 软元件类型 有X、Y、M、D四种类型 整型数据类型 可选16位和32位两种值类型,可根据实际需求进行选择 软元件地址 设置范围[0,65535] 软元件点数 设置范围[1,128] 超时时间 数据轮询的超时时间,超过该时间显示运行失败 轮询读取 可根据需要使能,使能后会轮询读取使能地址的信息,不使能不读取。开启后通常会增加耗时 数据上传 开启后,软件界面上的数据会根据通信模块接收的内容实时更新 松下PLC通信参数 说明 设备名称 可自定义设置各个地址的设备名称 站号 根据实际需求自行设置择 软元件类型 仅支持D一种类型 整型数据类型 可选16位和32位两种值类型,可根据实际需求进行选择 软元件地址 寄存器地址,可根据实际需求自行设置 软元件点数 寄存器点数,范围1~128 超时时间 数据轮询的超时时间,超过该时间显示运行失败 轮询读取 可根据需要使能,使能后会轮询读取使能地址的信息,不使能不读取。开启后通常会增加耗时 数据上传 开启后,软件界面上的数据会根据通信模块接收的内容实时更新 欧姆龙PLC通信参数 说明 设备名称 可自定义设置各个地址的设备名称 整型数据类型 可选16位和32位两种值类型,可根据实际需求进行选择 软元件地址 寄存器地址,可根据实际需求自行设置 软元件点数 寄存器点数,范围1~128 发送顺序 可选ABCD、BADC、DCBA、CDAB 超时时间 数据轮询的超时时间,超过该时间显示运行失败 轮询读取 可根据需要使能,使能后会轮询读取使能地址的信息,不使能不读取。开启后通常会增加耗时 数据上传 开启后,软件界面上的数据会根据通信模块接收的内容实时更新 汇川PLC通信参数 说明 设备名称 可自定义设置各个地址的设备名称 站号 根据实际需求自行设置 软元件类型 仅支持D一种类型 整型数据类型 可选16位和32位两种值类型,可根据实际需求进行选择 软元件地址 寄存器地址,可根据实际需求自行设置 软元件点数 寄存器点数,范围1~128 超时时间 数据轮询的超时时间,超过该时间显示运行失败 轮询读取 可根据需要使能,使能后会轮询读取使能地址的信息,不使能不读取。开启后通常会增加耗时 数据上传 开启后,软件界面上的数据会根据通信模块接收的内容实时更新 EtherNet/IP CIP通信参数 说明 设备名称 可自定义设置各个地址的设备名称 槽号 根据实际需求自行设置,范围为0~256 整型数据类型 可选16位和32位两种值类型,可根据实际需求进行选择 标签名称 类似于地址,可根据实际需求自行设置 超时时间 数据轮询的超时时间,超过该时间显示运行失败 轮询读取 可根据需要使能,使能后会轮询读取使能地址的信息,不使能不读取。开启后通常会增加耗时 数据上传 开启后,软件界面上的数据会根据通信模块接收的内容实时更新 注意:PLC地址间可进行关联,关联后整体寄存器地址长度不能超过20个;否则,可能出现异常。
MODBUS通信:Modbus协议是一个master/slave架构的协议。有一个节点是master节点,其他使用Modbus协议参与通信的节点是slave节点,目前算法平台仅支持做主站。 在使用Modbus通信时,需先建立通信连接,连接建立成功后可在设备里创建Modbus通信建立连接; Modbus支持的通信方式有TCP和串口等。不同通信方式需设置的通信参数有所差别,设置时可参考TCP和串口通信章节的参数介绍,基本一致。
| Modbus通信 | 说明 | | :——–: | :———————————————————-: | | 设备名称 | 可自定义设置各个地址的设备名称 | | 主从模式 | 目前仅支持主机模式 | | 协议类型 | 可选择RTU和ASCLL两种选择 | | Int类型 | 可选择16位和32位两种 | | 发送顺序 | 可选择ABCD、BADC、DCBA、CDAB四种顺序 仅在发送float类型数据时生效 | | 设备地址 | 指 Slave 从站地址 | | 寄存器地址 | 可根据实际需求自行设置 | | 寄存器个数 | 可根据实际需求自行设置 | | 超时时间 | 数据轮询的超时时间,超过该时间显示运行失败 | | 轮询读取 | 可根据需要使能,使能后会轮询读取使能地址的信息,不使能不读取。开启后通常会增加耗时 | | 数据上传 | 开启后,软件界面上的数据会根据通信模块接收的内容实时更新 |
接收事件
接收事件可将通信接收到的数据进行解析(数据的解析和校验),使其从一段数据解析成需要的值,也可将接收到的数据重新或自定义数据组装再发回通信设备,并可在全局触发中通过配置事件触发来响应接收事件后的操作。
处理方式可选文本、字节匹配和脚本三种方式。选择不同的方式,处理类型的设置有所差别。
- 选择文本时,事件类型可选协议组装或协议解析;
- 选择字节匹配时,事件类型只支持协议组装;
- 选择脚本时,无需设置事件类型。
综上所述,目前可建立四种事件,分别为文本-协议解析、文本-协议组装、字节匹配-协议组装、脚本,可根据实际需求创建不同的事件。
选择文本-协议解析时,相关参数介绍请见下表。
参数名称 功能介绍 绑定设备 可选择绑定对应的通信设备。 分隔符 可选择分隔符类型,使接收到的数据通过选择的分隔符进行分割。 字符长度比较 开启使能后,需设置字符长度参数。判断接收数据的长度是否符合要求。 若接收到的字符串长度与设置的长度不相等,则不会将接收到的数据配置到输出列表,且不会响应对应的事件触发(分隔符也代表一个长度)。 字符长度 设定可接收数据的字符长度。 输出列表 可配置并按顺序显示接收到的数据内容。 选择文本-协议组装时,相关参数介绍请见下表。
参数大类 参数名称 功能介绍 输入配置 绑定设备 可选择绑定对应的通信设备。 分隔符 可选择分隔符类型,使接收到的数据通过选择的分隔符进行分割。 字符长度比较 开启使能后,需设置字符长度参数。判断接收数据的长度是否符合要求。 若接收到的字符串长度与设置的长度不相等,则不会将接收到的数据配置到输出列表,且不会响应对应的事件触发(分隔符也代表一个长度)。 字符长度 设定可接收数据的字符长度。 解析列表 可配置接收到的数据与设定好的数值按顺序比较,满足解析条件后再进行组装。 组装配置 回复给设备 开启使能后,在接收到来自通信设备发送的数据并组装成功后,将组装数据发送回通信设备。 分隔符 可选择分隔符类型,使回复给设备的数据用该分隔符进行分割。 组装列表 组装列表的数据即可以上传到上层(默认会上传),也可以选择回复到设备。 选择字节匹配-协议组装时,相关参数介绍请见下表。
参数大类 参数名称 功能介绍 输入配置 绑定设备 可以选择绑定对应的通信设备 字符长度比较 开启使能后将会自动比较接收到数据的长度,若接收到的字符串长度与设置的长度不相等,则不会执行相应的操作,且不会响应对应的事件触发(分隔符也代表一个长度) 字符长度 设定字节的长度 ASCII数据 启用后,可将接收到的ASCII数据转换为16进制数据,再进行比较。 规则匹配逻辑 可设置按照哪种逻辑进行规则匹,可选与,或。 规则列表 可配置接收到的字节数据按一定的规则转换数据类型,并与设定好的数值比较 组装配置 回复给设备 开启使能后,在接收到来自通信设备发送的数据并组装成功后,将组装数据发送回通信设备。 分隔符 可选择分隔符类型,使回复给设备的数据用该分隔符进行分割。 组装列表 组装列表的数据即可以上传到上层(默认会上传),也可以选择回复到设备。 选择脚本时,相关参数介绍请见下表。
| 参数名称 | 功能介绍 | | :——–: | :———————————————————-: | | 绑定设备 | 可以选择绑定对应的通信设备。 | | 回复给设备 | 开启使能后,在接收到来自通信设备发送的数据并组装成功后,将组装数据发送回通信设备。 | | 分隔符 | 回复给设备数据可用该符号分隔不同数据。 | | 载入路径 | 可选择编写好的脚本文件。 | | 组装列表 | 显示脚本中配置好的数据。 |
发送事件
数据的组装,在通信管理中,发送事件可配置对应的参数类型并通过发送数据模块可以订阅发送事件以及订阅或自定义参数,从而实现发送数据组合。

- 事件创建
| 参数 | 说明 |
|---|---|
| 处理方式 | 可以选择文本和脚本两种种方式 |
| 事件类型 | 可选择直接输出和组装输出两种类型 |
目前可建立三种事件,分别为文本-直接输出、文本-组装输出、脚本,可根据不同的需求创建不同的事件。
文本-直接输出参数配置
| 参数 | 说明 |
|---|---|
| 绑定设备 | 可以选择绑定对应的通信设备 |
| 分隔符 | 发送的数据可用该符号分隔 |
| 参数列表 | 可配置发送的数据及其类型 |
文本-组装输出参数配置
| 参数 | 说明 |
|---|---|
| 绑定设备 | 可以选择绑定对应的通信设备 |
| 参数列表 | 可配置发送的数据及其类型 |
| 分隔符 | 发送的数据之间可用该符号分隔 |
| 组装列表 | 可对发送的数据进行自定义组装 |
脚本参数配置
| 参数 | 说明 |
|---|---|
| 绑定设备 | 可以选择绑定对应的通信设备 |
| 路径选择 | 可选择编写好的脚本文件 |
| 组装列表 | 可配置显示相对应的数据 |
心跳管理
确保通讯的连接状态,按照配置的时间间隔,反复往订阅的地址发送配置的数据。
| 参数 | 说明 |
|---|---|
| 设备 | 可以选择对应的通信设备 |
| 心跳类型 | 可选择单数据和多数据,单数据支持单个数据持续发送,多数据支持两个数据循环发送 |
| 发送内容 | 可以自定义发送的内容(PLC和Modbus只能发送整型数据) |
| 时间间隔 | 可以设置两个发送的数据之间的时间间隔,单位ms |
| 启用/关闭 | 开启使能后即可开始通讯心跳 |
| 操作 | 可删除该配置 |
响应配置
对应动作的信号提示,可以在软件实现方案的加载、相机的掉线和连接、流程的忙碌和空闲这几个动作时,发送对应的信息到通讯设备,告知设备当前的状态。
- 方案加载:启用该功能后,方案加载成功后,会向指定的通信设备发送特定内容,反馈方案已成功加载。
- 流程控制:启用该功能后,当流程状态发生变化时,会向指定的通信设备发送特定内容。流程状态有空闲和忙碌两种。
- 相机响应配置:启用该功能后,当相机状态发生变化时,会向指定的通信设备发送特定内容。相机状态有连接和掉线两种。
不同功能需要设置的参数有所差别。但通信设备均需单独设置,可下拉选择设备管理中已配置的通信方式,其他参数说明请见下表。
方案加载
| 参数 | 说明 |
|---|---|
| 通信超时时间 | 可设置服务端通信发送的超时时间,即方案加载后延时多久发送触发字符的内容。 |
| 触发字符 | 方案加载完成后通过通信发送的字符,如:A(PLC和Modbus只能发送整型数据) |
流程控制
| 参数 | 说明 |
|---|---|
| 分隔符 | 可选择流程响应时发送的数据和流程号之间的分隔符 |
| 空闲时触发 | 可配置流程空闲时通信发送的内容,如:A(PLC和Modbus只能发送整型数据),通信发送内容为{配置的字符串}{分隔符}{流程ID} |
| 忙碌时触发 | 可配置流程忙碌时通信发送的内容,如:A(PLC和Modbus只能发送整型数据),通信发送内容为{配置的字符串}{分隔符}{流程ID} |
相机响应配置
| 参数 | 说明 |
|---|---|
| 分隔符 | 可选择相机响应时发送的数据和相机编号之间的分隔符 |
| 连接时触发 | 可配置相机连接时通信发送的内容,如:A(PLC和Modbus只能发送整型数据),通信发送内容为{配置的字符串}{分隔符}{相机ID} |
| 掉线时触发 | 可配置相机断线时通信发送的内容,如:A(PLC和Modbus只能发送整型数据),通信发送内容为{配置的字符串}{分隔符}{相机ID} |
全局触发
分为两个部分,事件触发和字符串触发。

事件触发:事件触发可以根据配置的事件满足所设定的条件后,能够响应执行流程、执行模块、执行模块动作等命令,实现对操作的准确控制,如根据不同长度的字符触发不同的流程。触发事件的配置可参考接收事件章节。执行流程即触发流程运行,执行模块即单独执行订阅模块,执行模块动作目前仅支持N点标定模块的清空标定点动作。
点击
可以配置事件参数的配置,其中目标输出是绑定模块的运行参数,设置输入是绑定模块的输入参数
触发设置
| 参数 | 说明 | | :———-: | :———————————————————-: | | 触发事件 | 通过订阅对应的[接收事件](L-3.12.2 接收事件.html)来触发流程或模块动作 | | 触发命令类型 | 可选择切换方案、执行流程、执行模块、执行模块动作 | | 切换方案 | 收到一次触发后切换方案 | | 执行流程 | 收到一次触发后执行单个流程,可选择订阅对应事件中的string变量作为全局触发字符,方案中任意模块订阅TriggerString即是订阅该变量 | | 执行模块 | 收到一次触发后执行一次单个模块 | | 执行模块动作 | 执行模块中的某一个动作,目前仅支持对N点标定模块清空标定点、对数据队列清空数据队列 | | 触发配置 | 执行模块和执行模块动作需要通过触发模块订阅执行的模块,执行流程需要订阅流程的ID | | 触发动作 | 只有触发命令类型选择执行模块动作时需要配置本参数,目前仅支持N点标定的清空标定点操作 |
字符串触发:通过设置触发字符能够执行流程、执行模块、执行模块动作等命令。执行流程即触发流程运行,执行模块即单独执行订阅模块,执行模块动作目前仅支持N点标定模块的清空标定点动作。
触发设置
| 参数 | 说明 | | :———-: | :———————————————————-: | | 触发字符 | 通过设置字符来触发流程或模块动作 | | 匹配模式 | 可选择完全匹配模式、部分匹配模式和不匹配 | | 完全匹配模式 | 设置触发字符’A’后,仅收到字符’A’时才会完成触发动作 | | 部分匹配模式 | 设置触发字符’A’后,发送的字符或字符串包含字符’A’即可 | | 不匹配模式 | 设置不匹配字符后,收到任何的数据都触发,不进行匹配校验 | | 触发命令类型 | 可选择切换方案、执行流程、执行模块、执行模块动作 | | 切换方案 | 收到一次触发后切换方案 | | 执行流程 | 收到一次触发后执行单个流程 | | 执行模块 | 收到一次触发后执行一次单个模块 | | 执行模块动作 | 执行模块中的某一个动作,目前仅支持对N点标定模块清空标定点、对数据队列清空数据队列 | | 触发配置 | 执行模块和执行模块动作需要通过触发模块订阅执行的模块,执行流程无需订阅此参数 | | 触发动作 | 只有触发命令类型选择执行模块动作时需要配置本参数,目前仅支持N点标定的清空标定点操作 |
其他
其他中包含全局脚本,脚本,发送数据,接受数据,全局变量等。

通讯示例
通讯使用TCP方式(设备管理);
VisionMaster实现对物体的定位和坐标输出(匹配加格式化);
外部设备发送通信字符给软件,其格式为:Trigger,start,num,end 其中Trigger实现对流程的触发(接收事件加全局触发),start是后续组装数据的数据起始字符(接收数据加协议解析),num是需要定位的个数(接收事件加全局触发),end是返回数据的结束符(接收数据加协议解析);软件将计算得到的数据和接收到的报头和报尾进行组装,返回给外部设备(发送事件加发送数据模块);
设置心跳,检测通讯的连接状态—每隔1s循环发送0和1,验证通讯的连接状态(心跳管理);
流程执行时,软件发送busy,提示外部设备流程空闲时,软件发送free,提示外部设备(响应配置)
创建设备

创建接收事件
这里以协议组装为例,解析列表根据需求创建对应规则

创建发送事件

创建设计流程
这里订阅的信息为最后输出的信息显示

创建全局触发

设置心跳
反复往订阅的地址发送配置的数据。

设置响应
流程忙碌或者空闲时发送对应的触发字符。如:busy,1,其中busy是配置的触发字符,“,”是配置的分隔符,“1”是流程1。建立通信测试效果
可以看到通信是可以正常接收并发送数据返回了,当然通信也可以设置全局变量通过发送SetGlobalValue:var0=aaa,可以看到全局变量的值被修改了。此外还可以通过脚本来实现通信,在之前的博客已经讲了,有兴趣的可以去看之前的博客全局脚本的那篇!