☰
FX3U与得利捷扫码枪RS232无协议通信实战:从接线到解析
2026/10/18 23:20:11 网站建设 项目流程

搞工业自动化的兄弟都懂,扫码枪和PLC联机这套活,说简单是真简单——串口线一接、参数一对,数据就进来了;说麻烦也是真麻烦,现场变频器一开、地线没接好、参数差一位,一个下午就交代进去了。上个月我在一条包装线刚收拾完一套FX3U配得利捷扫码枪的方案,从选型、接线、配参数到写程序,基本把常见的坑都踩了一遍。今天就把这套实战经历完整掏出来,从硬件怎么接、得利捷扫码枪怎么配,到FX3U的RS指令怎么用、数据怎么解析,一条一条说清楚。不管你是做扫码追溯、工位防错还是包装分拣,这套思路基本都能直接套用。

1. 整体方案怎么选:FX3U配得利捷这套组合到底好在哪

1.1 为什么多数现场选RS232无协议方案

先聊选型。扫码枪和PLC之间通信,常见无非三种路子:RS232串口、RS485总线、以太网。三种方式我在不同项目里都试过,但FX3U这种级别的小型PLC,现场十套里有七八套走的还是RS232无协议。

原因很简单:便宜、直接、误码率稳定可控。扫码枪本质是个单向设备,它自己扫到条码之后往外吐一串ASCII字符,PLC这边只需要老老实实收下来。这种“设备主动上传、PLC被动接收”的场景,恰好是无协议通信的舒适区。

RS485要多站组网、设站号、写指令帧轮询,程序复杂度翻倍。以太网方案虽然速度快、数据量也大,但FX3U本体没有网口,要加扩展模块或者走协议转换网关,预算和调试时间都会上来。一条包装线的扫码追溯工位,产品节拍通常也就几秒一件,RS232的115200波特率完全够用,没必要在通信方式上给自己找事。

还有一个实际原因:现场电气柜里老一代工程师对串口维护最熟,出了问题拿个万用表就能量,不用抱着笔记本抓包。这也是方案能不能在车间活下来的重要因素。

1.2 整体架构梳理:扫码触发和数据流向

这套方案里,FX3U负责逻辑控制和数据暂存,得利捷扫码枪负责读码。两者之间通过一块FX3U-232-BD通信扩展板对接。为什么特意加扩展板而不是用PLC本体自带的编程口?因为那个编程口是调试用的,既不稳定也不安全,用它做生产通信相当于把工具当武器使,早晚出问题。

数据流向大概是这样的:产品到位,光电传感器把信号送给扫码枪的触发输入,扫码枪完成拍照和解码,把ASCII码通过RS232发给FX3U。FX3U收到数据后做简单解析,一方面把条码存进数据寄存器,另一方面和当前工单比对,不一致就亮红灯停机。如果需要上传MES,PLC再把数据转给触摸屏或上位机。

这里有一个值得注意的点:扫码枪触发方式尽量用外部传感器触发,别用连续自动读取模式。连续模式在流水线上容易重复读、误触发、读到上一件产品,后患无穷。用外部触发,每件产品到位读一次,帧边界也干净,PLC处理起来舒服很多。

2. 接线和扫码枪参数配置:动手前先把这几个坑填了

2.1 串口接线:TX/RX交叉、屏蔽和共地一个都不能少

硬件接线这一步很多兄弟觉得简单,恰恰是翻车率最高的环节。FX3U-232-BD扩展板上是一个DB9公头,得利捷扫码枪的串口线一般是母头,标准RS232引脚定义里,公头的2脚是RXD接收、3脚是TXD发送、5脚是GND。设备之间对接要交叉连接:PLC的2脚(RXD)接扫码枪的3脚(TXD),PLC的3脚(TXD)接扫码枪的2脚(RXD),5脚接5脚。

听起来很顺,但现场最容易犯的错是直接用一根两头都是母头的串口线怼上去,或者拿公对公线硬接,结果TX对TX、RX对RX,数据当然一个字节都进不来。我上个月调试时碰到一次“完全收不到数据”的情况,查了半天发现是前一个项目留下的交叉线被换成了直通线,方向彻底反了。所以接线前先用万用表把线序量出来,是直通还是交叉要心里有数。

