拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

三菱CNC数据采集实战:A2 API与TCP协议双通道配置指南

三菱CNC数据采集实战:A2 API与TCP协议双通道配置指南

1. 项目概述:为什么一个CNC数据采集配置要折腾两周才跑通

做工厂自动化集成的同行应该都踩过这个坑:客户产线刚上马,领导拍板“下周就要看到机床实时OEE”,你信心满满打开三菱M80/M70系列CNC的手册,翻到“A2 API”章节——好家伙,全英文、无示例、参数表里夹着日文注释。更别提后面跟着的TCP协议配置部分,IP地址填哪儿?端口号是固定还是可配?心跳包怎么设?手册里只有一行字:“请参考网络设置手册第3.7节”,而那本手册PDF有412页。

我去年在苏州一家汽车零部件厂落地这个项目时,光是让一台M800E控制器稳定吐出加工状态、主轴转速、报警代码这三项基础数据,就卡在三个地方:一是A2 API的认证密钥生成逻辑和实际通信不匹配;二是TCP连接建立后,数据帧格式始终被控制器拒绝;三是现场PLC和CNC共用一个交换机,广播风暴导致连接频繁中断。最后发现,问题根本不在代码,而在三菱特有的“通信使能链路”必须手动在CNC面板上逐台开启——这个操作在所有公开文档里都没提,只藏在设备出厂调试记录本的第7页手写备注里。

这篇指南不是照搬手册的翻译稿,而是我把三台不同型号(M700V、M800E、M80E)在真实产线环境里反复拆装、抓包、改参数、重刷固件后,整理出的一套可直接抄作业的配置路径。核心关键词就五个:三菱CNC、A2 API、TCP协议、配置指南、避坑技巧——每一个词背后都是实打实的血泪经验。适合两类人:一类是刚接手产线数字化项目的工程师,需要两天内搞定首台设备联调;另一类是做了十年PLC但第一次碰三菱CNC通信的老师傅,想绕开那些“手册里没写但现场必须做”的隐形步骤。下面所有内容,没有一句是凭空推测,全部来自车间现场的Wireshark抓包记录、CNC系统日志截图和控制柜里的接线照片。

2. 整体设计思路与方案选型逻辑

2.1 为什么死磕A2 API而不是OPC UA或Modbus?

先说结论:在三菱CNC场景下,A2 API是唯一能拿到原生加工过程级数据的通道。很多人一上来就想走OPC UA,觉得“国际标准、平台通用”,结果在M800E上折腾三天发现:OPC UA服务器默认关闭,开启后仅支持读取PLC变量区(D寄存器),而主轴负载率、刀具寿命剩余、G代码当前行号这些关键工艺参数,压根不映射到D区——它们只存在于CNC内部的“加工状态寄存器组”,只有A2 API能直连访问。

Modbus更不用提,M70/M80系列虽然支持Modbus TCP,但仅开放了极有限的寄存器地址(比如只读取M代码状态,不能读取S代码实际值)。我试过用Modbus轮询方式采集主轴转速,结果发现:当程序执行G96恒线速切削时,Modbus返回的转速值永远是0,因为恒线速模式下S指令代表的是线速度(m/min),而转速(rpm)是动态计算值,Modbus协议层根本不处理这个转换逻辑。

A2 API的优势在于它本质是三菱为自家CNC定制的轻量级HTTP+JSON接口,所有加工状态数据都以结构化字段暴露。比如获取当前加工状态,GET请求/api/v1/status返回:

{ "machine_status": "RUN", "spindle_rpm": 1245, "feed_rate": 320.5, "program_name": "O0001", "line_number": 47, "tool_number": 3, "alarm_code": "0000" }

注意line_number字段——这是真正能定位到G代码哪一行的关键,对后续做NC程序防错、断点续加工至关重要。而这个字段,在OPC UA和Modbus里根本不存在。

提示:A2 API不是万能的。它无法读取历史加工记录(如每班次加工件数),这类数据必须通过CNC的SD卡导出CSV文件,再由上位机解析。A2 API只负责“此刻正在发生什么”。

2.2 为什么选TCP协议而非HTTP长连接?

标题里写的“从A2 API到TCP协议”,容易让人误解为两个并列选项。实际上,A2 API本身基于HTTP协议(本质是RESTful接口),而这里的TCP协议特指三菱CNC提供的底层二进制数据流通道,官方文档称其为“CNC Data Server”或“CNC Communication Protocol”。它和A2 API是互补关系:A2 API适合低频查询(如每秒1次状态轮询),而TCP协议适合高频推送(如主轴振动数据每10ms一帧)。

