注塑机上位机源码数据追溯 1, 采用C#编写。 2, plc为s7_1500。 3, 双重数据...

张开发
2026/4/7 2:10:23 15 分钟阅读

分享文章

注塑机上位机源码数据追溯 1, 采用C#编写。 2, plc为s7_1500。 3, 双重数据...
注塑机上位机源码数据追溯 1, 采用C#编写。 2, plc为s7_1500。 3, 双重数据库本地和远程同时存取mssql2012。 4, 同时使用OPCDA和OPCUA。 OPCDA链接 1500,OPCUA链接注塑机。 5, 使用多线程界面流畅有好。 6, 数据查询与导出。最近在搞注塑机上位机开发系统用C#怼了个全栈方案。通信层既要对接西门子S7-1500又要直连注塑机本体双OPC协议混搭确实有点意思。先上个PLC通信的代码片段var daConnector new OpcDaConnector(S7.OPCDAServer.1); daConnector.AddGroup(InjectionData, 200, new[] { DB101.DBD0, DB101.DBD4, DB101.DBD8 }); var uaClient new OpcUaClient(opc.tcp://192.168.1.100:4840); await uaClient.ConnectAsync(); var moldTemp uaClient.ReadNode(ns3;sMold.Temperature);OPC DA这边用经典的SiemensDAAuto.dll封装注意1500系列默认数据块偏移量要4字节。UA协议用OpcFoundation的官方库异步连接避免界面卡死。实测DA的读取速度比UA快30ms左右但UA跨网段部署确实香。注塑机上位机源码数据追溯 1, 采用C#编写。 2, plc为s7_1500。 3, 双重数据库本地和远程同时存取mssql2012。 4, 同时使用OPCDA和OPCUA。 OPCDA链接 1500,OPCUA链接注塑机。 5, 使用多线程界面流畅有好。 6, 数据查询与导出。数据库双重存储有点讲究本地库存实时工艺参数远程库做批次记录。看这个骚操作public void SaveData(InjectionData data) { Task.Run(() { lock (_localDbLock) { using var conn new SqlConnection(localConnStr); conn.Execute(INSERT INTO Realtime...); } using var remoteConn new SqlConnection(remoteConnStr); remoteConn.Execute(UPDATE Batch SET...); }); }注意本地库操作必须加锁防止多线程写冲突。用Dapper做ORM比EF快不是一点半点特别是批量插入注塑周期数据时速度差三倍以上。界面流畅的秘诀在于DispatcherTimer和BackgroundWorker的混用。实时曲线用OxyPlot绘制数据绑定要这样玩PlotModel.InvalidatePlot(true); Application.Current.Dispatcher.BeginInvoke(new Action(() { // 更新不超过50ms的UI元素 }), DispatcherPriority.Background);数据导出模块有个坑——Excel互操作会锁死线程。后来改用ClosedXML生成xlsx效率直接起飞using var workbook new XLWorkbook(); var ws workbook.AddWorksheet(ShotData); ws.Cell(1, 1).Value 射出压力; ws.Cell(1, 2).Value 保压时间; // 十万级数据写入5秒内搞定 workbook.SaveAs(export.xlsx);遇到最坑爹的问题还是OPC DA的自动重连后来用了个土法子——心跳检测备用通道切换private void CheckDaConnection() { if (_lastUpdateTime DateTime.Now.AddSeconds(-10)) { _logger.Warning(OPC DA心跳丢失启动备用通道); SwitchToBackupEndpoint(); } }这套方案在产线跑了大半年200ms级的数据采集精度MySQL和MSSQL双活架构扛住了每天20万次的写入操作。有老铁要源码可以私我不过记得改连接字符串里的密码哈。

更多文章