比线序更隐蔽的是接地问题。扫码枪和PLC通常在同一个柜子里,但供电可能来自两个不同的开关电源。两个电源的0V不共地时,串口两端的地电位会有压差,轻则数据偶尔乱码、丢帧,重则通信板莫名其妙发烫甚至烧毁。我在项目中要求扫码枪电源的0V和PLC电源的0V必须单点接到一起,而且串口线屏蔽层只在PLC这一端接地,另一端不接,防止形成地环路。

另外RS232线长不要超过15米,这是物理特性决定的。扫码枪如果装在离PLC柜很远的工位上,老老实实改RS485+转换器或者以太网方案,硬拉15米以上的RS232线大概率会和干扰斗智斗勇。

2.2 得利捷扫码枪配置:用电脑先调出一个干净输出

得利捷扫码枪上电之前,我强烈建议先别碰PLC,把扫码枪单独接到电脑上调通。得利捷有官方配置软件,用USB线或者USB转串口线连上电脑就能读到设备。第一次连接时可能要找一下虚拟COM口号,在设备管理器里确认好端口编号就行。

打开配置软件后,重点看几个地方。通信参数必须和PLC约定好:波特率9600、8位数据位、1位停止位、无校验。这一套组合在工程里叫“9600 8N1”,是出镜率最高的一档配置。数据位、停止位、校验位有一项对不上,PLC收到的就是一堆乱码。

然后是输出格式。扫码枪默认输出往往带着前导符、后缀符、回车换行一整套。我处理的原则是能清就清,在配置里把前缀、后缀都置空,只保留“条码内容+回车换行”。这样PLC拿到的数据干净,解析逻辑简单很多。如果客户对防错要求高,可以开启BCC校验输出,扫码枪会在条码后面附加一段异或校验结果。这个功能我可以接受,但PLC程序里要写对应的校验计算代码,工作量会增加,一般客户没要求时我会默认关掉。

触发方式也在软件里设置。选外部传感器触发,并把触发极性调对。什么是极性?就是传感器来信号时,触发电平是高有效还是低有效。不同传感器输出电平不一样,配错了扫码枪要么一直处在读码状态,要么怎么触发都没反应。这个极性在现场调试时一定要实测,不能只看图纸。

码制也要在这里设置。现场要扫Code128还是EAN-13,是DataMatrix还是QR,都要把对应码制勾上。很多师傅环境配置漏了码制,扫半天扫不出,还以为扫码枪坏了。顺便把条码长度上下限也设一下,比如最短4位、最长64位,可以挡掉不少意外的误读。

配置完毕后记得保存到设备,并退出配置模式。有些型号配置完拔掉USB线就会自动回到运行模式,但稳妥起见,在软件里明确执行一下保存和退出,否则扫码枪可能还挂在配置状态,不响应现场触发。

3. PLC程序设计与条码解析:RS指令和D8120怎么落

3.1 D8120和RS指令:无协议通信的核心设置

硬件和扫码枪都备好了,接下来是PLC程序。FX3U做无协议串口通信,绕不开两个东西:特殊数据寄存器D8120和RS指令。

D8120是通信格式的总开关。PLC用哪个串口参数工作,都由这个寄存器决定。工程里最常用的一组配置是H0081,对应无协议通信、9600波特率、8位数据、无校验、1位停止位。把这串十六进制数写进D8120,就相当于告诉PLC“我按9600 8N1接收外部数据”。

程序里一般用首次扫描脉冲把它写进去:

LD M8002 MOV H0081 D8120

这里有个小经验:D8120在PLC运行期间修改后,不一定立刻生效,有些情况下要重新上电才保险。所以改完参数别急着测,断电重启一下,能省很多莫名其妙的排查时间。

RS指令负责真正的数据收发。格式是这样的:

RS D200 K0 D300 K128

D200是发送缓冲区首地址,K0表示发送长度为零——我们这套方案里PLC不下发任何数据给扫码枪,因为扫码枪是外部触发,触发后自己往PLC发条码。D300是接收缓冲区首地址,K128是接收长度,单位是“字”,也就是最多能接收128个字的数据。

RS指令在程序中要用常开条件一直驱动,让它保持待命。其中有两个特殊继电器要牢记:M8122是发送请求,我们不用;M8123是接收完成标志,当一帧数据完整接收后自动置ON。PLC程序要做的就是等M8123亮起来,然后去缓冲区把数据搬走。