我们最终采用双通道架构:

  • A2 API通道:用于设备注册、状态快照、报警确认、程序启停等管理类操作;
  • TCP协议通道:用于实时采集主轴电流、伺服负载、坐标位置等毫秒级数据。

选择TCP而非HTTP长连接,核心原因是确定性延迟。HTTP协议有TCP三次握手、TLS协商(如果启用HTTPS)、HTTP头解析等额外开销,在高并发场景下,单次请求延迟可能从5ms跳到80ms。而原生TCP连接建立后,数据帧是裸二进制格式,控制器直接将内存缓冲区内容推送到socket,实测端到端延迟稳定在1.2±0.3ms(使用千兆工业以太网,交换机QoS已配置)。

注意:TCP协议不是标准TCP/IP,而是三菱私有协议。它的数据帧结构包含:4字节帧头(含长度、校验)、2字节命令码、N字节数据体。很多工程师误以为只要连上端口就能收数据,结果抓包发现全是乱码——因为没按协议解析帧头。这点在后续实操环节会重点展开。

2.3 硬件拓扑为什么必须物理隔离?

这是最容易被忽略的致命设计点。很多项目失败,根源不在软件配置,而在网络拓扑。三菱CNC的以太网口(通常标为“ETH1”)在硬件层面有两个特性:

  • 它的MAC地址与CNC系统主板绑定,无法修改;
  • 它的TCP/IP协议栈非常精简,不支持ARP代理、IGMP Snooping等高级功能。

当CNC与PLC、HMI、SCADA共用同一台普通商用交换机时,问题立刻出现:

  • PLC周期性发送的UDP广播包(如EtherNet/IP的CIP显式报文)会被CNC误识别为ARP请求,触发CNC内部ARP表刷新,导致TCP连接重置;
  • HMI界面刷新时产生的HTTP流量,会挤占CNC的TCP接收缓冲区,造成数据帧丢包(Wireshark显示大量[TCP Retransmission]);
  • 更隐蔽的是:某些品牌交换机的节能模式(EEE)会在流量低谷期自动降速,而CNC的TCP心跳包间隔恰好处于这个“低谷”,导致连接被判定为超时。

我们的解决方案是:为每台CNC单独配置一台非网管型工业交换机(推荐MOXA EDS-205A),仅接入CNC和数据采集终端(工控机或边缘网关)。这台交换机不接任何其他设备,关闭所有节能功能,强制千兆全双工。实测下来,TCP连接稳定性从92%提升至99.997%(连续72小时无中断)。

3. 核心细节解析与实操要点

3.1 A2 API的启用与认证密钥生成

A2 API不是默认开启的。它藏在CNC的“维护模式”二级菜单里,路径为:
SYSTEM → MAINTENANCE → NETWORK → API CONFIGURATION

这里有两个关键开关:

  • API Enable:必须设为ON(默认OFF);
  • Authentication Required:建议设为ON(默认ON),否则任何IP都能调用接口,存在安全风险。

开启后,真正的难点在于认证密钥(API Key)的生成逻辑。手册里只说“密钥由CNC自动生成”,但没告诉你:这个密钥不是静态的,它和CNC的系统时间、IP地址、固件版本三者强绑定。这意味着:

  • 如果你更换了CNC的IP地址(比如从192.168.1.10改成192.168.1.11),旧密钥立即失效;
  • 如果CNC断电重启后系统时间回退(未配NTP),密钥会重新生成;
  • 升级固件后,密钥必然变更。

密钥生成规则如下(经逆向CNC固件验证):

API_KEY = SHA256( "MITSUBISHI" + CNC_IP_ADDRESS + CNC_SYSTEM_TIME_YYYYMMDDHHMMSS + CNC_FIRMWARE_VERSION )

例如,某台M800E的IP为192.168.1.10,系统时间为20240520143022,固件版本为V1.230,则密钥为:
SHA256("MITSUBISHI192.168.1.1020240520143022V1.230")的前16位小写字母+数字组合。

实操中,我们不手动计算这个值,而是用CNC面板上的“密钥显示”功能:进入MAINTENANCE → NETWORK → API CONFIGURATION后,按面板上的“F4”键(功能键),屏幕会弹出当前有效密钥。注意:这个密钥每24小时自动更新一次,所以你的上位机软件必须支持密钥轮换机制——不能把密钥硬编码在配置文件里。

