跳转至

字符串协议(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

固定指令模式必须能拿到总结果,所以这条输出行要勾上"是否为最终输出"。

表达式

把若干段内容按顺序首尾相接拼成一串发出去,每一段可以是固定文字,也可以是某个检测结果。

用法:

  1. "输出模式:"选"表达式"。
  2. 点"编辑输出信息",弹出一个"输出信息定制"的小窗口。
  3. 点窗口里的 ... 按钮加一行。每行是一个可以直接打字、也可以下拉选的输入框。
  4. 要引用检测结果,就从下拉里选一个变量名(见下面的变量表),这时行首的小锁图标会变成"已锁定",保存时软件会自动给它加上 & 前缀。要发固定文字,就直接把字打进去,小锁保持"未锁定"。
  5. 点垃圾桶图标删掉某一行。关掉这个小窗口就算保存。

拼接规则:

  • 固定文字段:原样拼上去。
  • 变量段:结果是"通过 / 不通过"这种是非值时,拼上"通过时指令:"或"失败时指令:"里那串字;结果是文字或数值(条码内容、卡尺读数、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):

  1. 用一根 USB 转串口线和一个串口对串口的交叉线(或者一对虚拟串口软件)把两个 COM 口连起来。
  2. 软件这边"设备设置"填其中一个 COM 口,调试助手打开另一个,波特率等参数两边一致。
  3. 点运行。软件停在"等待通讯触发(trigger#1)"。
  4. 在调试助手里发出"触发指令:"里填的那串字(例如 TRG),软件应该立刻往下走。
  5. 检测完成后,调试助手应该收到 PASS 或 FAIL。

网络(TCPSERVER):软件当服务端,调试助手建一个 TCP 客户端连到软件填的 IP 和端口;剩下步骤同上。

网络(TCPCLIENT):反过来,调试助手先建一个 TCP 服务端监听,再在软件里填这个 IP 和端口。

常见问题

一直停在"等待通讯触发(trigger#1)"。 按顺序查:

  1. 状态条上"通讯(…) 已就绪"是不是绿的。红的说明串口/网络根本没通,回设备设置。
  2. 调试助手里发的那串字和"触发指令:"是不是一模一样(注意大小写、有没有多打空格)。
  3. 发送模式 / 接收模式的 ASCII 和 HEX 两边对不对得上。对方发 ASCII 而软件按 HEX 收,收到的是一串十六进制数字,永远匹配不上。
  4. 串口是不是被别的程序占着。

PLC 收到的中文是乱码。 对方按 UTF-8 解析了。软件这边固定用 GBK,请对方改成 GBK(在很多 PLC 和上位机里叫 GB2312 / ANSI)。

PLC 收不到结果,或者收到一半。 串口模式下软件会自动补 \r\n,TCP 模式下不会。对方如果是"按行读"的,TCP 模式要在"通过时指令:""失败时指令:"末尾自己想办法加分隔符(用表达式模式在末尾拼一段固定文字)。

输出里引用的某个检测方案,值总是上一件的。 这条输出行没勾"是否为最终输出"。不勾就不等检测跑完,拿到的可能是旧值。见编辑运行顺序。

报错说某个变量找不到。 引用的变量被删了(检测方案被删 / 禁用,或者自定义变量被删)。打开"编辑输出信息"重新选一个。

相关页面