4. 视觉系统与PLC握手:输出格式定义、数据接收解析与通信状态机设计
各位工程师朋友,这一章咱们来聊聊视觉系统和PLC之间怎么「握手」。说白了,就是视觉系统把检测结果告诉PLC,PLC得能听懂、能接住。我在现场调试时见过太多因为格式不统一、解析逻辑混乱导致的通信故障,所以这一节的内容,我建议你认真看完。
4.1 视觉系统输出格式定义——先定规矩
视觉系统算完了坐标、角度、OK/NG,总得有个方式告诉PLC。我个人习惯用字符串格式,简单、直观、好调试。你想想看,PLC那边解析字符串,比解析二进制流要省心得多。
我常用的输出格式长这样:
# 格式: 结果, X坐标, Y坐标, 角度, 附加信息
OK, 123.45, 678.90, 45.2, 0
NG, 0, 0, 0, 1
这里有几个要点:
- 分隔符统一:我用逗号,也有人用空格或分号。关键是视觉和PLC两边约定好。
- 固定字段顺序:结果、X、Y、角度、附加信息,顺序不能乱。
- 数值精度:我一般保留两位小数,PLC那边处理浮点数够用就行。
重要: 输出格式一定要写在项目文档里。我在一个项目中吃过亏,视觉工程师改了输出格式没通知我,结果PLC解析全乱套了。
4.2 PLC数据接收解析——把字符串变成数据
PLC收到视觉系统发来的字符串,得把它拆开、转换、存到寄存器里。以三菱FX5U为例,我常用的解析逻辑是这样的:
// 伪代码示例
// 假设接收缓冲区 D100 中存了字符串 "OK,123.45,678.90,45.2,0"
// 1. 查找逗号位置
Pos1 = INSTR(D100, ",")
Pos2 = INSTR(D100+Pos1+1, ",")
Pos3 = INSTR(D100+Pos2+1, ",")
Pos4 = INSTR(D100+Pos3+1, ",")
// 2. 提取各字段
ResultStr = MID(D100, 1, Pos1-1) // "OK"
XStr = MID(D100, Pos1+1, Pos2-Pos1-1) // "123.45"
YStr = MID(D100, Pos2+1, Pos3-Pos2-1) // "678.90"
AngleStr = MID(D100, Pos3+1, Pos4-Pos3-1) // "45.2"
ExtraStr = MID(D100, Pos4+1, LEN(D100)-Pos4) // "0"
// 3. 字符串转数值
X = VAL(XStr)
Y = VAL(YStr)
Angle = VAL(AngleStr)
Extra = VAL(ExtraStr)
// 4. 判断结果
IF ResultStr = "OK" THEN
M100 = ON // OK标志
ELSE
M100 = OFF // NG标志
END_IF
这段逻辑看着简单,但实际调试时坑不少。我曾经遇到一个问题:视觉系统输出的字符串末尾多了个回车换行符,导致解析时最后一个字段多了一个字符。后来我加了个字符串修剪函数才解决。
小技巧: 在PLC里定义一个字符串接收完成标志位。当视觉系统发完一帧数据后,置位这个标志,PLC再开始解析。这样可以避免解析到不完整的数据。
4.3 通信状态机设计——让握手更可靠
通信不是一次性的,它是一个持续的过程。我习惯用状态机来管理。状态机说白了就是给通信过程画个流程图,每一步该干什么、出错了怎么办,都提前想好。
下面是我画的一个典型通信状态机流程图:
这个状态机有四个状态:
- S0 空闲:PLC等待触发信号,比如传感器检测到工件到位。
- S1 发送请求:PLC给视觉系统发一个拍照指令。
- S2 等待响应:PLC等待视觉系统返回检测结果。这里要加超时处理。
- S3 数据解析:PLC解析收到的字符串,存到寄存器里。
状态机的好处是:每个状态只做一件事,逻辑清晰。出错了也知道退回到哪个状态。我曾经在一个项目中,没有用状态机,结果通信卡死了都不知道是哪个环节出的问题。
注意: 超时处理一定要做。我曾经遇到过视觉系统死机,PLC一直傻等,整个产线都停了。后来加了超时,超时后自动复位到空闲状态,产线还能继续跑。
4.4 实战中的避坑指南
做视觉引导PLC通信,有几个坑我踩过,分享给你:
- 字符串长度限制:PLC的接收缓冲区是有限的,比如三菱FX5U的字符串变量最长255个字符。视觉系统输出别太长。
- 通信速率匹配:视觉系统处理需要时间,PLC别发指令太频繁。我一般加个100ms的延时。
- 数据校验:可以在字符串末尾加个校验和,PLC收到后校验一下,防止数据传输出错。
嗯,这一章的内容就这些。格式定义、解析逻辑、状态机设计,这三块搞定了,视觉和PLC的握手基本就稳了。下次调试时,你可以试试我分享的这些方法。
核心总结:
- 输出格式要统一、固定、文档化
- 解析逻辑要健壮,考虑异常情况
- 状态机让通信过程可控、可维护
- 超时处理是保命符,一定要加