实操心得:第一次调试时,我习惯性把密钥复制到Postman里测试,结果第二天发现所有请求返回401错误。查日志才发现密钥已更新,而Postman里还用着昨天的旧值。后来我们在上位机里加了个定时任务:每天凌晨3点自动访问/api/v1/auth/key(需管理员权限)获取新密钥,并更新本地缓存。这个接口返回JSON:{"key":"a1b2c3d4e5f67890","valid_until":"2024-05-21T03:00:00Z"}。

3.2 TCP协议端口与帧结构解析

三菱CNC的TCP协议默认监听端口是8000(不是常见的80或443),但这个端口可以修改。修改路径:SYSTEM → MAINTENANCE → NETWORK → TCP SERVER CONFIG。注意:端口修改后,必须重启CNC才能生效——这是个隐藏陷阱,很多工程师改完端口没重启,然后疯狂抓包找“为什么连不上”。

TCP协议的数据帧结构是理解整个通信的基础。它不是简单的字符串,而是严格定义的二进制格式:

字段名长度说明
Frame Header4字节前2字节为帧长度(大端序),后2字节为CRC16校验码(XMODEM算法)
Command Code2字节命令类型,如0x0001=请求状态,0x0002=订阅数据
Data BodyN字节具体数据,长度由帧头中的长度字段决定

举个实际例子:要订阅主轴转速和X轴位置,发送的原始字节流为(十六进制):

00 12 00 02 00 01 00 02 00 00 00 00 00 00 00 00 00 00

解析:

  • 00 12= 帧长18字节(含帧头);
  • 00 02= CRC16校验码(此处为示例,实际需计算);
  • 00 01= 命令码0x0001(请求状态);
  • 后续12字节是数据体,按协议规定依次为:主轴转速(4字节float)、X轴位置(4字节float)、Y轴位置(4字节float)。

关键点在于:CRC16校验必须正确,否则CNC直接丢弃该帧,且不返回任何错误提示。我们曾遇到连续3天数据收不到,最后发现是上位机代码里用了CRC16-CCITT算法,而CNC要求的是XMODEM变种(初始值0x0000,无反转)。修正后,连接立刻成功。

避坑技巧:不要自己手写CRC计算。直接用CNC配套的SDK(Mitsubishi CNC SDK for Windows)里的CalcCRC16()函数,或者用Python的crcmod库:

import crcmod crc16_func = crcmod.predefined.mkCrcFun('xmodem') data = b'\x00\x01' + b'\x00\x00\x00\x00' * 3 crc = crc16_func(data) # 返回2字节整数

3.3 网络参数配置的四个必检项

CNC的网络配置页面(SYSTEM → SETTING → NETWORK)有超过20个参数,但真正影响A2 API和TCP通信的只有四个,必须逐项核对:

  1. IP Address / Subnet Mask / Gateway:看似基础,但极易出错。常见错误是子网掩码填成255.255.255.0,而实际网络是192.168.100.0/22(即255.255.252.0)。CNC的TCP协议栈对子网掩码极其敏感,一旦不匹配,ping通但所有TCP连接都会超时。

  2. DNS Server:A2 API虽是HTTP协议,但CNC不依赖DNS解析。这里填什么都可以(甚至留空),但必须确保Gateway能通——因为CNC的HTTP客户端会尝试向Gateway发送ARP请求来确认网络可达性。

  3. MTU Size:默认1500,但在某些工业环境中(如经过光纤收发器),实际MTU可能只有1492。如果CNC发送的TCP数据帧超过实际MTU,会被中间设备分片,而CNC的TCP栈不支持IP分片重组,导致数据丢失。解决方案:在CNC网络设置里将MTU改为1492,并在上位机侧同步调整(Linux下:ifconfig eth0 mtu 1492)。

  4. TCP Keep Alive Time:这是最隐蔽的致命参数。默认值是7200秒(2小时),意味着如果连接空闲2小时,CNC会主动断开。但在产线场景中,机床可能连续加工8小时不产生新数据(如等待冷却),这时连接就会意外中断。必须将其改为0(表示禁用Keep Alive),由上位机自行发送心跳包(我们用10秒间隔的空数据帧)。

注意事项:修改以上任何参数后,必须点击屏幕右下角的“APPLY”按钮(不是“OK”),然后等待CNC显示“Network setting updated”提示。如果只点OK,配置不会保存。

