三菱PLC的时间上传服务器,核心做法是把PLC内部时钟数据转成标准报文,通过串口或以太网主动推送或让服务器定时读取,再写入数据库或接口。 这中间最关键的不是“传”的动作,而是时钟同步和数据格式解析绝大多数项目卡壳都卡在这两步上。
三菱PLC和服务器时间同步,为什么这么难
很多设备厂有个“通病”:设备本地跑得好好的,触摸屏上时间也准,但一对接服务器,发现上传的数据不是慢几分钟,就是干脆传不上去,行业共识认为,超过六成的时间类通讯故障,根因不在程序逻辑,而是PLC本地时钟本身就跑偏了。
三菱FX系列和L系列PLC内部用的是无电池保持的电容时钟,断电保持时间普遍在几天到几周之间,车间停电三天,重新上电后PLC时间大概率回到出厂默认值,这时候哪怕程序写得再完美,传上服务器的也是错数据,所以做时间上传前,第一件事不是写通讯代码,而是先给PLC“对表”。
另一个难点是寄存器地址不统一,三菱FX3U的时间存在特殊寄存器D8013(秒)到D8019(星期),Q系列则分布在特殊寄存器D9025之后,L系列又不一样,一套程序想同时兼容多个系列,几乎不可能,必须按CPU型号单独处理。
三菱PLC时间上传服务器的几种常见方案
选方案前先说清楚:没有“最好”,只有“最合适”,三菱PLC时间上传服务器多少钱,取决于你选哪种路径硬件成本从几百到几千都有,开发周期从几小时到一两周不等,以下三种方案覆盖了市面上绝大多数场景。
服务器主动读取,最稳但最占资源
服务器按固定周期(比如每10秒)主动向PLC发送读命令,PLC响应返回D8013-D8019的数据。
- 适用场景:PLC数量少(10台以内),网络稳定,服务器带宽充裕
- 优点:不需要改PLC程序,只要PLC开个端口就行;服务器拿到数据后能顺带校时,一举两得
- 缺点:每台PLC定期被“骚扰”,通讯负载高;PLC数量多了以后服务器轮询周期拉长,实时性下降
具体操作上,服务器端用MC协议(Melsec Communication Protocol)的二进制帧格式,发送指令“3C 02 00 00 A8 00 00 00”读取D寄存器,返回报文里从第12字节开始连续7个数据,依次对应秒、分、时、日、月、年、星期,这一步数据解析对了,后面入库基本零难度。
PLC主动上传,实时性最好但要写梯形图
PLC在程序里写一段定时触发逻辑,到了设定时间(比如整点)自动用Socket指令或MODBUS TCP客户端功能把时间数据推送到服务器指定端口。
- 适用场景:PLC分散在不同车间甚至不同城市,服务器只有一个公网IP
- 优点:服务器只做接收,资源消耗极小;PLC本地逻辑可控,可以做到事件触发式上报
- 缺点:三菱FX3U的Socket编程门槛偏高,容易踩协议坑;一旦网络闪断,数据没有重发机制,会丢
Q系列和L系列用OPEN指令建立TCP连接,发送缓冲存储区冲数据,写的时候注意帧头的“副头部”要按三菱格式组帧,服务器收数据时要先判断帧长度再拆分,否则容易粘包。
外置网关转发,适合老设备改造
PLC不动程序,不占PLC通讯端口,直接串在PLC和交换机之间,网关把PLC时间读取出来后再用MQTT或HTTP POST转发到服务器。
- 适用场景:老产线改造,PLC型号太老(如FX1N)没有网口,售后不方便远程改程序
- 优点:不碰原系统,风险最低;网关自带协议解析,服务器端收标准JSON就行
- 缺点:多了一个硬件设备,多一个故障点;外置网关价格大致在800-2000元区间,批量上确实是一笔成本
行业内做设备联网改造时,相当一部分集成商偏爱方案三,因为调试时间最短,稳定性和响应速度比自己写协议硬扛好得多。
以MC协议为例,手把手把时间数据写到服务器数据库
这里给一套完整的以太网通讯路径,适合FX3U及以上带网口机型,服务器用C#或Python都行,核心分三步走:读时间、解析字节、写入数据库。
第一步,PLC侧设置好IP地址和端口号,FX3U默认端口号设为1024以上的自定义端口,比如5000,通讯协议选TCP,帧格式随意但推荐二进制。
第二步,服务器发读取命令,十六进制报文如下:
50 00 00 FF FF 03 00 0C 00 10 00 01 04 00 00 A8 00 00 00
第三字节到第五字节是“PC号”和“请求目标模块IO编号”,固定填FF FF 03不会出错,最后的A8 00表示起始软元件地址是D8000(三菱地址码规则:D8000的二进制值右移4位得到0x00A8),后面00 00表示连续读1个软元件字,但实际上D8013-D8019是连续排布的,一次读7个地址更高效。
第三步,解析响应帧,响应报文结构如下:
- 前9字节:帧头、应答码、PC号、模块IO编号、请求目标模块站号
- 第10字节起:连续7组16位数据,每组低字节在前
拿到这7个数字后,按顺序组装成字符串,格式化成“YYYY-MM-DD HH:MM:SS”,再直接INSERT到MySQL或SQL Server的日志表里,每一步都验证下来,从发请求到落库,时间差通常在几百毫秒以内。
上传后的时间戳对不上,八成卡在时区和D8123
项目验收时最常遇到的怪问题:上午10点上传的数据,服务器显示凌晨2点,排查一圈,不是程序问题,而是时区换算漏了,三菱PLC的时钟是日本标准时间(JST,UTC+9),国内服务器一般设的是北京时间(UTC+8),如果PLC出厂设置没改,直接用原始值上传,差1小时属于正常,处理办法是PLC侧预设偏移量寄存器,把D8123设为480(分钟数),程序里读取时间后加上这个偏移再上传。
还有一类问题属于服务器端丢包,典型的症状是:数据在触摸屏上连续跳秒,但数据库里每秒都少几条,这多半是PLC写了主动上传但没加“发送完成确认”逻辑,通过Socket发送后等服务器回一个ACK再发下一条,或者把帧间隔调到100ms以上,问题就消失了。
项目上如果碰到“PLC本地改了时间但服务器迟迟不更新”,优先检查PLC是否开启了时间锁定功能,FX5U的CPU参数里有“始终开启时钟”选项,部分型号默认关闭,外部写入时间后地址不变但数据不刷新,直接把该功能打开就行,浙江省内几个做注塑机联网的客户都踩过这个坑,属于高频毛病。
三菱PLC时间同步触摸屏和服务器时的顺序问题
这类项目里设备上往往同时有触摸屏、PLC、数据采集网关和服务器,容易出现四套时钟各差几秒的情况,现场排查建议按以下顺序做:
- 以PLC为基准,手动校准PLC内置时钟
- 触摸屏侧设置“使用PLC时钟”或“同步PLC时间”,让HMI跟着PLC走
- 服务器每5分钟自动对PLC发一次时间写入命令,把PLC作为时间源反向校时
- 网关和交换机保持默认,不在中间环节做任何时间干预
三步做完,现场四套时间显示能够稳定控制在1秒内的偏差,这在大多数制造执行系统(MES)里完全够用。
Q&A:三菱PLC时间同步常见问题
Q1:三菱PLC时间不准确怎么校准,能不能远程改?
可以用GX Works通过以太网在线修改,菜单路径为“在线→PLC写入→时钟设置”,直接把当前时间下传,远程操作需要在PLC侧开放MC协议写入权限,用上位机软件发写时间命令到D8013-D8019即可。
Q2:三菱PLC时间戳上传延迟影响数据追溯精度吗?
不一定,只要PLC本地时间与服务器时间偏差在允许范围内,延迟不影响时间戳本身的准确性,追溯精度主要取决于通讯中断后数据是否在PLC本地缓存,如果PLC断电停机,缓存丢失,那延迟就直接导致数据空洞。
Q3:PLC时间能直接同步服务器的时间吗?
能,但需要PLC作为TCP客户端主动连接服务器取时间,或使用带NTP功能的网关产品,FX5U和Q系列支持SNTP客户端功能,PLC本身可以直接从NTP服务器获取标准时间,实现“不依赖上位机自动对时”。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/796518.html


