影刀RPA 串口通信自动化:工业设备数据读取
作者:林焱 | 分类:影刀RPA新手教程 | 难度:★★★
什么情况用
工厂里很多老设备(PLC、传感器、仪表、电子秤)通过RS232/RS485串口输出数据,没有网络接口,数据全靠人工抄表。一个质检员每天在车间走几趟,拿本子记录温度、压力、重量数据,回去再录入Excel。
通过影刀RPA + Python的pyserial库,直接从串口读取设备数据并自动记录,彻底告别手工抄表。适用于有串口设备、想用低成本方式实现数据自动采集的场景。
怎么做
第一步:硬件准备
需要的东西:
- 一台连有设备的电脑(串口COM1/COM3等)
- USB转串口线(如果电脑没有物理串口)
- 知道设备的波特率、数据位、停止位、校验位(看设备说明书)
店群矩阵自动化突破运营极限!
常见工业设备默认参数:
- 波特率:9600(最常见)或115200
- 数据位:8
- 停止位:1
- 校验位:None
第二步:安装pyserial
在影刀Python节点所在的环境安装:
pipinstallpyserial第三步:读取串口数据
# 影刀Python节点:读取串口数据importserialimportserial.tools.list_ports# 列出所有可用串口ports=serial.tools.list_ports.comports()forportinports:print(f"发现串口:{port.device}-{port.description}")# 打开串口try:ser=serial.Serial(port="COM3",# 根据实际端口修改baudrate=9600,bytesize=8,parity="N",stopbits=1,timeout=2# 读取超时2秒)# 读取一行数据line=ser.readline().decode("utf-8",errors="ignore").strip()print(f"读取到数据:{line}")ser.close()exceptserial.SerialExceptionase:print(f"串口打开失败:{e}")第四步:解析设备数据
不同设备输出的数据格式不同,常见格式:
# 示例1:电子秤输出 "ST,GS,+12.345,kg\r\n"defparse_scale_data(raw):ifraw.startswith("ST,GS"):parts=raw.split(",")weight=float(parts[2])# 12.345unit=parts[3]# kgreturn{"weight":weight,"unit":unit,"status":"stable"if"ST"inrawelse"unstable"}returnNone# 示例2:温湿度传感器输出 "T:25.6,H:68.3\r\n"defparse_sensor_data(raw):ifraw.startswith("T:")and",H:"inraw:t=float(raw.split(",H:")[0].replace("T:",""))h=float(raw.split(",H:")[1])return{"temperature":t,"humidity":h}returnNone# 示例3:PLC Modbus RTU(需要额外库)# pip install minimalmodbus 后调用第五步:持续采集与异常处理
# 影刀Python节点:持续采集并记录importtimefromdatetimeimportdatetimedefcontinuous_capture(port,duration_minutes=60,interval_seconds=10):"""持续采集指定时长"""ser=serial.Serial(port=port,baudrate=9600,timeout=2)records=[]start=time.time()whiletime.time()-start<duration_minutes*60:try:line=ser.readline().decode("utf-8",errors="ignore").strip()ifline:data=parse_sensor_data(line)ifdata:data["timestamp"]=datetime.now().isoformat()records.append(data)print(f"{data['timestamp']}| 温度:{data['temperature']}°C | 湿度:{data['humidity']}%")exceptExceptionase:print(f"读取异常:{e},跳过本次")time.sleep(interval_seconds)ser.close()returnrecords# 执行采集data=continuous_capture("COM3",duration_minutes=30,interval_seconds=5)print(f"共采集{len(data)}条记录")影刀中【Python节点】执行后,通过【写入Excel】将采集数据保存。
有什么坑
坑1:串口被占用
Windows下如果其他软件(串口调试助手等)已经打开了COM3,pyserial会报Access is denied。解决方法:运行前关闭所有串口调试工具,影刀中只打开一次串口。
坑2:波特率不匹配导致乱码
temu店群自动化报活动案例
最常见的坑。如果设备是115200波特率,你用了9600,读出来的数据全是乱码。一定要翻设备说明书或用串口调试工具先确认参数再写代码。
坑3:数据线接触不良
车间环境灰尘多、震动大,USB转串口线容易松动。建议在Python代码中加上"连续3次读不到数据则告警"的逻辑,避免悄无声息地漏数据。
consecutive_errors=0ifnotline:consecutive_errors+=1ifconsecutive_errors>=3:print("⚠️ 串口连接异常,连续3次无数据")else:consecutive_errors=0坑4:字符编码
工业设备输出可能是GB2312、ASCII、甚至原始二进制,不一定是UTF-8。用decode("utf-8")可能报错。建议先用errors="ignore"忽略无法解码的字符,或者换成decode("gbk")尝试。
坑5:影刀的Python节点运行在沙箱环境
影刀的Python节点是临时进程,每次执行完就会释放。如果要做持续监控(比如每分钟读一次数据),不要用一个大循环,而是用影刀的【定时任务】每分钟触发一次Python节点,每次读一条数据。这样容错性更好。
总结:串口通信自动化的关键在于设备参数要准。拿到设备后先别急着写代码,用串口调试工具手动连一次,确认能读到正常数据,再开始写自动化流程。