3.2 接收缓冲区的“挤字”问题:数据为什么要拆字节

这里有个特别坑的细节,很多新手第一次必然栽跟头:RS指令接收到的原始数据,在D寄存器里的排列不是“一个D寄存器存一个字符”,而是“两个ASCII字符挤在一个16位寄存器里”。

举个例子。扫码枪发出一串“ABC123”,假设ASCII码依次是41 42 43 31 32 33,那么在接收缓冲区里看到的样子是这样的:D300的低字节是0x41(A),高字节是0x42(B);D301的低字节是0x43(C),高字节是0x31(1);D302低字节是0x32(2),高字节是0x33(3)。也就是说,每个D寄存器像一辆坐了两人的摩托车,前后座各坐一个字符。

如果程序直接把D300的值拿去用,看到的是一堆压缩过的数据,根本没法当条码来比对。所以解析条码的第一步,是把这些高低字节拆开,还原成一串连续的ASCII字符。我在项目里一般把接收缓冲区看成“字节流”,逐个取出低字节和高字节,再存到另一个专门的字符数组里做后续处理。

这个知识点看起来小,但直接影响整个解析逻辑的设计。曾经有个项目里,程序按“一个字符一个D寄存器”去处理,结果对比总是只能对上奇数位字符,偶数位全部丢失,查了半天才发现是高低字节没拆开。

3.3 条码解析逻辑:扫描回车符,截取有效内容

拆完字节之后,下一个核心问题是怎么确定“一条完整的条码到哪里结束”。因为条码长度不定,有的8位,有的20位,接收缓冲区的长度是固定的128字,不能直接用固定长度去截。

我的做法是找结束标志。扫码枪默认输出条码后会自动带一个回车换行,也就是0D 0A。所以解析逻辑变得清晰:从缓冲区开头逐字扫描,找到0D 0A,前面的所有字符就是本次读取的完整条码。

这个扫描过程有个隐藏陷阱,前面说了数据是高低字节挤在一起的,所以0D和0A这两个字节可能出现在同一个D寄存器里(低字节是0D、高字节是0A),也可能一个跨在上一字的高字节、一个落在下一字的低字节。程序在查找结束符时,这两种情况都要覆盖,否则偶发丢帧、截断条码的问题就出来了。

解析完成之后,把有效条码存进另一片寄存器作为最终结果。我习惯在D500保存条码长度,D501开始连续存放条码的ASCII码。这样上位机、触摸屏来读取时,一看D500知道有多长,再从D501往后取对应数量的字符就行,非常直观。

伪代码大致是:

接收完成(M8123=ON)后: 1. 从D300起逐字扫描,最多128字 2. 检查是否出现0D 0A,记录当前字符位置N 3. 从0到N之间的所有ASCII字符提取出来 4. 长度N写入D500,字符依次写入D501起始区域 5. 处理完毕,复位M8123,等待下一帧

还有几个程序层面的细节值得提。第一,M8123亮起来后不要立刻复位,先把数据搬完再复位,否则缓冲区被下一帧数据覆盖,这帧就白收了。第二,条码比对逻辑里建议加一个“长度先比对”,长度不一样的条码直接判不合格,速度快又准。第三,收到数据但解析不出有效条码时,要给一个超时或者出错标志,别让设备停在一个不明确的状态,现场操作员会懵。

4. 现场调试顺序与问题排查:从串口助手到在线监控

4.1 推荐调试顺序:先电脑后PLC,别上来就写程序

我把这套方案调试过三遍之后,总结出一条铁律:先让扫码枪对着电脑“说话”,再让PLC和扫码枪联机。

具体步骤是这样的。第一步,用USB转串口线把扫码枪接到电脑,打开串口调试助手,波特率设成9600、8N1,手动触发一次扫码,看串口助手能不能收到一条干净的ASCII数据。这一步能验证扫码枪本身有没有问题、码制配置对不对、输出格式是不是预期的。收到的数据里如果杂七杂八带了一堆前缀后缀,先回扫码枪配置里清掉,再继续。

第二步,挂一个光电传感器上去,用外部信号触发扫码枪,确认触发极性正确、每触发一次只出一帧数据。这一步验证的是现场触发链路。