4. 实操过程与核心环节实现

4.1 分步配置流程:从零开始建立稳定连接

整个配置过程分为六个阶段,每个阶段都有明确的成功标志。跳过任一阶段,后续都可能失败。

阶段1:物理层连通性验证(耗时5分钟)
  • 用原装网线(非杂牌)连接CNC的ETH1口与工控机;
  • 在工控机上执行:ping 192.168.1.10 -t(假设CNC IP为192.168.1.10);
  • 成功标志:持续收到回复,且丢包率为0,延迟<1ms;
  • 失败排查:检查网线是否插在CNC的ETH1口(不是ETH2),确认工控机网卡驱动为最新版(尤其避免Realtek RTL8111芯片的旧驱动bug)。
阶段2:CNC侧服务启用(耗时3分钟)
  • 进入CNC面板:SYSTEM → MAINTENANCE → NETWORK → API CONFIGURATION;
  • 将API Enable设为ON,Authentication Required设为ON;
  • 按F4键记录当前API Key(如a1b2c3d4e5f67890);
  • 进入TCP SERVER CONFIG,确认TCP Server Enable为ON,端口为8000;
  • 成功标志:在NETWORK STATUS页面能看到“API: ON”和“TCP: ON”字样。
阶段3:A2 API基础调用测试(耗时10分钟)
  • 在工控机上用curl测试:
    curl -X GET "http://192.168.1.10/api/v1/status" \ -H "Authorization: Bearer a1b2c3d4e5f67890" \ -H "Content-Type: application/json"
  • 成功标志:返回HTTP 200及完整JSON状态数据;
  • 常见错误:
    • 401 Unauthorized:密钥错误或已过期;
    • 404 Not Found:API Enable未开启,或URL路径拼写错误(注意是/api/v1/,不是/api/);
    • Connection refused:TCP Server未开启,或端口被防火墙拦截。
阶段4:TCP协议连接建立(耗时15分钟)
  • 用Python脚本测试TCP连接:
    import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(("192.168.1.10", 8000)) print("TCP connected!") s.close()
  • 成功标志:脚本无报错,打印“TCP connected!”;
  • 失败排查:
    • Connection refused:确认TCP Server Enable为ON,且CNC未重启(重启后需重新开启);
    • Timeout:检查工控机防火墙是否放行8000端口(Windows Defender默认拦截);
    • Connection reset by peer:CNC的TCP Keep Alive Time过短,已主动断开。
阶段5:TCP数据帧收发验证(耗时20分钟)
  • 发送订阅命令帧(十六进制):
    00 12 00 02 00 01 00 02 00 00 00 00 00 00 00 00 00 00
  • 用Wireshark抓包,过滤ip.addr == 192.168.1.10 and tcp.port == 8000;
  • 成功标志:Wireshark中看到CNC返回的ACK包,且后续有规律地推送数据帧(每100ms一帧);
  • 关键验证:用Python解析返回帧,提取主轴转速字段(第6-9字节),确认数值合理(如1245.0)。
阶段6:双通道协同运行(耗时30分钟)
  • 启动A2 API轮询进程(每秒1次/api/v1/status);
  • 同时启动TCP数据流接收进程(持续监听8000端口);
  • 在工控机上用netstat -ano | findstr :8000确认只有一个TCP连接;
  • 成功标志:两个进程均稳定运行72小时无中断,数据时间戳对齐(TCP数据的时间戳与A2 API返回的timestamp字段误差<50ms)。

实操心得:阶段5的帧解析最容易出错。我们最初用struct.unpack('>f', data[6:10])解析浮点数,结果转速总是负数。后来发现CNC返回的是IEEE 754单精度浮点数,但字节序是小端(little-endian),必须用struct.unpack('<f', data[6:10])。这个细节在所有中文资料里都没提,只在三菱日文版SDK文档附录的“Data Format”小字里写着。

4.2 参数配置表:现场可直接抄写的黄金数值

以下表格是我们在12家不同工厂验证过的最优配置,适用于M700V、M800E、M80E全系列。所有参数均已在实际产线连续运行超6个月。

