字符串协议(TCP / 串口)¶
通讯设备选了 SERIALCOM、TCPSERVER 或 TCPCLIENT 时,软件和对方之间来回发的是一串文本:
对方发一句约定好的话表示"产品到位了",软件检测完再回一句 PASS 或 FAIL。
这一页讲这两句话各在哪里填、能带什么内容、怎么和 PLC 对上。
前置条件¶
- 运行端"设备设置 →通讯设备"页已经选好
SERIALCOM/TCPSERVER/TCPCLIENT并连通,状态条显示"通讯(…) 已就绪"。 - 调试端"编辑运行顺序"里已经在阶段里添加了通讯触发和通讯输出。
触发:等对方说"到位了"¶
在"编辑运行顺序"里选中 (trigger#n) 那一行,右边上半部分就是字符串触发的参数。
| 项 | 填写/含义 | 调参建议 |
|---|---|---|
| 查询命令启用 | 勾上 = 软件每隔一段时间主动发一句"问话",等对方回复;不勾 = 软件只管听,不发任何东西 | 对方(PLC)会主动推信号就不勾;对方是"你问我才答"的就勾上 |
| 查询指令: | 勾了上面才有用。软件每轮发出去的那句问话 | 和 PLC 程序约好,例如 QUERY |
| 查询间隔: | 两轮之间隔多久,单位秒 | 默认 1 太慢,产线一般调到 0.05~0.2。小于 0.01 会按 0.01 算 |
| 触发指令: | 收到完全等于这串文本时才算触发 | 例如 TRG。大小写和空格都要对得上 |
| 触发延时: | 触发到手之后再等几秒才往下走,单位秒 | 传感器装得比相机靠前时用它补上。一般填 0 |
工作方式:软件不停地循环——(勾了查询就先发一次查询指令)→ 读一次 → 读到的内容和"触发指令:"逐字比对 → 不相等就等"查询间隔"再来一轮;相等就等"触发延时"然后往下执行。
对方带不带回车都能认
软件收到数据后会先把首尾的空格和回车换行去掉再比对。所以 PLC 或调试助手发 TRG、TRG\r\n 都能命中 TRG。
这是\"看到就走\",不是\"变化才走\"
只要读到的内容等于触发指令就往下跑。如果对方把触发字符串一直挂在那儿不撤,软件跑完一轮回来一看还在,就会再拍一次。让 PLC 发完就清,或者改用产品经过式的信号。
输出:把结果发出去¶
选中 (output#n) 行,右边是输出参数。"输出模式:"三选一,决定发出去的内容长什么样。
固定指令¶
最简单也最常用:总结果通过就发"通过时指令:"里那串字,不通过就发"失败时指令:"里那串。
| 项 | 填写/含义 | 调参建议 |
|---|---|---|
| 通过时指令: | 总结果 OK 时发这串,默认 PASS |
PLC 那边按什么解析就填什么 |
| 失败时指令: | 总结果 NG 时发这串,默认 FAIL |
固定指令模式必须能拿到总结果,所以这条输出行要勾上"是否为最终输出"。
表达式¶
把若干段内容按顺序首尾相接拼成一串发出去,每一段可以是固定文字,也可以是某个检测结果。
用法:
- "输出模式:"选"表达式"。
- 点"编辑输出信息",弹出一个"输出信息定制"的小窗口。
- 点窗口里的
...按钮加一行。每行是一个可以直接打字、也可以下拉选的输入框。 - 要引用检测结果,就从下拉里选一个变量名(见下面的变量表),这时行首的小锁图标会变成"已锁定",保存时软件会自动给它加上
&前缀。要发固定文字,就直接把字打进去,小锁保持"未锁定"。 - 点垃圾桶图标删掉某一行。关掉这个小窗口就算保存。
拼接规则:
- 固定文字段:原样拼上去。
- 变量段:结果是"通过 / 不通过"这种是非值时,拼上"通过时指令:"或"失败时指令:"里那串字;结果是文字或数值(条码内容、卡尺读数、SN)时,原样拼上去。
举例:依次放 SN:、变量 SN、,、变量 总结果,发出去就是 SN:AB1234,PASS。
字典¶
发一段 JSON 文本,适合上位机按字段解析。
用法和表达式一样,只是每行多了一个左边的输入框用来填键名,右边填值(固定文字或选一个变量)。发出去的样子是 {"键1": "值1", "键2": "值2"}。
规则:
- 值里引用变量的,替换成该变量的结果;是非值同样换成"通过时指令:"/"失败时指令:"里的字。
- 只支持一层,值不能再是一个列表或字典。
- 中文键名会原样发出去,不会被转成
\uXXXX转义。
能引用哪些变量¶
下拉框里列出来的就是当前工程能用的全部变量:
| 变量 | 是什么 | 值的样子 |
|---|---|---|
相机工位名->检测方案名 |
每个启用的检测方案一条。这个方案本轮通没通过 | 是非值 |
总结果 |
这一件产品的最终结论 | 是非值 |
检测时间 |
取结果那一刻的时间 | 例如 2026-09-14 10:23:41 |
SN |
这一件的 SN 码 | 文本。工程里没开 SN 检查时是空串 |
| 自定义变量 | 你自己挂上去的检测项输出 | 文本或数值 |
整件逻辑->名字 |
每条启用的整件逻辑检测一条,存成 &整件逻辑->名字。只在所有方案跑完以后才有,只能用在勾了"最终输出"的输出里 |
是非值 |
自定义变量怎么来的:
- 在调试端的检测项上点右键 →"设为自定义变量",给它起个名字。能这么挂的检测项类型有:字符识别、码检测、条码字符对、可变区域、卡尺。挂上之后,这个检测项识别出来的内容(条码内容、识别出的字符)或量出来的数值(卡尺毫米数)就能在输出里引用。
- 在"编辑运行顺序"里插的每一行"串口收发数据"(接收模式)会自动产生一个同名变量,存的是这一行收到的那段文本。
- 想看现在有哪些变量、当前值是多少,在调试端"菜单"→"查看自定义变量"里看。
变量名不能叫 SN、总结果、检测时间
这三个是软件保留的名字,新建自定义变量时用它们会提示"变量名已存在或非法"。
另外,引用了一个后来被删掉的变量,运行到这条输出时会报错停机,报错里会列出当前所有可用的变量名。
编码、换行和 HEX 模式¶
- 编码是 GBK。文本发出去和收进来都按 GBK 编解码,所以中文能正常往返。纯英文数字的指令不受影响。
- 串口模式下软件会自动补回车换行:
SERIALCOM且发送模式是ASCII时,发出去的每条数据末尾如果没有换行符,软件会补上\r\n。TCP 的两种模式不会自动补,需要换行就自己在指令末尾加。 - 收数据一律去首尾空白,所以对方带不带
\r\n都能匹配上。 - HEX 模式:发送模式选
HEX时,你填的指令要写成合法的十六进制字符串(字符个数必须是偶数,可以带空格),软件按十六进制转成字节发出去。接收模式选HEX时,收到的字节会显示成小写十六进制、每字节之间一个空格,例如01 03 00 01——这时"触发指令:"也要按这个格式填。
联调:用调试助手冒充 PLC¶
真 PLC 程序还没写好、或者怀疑是软件这边的问题时,用一个串口 / 网络调试助手先把链路跑通。
串口(SERIALCOM):
- 用一根 USB 转串口线和一个串口对串口的交叉线(或者一对虚拟串口软件)把两个 COM 口连起来。
- 软件这边"设备设置"填其中一个 COM 口,调试助手打开另一个,波特率等参数两边一致。
- 点运行。软件停在"等待通讯触发(trigger#1)"。
- 在调试助手里发出"触发指令:"里填的那串字(例如
TRG),软件应该立刻往下走。 - 检测完成后,调试助手应该收到
PASS或FAIL。
网络(TCPSERVER):软件当服务端,调试助手建一个 TCP 客户端连到软件填的 IP 和端口;剩下步骤同上。
网络(TCPCLIENT):反过来,调试助手先建一个 TCP 服务端监听,再在软件里填这个 IP 和端口。
常见问题¶
一直停在"等待通讯触发(trigger#1)"。 按顺序查:
- 状态条上"通讯(…) 已就绪"是不是绿的。红的说明串口/网络根本没通,回设备设置。
- 调试助手里发的那串字和"触发指令:"是不是一模一样(注意大小写、有没有多打空格)。
- 发送模式 / 接收模式的
ASCII和HEX两边对不对得上。对方发ASCII而软件按HEX收,收到的是一串十六进制数字,永远匹配不上。 - 串口是不是被别的程序占着。
PLC 收到的中文是乱码。 对方按 UTF-8 解析了。软件这边固定用 GBK,请对方改成 GBK(在很多 PLC 和上位机里叫 GB2312 / ANSI)。
PLC 收不到结果,或者收到一半。
串口模式下软件会自动补 \r\n,TCP 模式下不会。对方如果是"按行读"的,TCP 模式要在"通过时指令:""失败时指令:"末尾自己想办法加分隔符(用表达式模式在末尾拼一段固定文字)。
输出里引用的某个检测方案,值总是上一件的。 这条输出行没勾"是否为最终输出"。不勾就不等检测跑完,拿到的可能是旧值。见编辑运行顺序。
报错说某个变量找不到。 引用的变量被删了(检测方案被删 / 禁用,或者自定义变量被删)。打开"编辑输出信息"重新选一个。