第三步,把串口线从电脑换到FX3U的232扩展板上。打开编程软件,在线监控M8123和接收缓冲区D300。手动触发扫码,看M8123会不会亮起来,看D300里有没有数据进来。如果这一步通过,说明物理链路和串口参数没问题,剩下的就是程序解析逻辑的事情。

第四步,把解析逻辑打开,看D500里的条码内容和扫码枪实际扫到的内容一不一致。一致了,再做和工单比对、报警输出、MES上传这些外围逻辑。这套顺序走下来,每步都有明确的验证点,出了问题能快速锁定在硬件层、参数层还是程序层。

4.2 高频问题排查速查表

下面这张表是这类项目里出镜率最高的几个问题,基本涵盖了现场调试的百分之八十的坑。

现象可能原因解决办法
完全收不到数据TX/RX接反、线序不对用万用表量线序,交换TXD/RXD
收到一堆乱码波特率、数据位、校验位不匹配两边统一为9600 8N1,检查D8120
偶发丢帧、乱码电源不共地、屏蔽层双端接地单点共地,屏蔽层单端接地
扫码枪不出数据触发极性配置错误在配置软件里切换触发电平极性实测
条码内容带前缀后缀扫码枪输出格式含多余字符清空前缀后缀,只留CR LF
条码截断、内容不全回车符跨字未识别、缓冲区过小解析兼容跨字0D0A,加大接收长度
扫一次触发多条数据连续读取模式改为外部传感器单次触发
数据量多、缓冲区溢出条码长度超过预留缓冲区按最长条码重算接收长度

每一条都值得在现场亲手验证一遍。比如“偶发丢帧”这种问题,最难查,因为不是每次都出现。这种时候我会把扫码枪和PLC的电源共地先处理掉,再把串口线换成屏蔽双绞线,并把线缆挪到远离变频器主回路的线槽里,八成问题能解决。

4.3 容易忽略的现场细节:触发极性、码制、曝光

最后聊几个软件里很不起眼、但实际影响特别大的现场参数。

触发极性这个我前面提过,但它值得单独再说一次。得利捷扫码枪的触发输入一般可以配置为高电平触发或者低电平触发。比如某品牌的接近开关是PNP输出,给高电平;另一块传感器是NPN输出,给低电平。如果配置时没有按照实际传感器选对极性,扫码枪要么永远在扫、要么永远不扫。我建议在配置软件里把触发模式改成“外部触发”后,先用最笨的方法——手碰一下极性设置,观察扫码枪的指示灯有没有反应,把正确极性确定下来,再做后面的事情。

码制启用也是一个容易被忽略的坑。很多扫码枪出厂默认只开了一部分通用码制,如果现场用的是某一种特定的二维码,比如DataMatrix,结果没在配置里打开,扫码枪就只会“看”到却解不出,表现为指示灯闪一下但数据始终不出来。

还有一个现场环境问题:反光和曝光。包装膜、亚克力板、金属表面的强反光都会影响读码成功率。得利捷扫码枪的配置软件里通常有曝光时间和增益调节,我试过在一条塑料膜包装生产线上,默认参数下读码成功率只有八成,把曝光时间适当调低、开启偏振相关的读码模式后,基本稳定在99%以上。这些参数没有绝对标准,得看现场物料,但一定要知道可以调。

另外,条码打印质量差、内容格式对不上的问题也常见。有人会觉得扫码枪“应该什么码都能读”,实际上磨损、褶皱、打印浓度不足的条码,工业扫码枪照样容易翻车。这时候先去查条码本身的质量,别急着折腾通信配置。现场发现扫不上,拿同一张条码先用扫码枪自带的LED指示或者配置软件里的图像预览看一下成像效果,能省很多无用功。

这套FX3U配得利捷的方案,我在车间里已经复用了几回,最大的体会是:串口联机真正难的不是“接通”,而是把现场各种干扰和参数意外提前想清楚。别急着上电写程序,先把线接对、把扫码枪用电脑单独调通,再进PLC调程序,这个顺序能帮你省掉一大半的加班时间。最后再提醒一句,如果扫码枪工位离PLC柜超过15米,别硬上RS232,踏踏实实换RS485或者网口版本,后面你一定会感谢这个决定。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询