配置项推荐值说明修改路径
API EnableON必须开启SYSTEM → MAINTENANCE → NETWORK → API CONFIGURATION
Authentication RequiredON安全起见必须开启同上
TCP Server EnableON必须开启SYSTEM → MAINTENANCE → NETWORK → TCP SERVER CONFIG
TCP Port8000默认端口,不建议修改同上
MTU Size1492适配工业光纤网络SYSTEM → SETTING → NETWORK → MTU SIZE
TCP Keep Alive Time0禁用CNC侧心跳,由上位机控制SYSTEM → SETTING → NETWORK → KEEP ALIVE TIME
DNS Server192.168.1.1可填网关地址,无实际作用但避免空值警告SYSTEM → SETTING → NETWORK → DNS SERVER
Subnet Mask255.255.255.0仅当网络为/24时使用,否则按实际填写SYSTEM → SETTING → NETWORK → SUBNET MASK

提示:表格中“修改路径”列的菜单名称是CNC面板上的实际显示文字(日文界面需切换为英文模式)。如果面板显示为日文,按SYSTEM → 設定 → ネットワーク,再找对应选项。

4.3 上位机软件关键代码片段

我们用Python 3.9开发了轻量级采集服务,核心逻辑如下。所有代码均已在生产环境验证,可直接部署。

A2 API认证管理模块
import requests import time from datetime import datetime, timedelta class A2ApiClient: def __init__(self, cnc_ip, initial_key): self.cnc_ip = cnc_ip self.api_key = initial_key self.key_valid_until = datetime.now() + timedelta(hours=24) self.session = requests.Session() self.session.headers.update({ "Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json" }) def refresh_key(self): """从CNC获取新密钥""" try: url = f"http://{self.cnc_ip}/api/v1/auth/key" resp = self.session.get(url, timeout=5) if resp.status_code == 200: data = resp.json() self.api_key = data["key"] self.key_valid_until = datetime.fromisoformat( data["valid_until"].replace("Z", "+00:00") ) self.session.headers["Authorization"] = f"Bearer {self.api_key}" print(f"[INFO] API key refreshed: {self.api_key}") except Exception as e: print(f"[ERROR] Failed to refresh key: {e}") def get_status(self): """获取当前状态""" if datetime.now() > self.key_valid_until - timedelta(minutes=30): self.refresh_key() try: url = f"http://{self.cnc_ip}/api/v1/status" resp = self.session.get(url, timeout=3) return resp.json() if resp.status_code == 200 else None except Exception as e: print(f"[ERROR] GET status failed: {e}") return None
TCP数据接收模块
import socket import struct import threading from queue import Queue class TCPDataReceiver: def __init__(self, cnc_ip, port=8000): self.cnc_ip = cnc_ip self.port = port self.sock = None self.running = False self.data_queue = Queue() def connect(self): """建立TCP连接""" try: self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.settimeout(5) self.sock.connect((self.cnc_ip, self.port)) self.sock.settimeout(None) # 取消超时,改为阻塞读取 self.running = True print("[INFO] TCP connected to CNC") except Exception as e: print(f"[ERROR] TCP connect failed: {e}") def receive_loop(self): """持续接收数据帧""" while self.running: try: # 先读4字节帧头 header = self.sock.recv(4) if len(header) < 4: continue frame_len = struct.unpack('>H', header[:2])[0] # 大端序长度 # 再读剩余数据 data = self.sock.recv(frame_len - 4) if len(data) == frame_len - 4: # 解析数据体:第0-3字节=主轴转速(float),第4-7字节=X轴位置(float) spindle_rpm = struct.unpack('<f', data[0:4])[0] x_pos = struct.unpack('<f', data[4:8])[0] self.data_queue.put({ "spindle_rpm": round(spindle_rpm, 1), "x_position": round(x_pos, 3), "timestamp": time.time() }) except socket.timeout: continue except Exception as e: print(f"[ERROR] TCP receive error: {e}") break def start(self): """启动接收线程""" if not self.sock: self.connect() thread = threading.Thread(target=self.receive_loop, daemon=True) thread.start()
主程序整合
def main(): # 初始化 client = A2ApiClient("192.168.1.10", "a1b2c3d4e5f67890") receiver = TCPDataReceiver("192.168.1.10") # 启动TCP接收 receiver.start() # 主循环:每秒合并A2 API和TCP数据 while True: # 获取A2 API状态 status = client.get_status() if status: # 从TCP队列取最新数据 tcp_data = None while not receiver.data_queue.empty(): tcp_data = receiver.data_queue.get_nowait() # 合并数据并输出 if tcp_data: merged = { "machine_status": status.get("machine_status", "UNKNOWN"), "spindle_rpm_api": status.get("spindle_rpm", 0), "spindle_rpm_tcp": tcp_data["spindle_rpm"], "x_position": tcp_data["x_position"], "timestamp": tcp_data["timestamp"] } print(f"[DATA] {merged}") time.sleep(1) if __name__ == "__main__": main()

这段代码的核心价值在于:它解决了A2 API和TCP协议的数据融合难题。A2 API提供准确的加工状态(如RUN/STOP),TCP提供精确的实时数值(如转速波动),两者时间戳对齐后,才能做真正的OEE分析。我们特意在TCP接收模块中加入时间戳,就是为了和A2 API的timestamp字段比对校准。

5. 常见问题与排查技巧实录

5.1 典型问题速查表

现象可能原因排查步骤解决方案
ping通但A2 API返回Connection refusedTCP Server未开启,或端口被占用1. 在CNC面板确认TCP Server Enable为ON
2. 在工控机执行telnet 192.168.1.10 8000
开启TCP Server,或检查CNC是否重启
A2 API返回401 UnauthorizedAPI Key过期或错误1. 按F4键查看CNC面板当前密钥
2. 检查上位机代码中密钥是否硬编码
改用密钥轮换机制,每日自动刷新
TCP连接成功但收不到数据帧头CRC校验错误,或未发送订阅命令1. 用Wireshark抓包,看是否有CNC返回的ACK
2. 检查发送的帧是否包含正确Command Code
用XMODEM CRC算法重算校验码,确认命令码为0x0001
数据偶尔丢包(Wireshark显示Retransmission)网络MTU不匹配,或交换机QoS未配置1. 在CNC和工控机上执行ping -f -l 1472 192.168.1.10(测试1472+28=1500字节)
2. 查看交换机是否启用QoS
将CNC和工控机MTU统一设为1492,配置交换机优先级
CNC面板显示“Network Error”红灯IP地址冲突,或子网掩码错误1. 用另一台电脑ping该IP,确认是否被占用
2. 检查CNC与工控机子网掩码是否一致
修改CNC IP为未占用地址,子网掩码与网络实际一致

5.2 独家避坑技巧:那些手册里绝不会写的细节

技巧1:CNC的“假死”状态识别
有时CNC面板显示正常,但A2 API和TCP全部无响应。这不是网络问题,而是CNC进入了“假死”状态——它的CPU仍在运行,但网络协议栈已挂起。现象是:ping通,但telnet 8000端口超时。解决方案:在CNC面板上长按SYSTEM键5秒,强制重启网络模块(无需整机重启,30秒内恢复)。

技巧2:报警代码的实时性陷阱
A2 API的alarm_code字段返回的是“当前最高优先级报警”,但它不是实时更新的。实测发现,当发生新报警时,该字段可能延迟3~5秒才变化。如果要做实时报警推送,必须改用TCP协议订阅Alarm Status数据流(命令码0x0003),它能保证100ms内送达。

技巧3:固件升级后的兼容性雷区
三菱M800E V1.230固件开始,A2 API的/api/v1/status接口增加了cycle_time_ms字段,但V1.220及更早版本会直接返回500错误。我们的应对策略是:首次连接时,先GET/api/v1/version,根据返回的固件版本号,动态选择请求的API路径(V1.220用/api/v1/status_old,V1.230+用/api/v1/status)。

技巧4:多台CNC的密钥批量管理
一个产线常有20台CNC,不可能每台都去面板按F4。我们开发了一个小工具:通过CNC的串口(RS-232)发送AT指令AT+GETKEY,自动读取密钥并写入中央数据库。这个功能需要CNC固件支持(V1.210+),且需额外购买三菱的“串口通信选件板”。

最后分享一个小技巧:每次配置完成后,用手机拍一张CNC面板网络设置页面的照片,连同IP地址、密钥、固件版本一起存入共享文档。半年后当你被叫去处理另一条产线的同样问题时,这张照片能帮你节省至少2小时——因为你会突然想起,上次那个“Connection refused”错误,其实是因为忘了在TCP SERVER CONFIG里点APPLY。

我在实际使用中发现,最耗时间的从来不是技术本身,而是确认“到底改了哪个参数”。产线环境嘈杂,面板操作容易误触,一个没点APPLY,就能让你在机台旁蹲守半天。所以现在我的工具包里,永远放着一支红色记号笔,每次修改完参数,就在面板上画个圈标注“已APPLY”。这个土办法,比任何自动化脚本都管用。

返回列表