台达AS系列PLC modbus TCP网口上位机通信,项目现场使用设备的C#源代码

台达AS系列PLC modbus TCP网口上位机通信,项目现场使用设备的C#源代码,监控设备每月每天的生产数据并生成Excel表格。

最近在工业现场折腾台达AS系列PLC的Modbus TCP通讯,发现这玩意儿的协议实现和常规设备还真有点不一样。项目需求是抓取设备每月每天的生产数据存Excel,先给大伙儿看看我们是怎么用C#暴力破解的。

先上硬菜------网络连接部分。台达PLC的Modbus TCP端口默认是502,但寄存器地址需要特别注意偏移量:

csharp 复制代码
using System.Net.Sockets;
//...
TcpClient client = new TcpClient();
client.Connect("192.168.1.10", 502);
NetworkStream stream = client.GetStream();

// Modbus TCP请求帧
byte[] request = new byte[] {
    0x00, 0x01, //事务标识
    0x00, 0x00, //协议标识
    0x00, 0x06, //后续字节数
    0x01,       //单元标识
    0x03,       //功能码03(读保持寄存器)
    0x00, 0x64, //起始地址(注意台达地址偏移)
    0x00, 0x02  //读取寄存器数量
};

这里有个坑------台达的寄存器地址需要做+1偏移。比如手册标注D100寄存器,实际要发0x0063(十进制99)而不是0x0064。第一次调试时在这卡了两个小时,现场老哥差点把咖啡泼我键盘上。

数据解析环节更刺激。读回来的数据是大端模式,处理浮点数得特别注意:

csharp 复制代码
byte[] response = new byte[256];
int bytesRead = stream.Read(response, 0, response.Length);

// 解析产量数据(假设从D100开始)
float dailyOutput = BitConverter.ToSingle(new byte[] {
    response[9], response[8], //注意字节顺序
    response[11], response[10]
}, 0);

// 处理负数情况
if (BitConverter.IsLittleEndian) 
{
    Array.Reverse(response, 8, 4);
}

这段代码让我想起去年在钢厂调试时,温度值总是显示-40°C,后来发现是字节顺序没处理好。现在看见BitConverter都有应激反应,建议各位随身携带字节序对照表。

数据攒够之后要生成Excel报表,用EPPlus比传统的Interop稳定得多:

csharp 复制代码
using OfficeOpenXml;
//...
using (var package = new ExcelPackage())
{
    var worksheet = package.Workbook.Worksheets.Add("生产日报");
    worksheet.Cells["A1"].LoadFromCollection(dataRecords, true);
    
    // 设置日期格式
    worksheet.Column(1).Style.Numberformat.Format = "yyyy-MM-dd";
    
    // 自动调整列宽(防止现场人员老花眼)
    worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
    
    FileInfo file = new FileInfo($"{DateTime.Now:yyyyMM}_production.xlsx");
    package.SaveAs(file);
}

EPPlus处理十万级数据量时建议开启内存优化模式,别问我怎么知道的------上个月报表生成直接吃光8G内存,现场工控机当场罢工。顺便提醒,记得在finally块里释放资源,PLC那边的连接超时可不会等你。

调试时建议用Modbus Slave软件模拟PLC,Wireshark抓包看原始数据流。曾经遇到个灵异事件:现场设备正常但读不到数据,后来发现是网管把502端口给封了。所以啊,工业网络调试,三分靠技术,七分靠玄学。

相关推荐
朱一头zcy2 天前
简单理解NAT(网络地址转换)模式和桥接模式
网络·桥接模式·nat
易水寒陈7 天前
单片机的工厂方法模式和桥接模式结合使用
单片机·桥接模式·工厂方法模式
geovindu8 天前
python: Bridge Pattern
python·设计模式·桥接模式
Anurmy9 天前
设计模式之桥接模式
设计模式·桥接模式
青春易逝丶9 天前
桥接模式
桥接模式
Initialize-le9 天前
WMware桥接模式配置静态IP上网
网络协议·tcp/ip·桥接模式
开开心心就好1 个月前
实用系统备份还原,小巧免PE备份快镜像小
windows·计算机视觉·pdf·计算机外设·迭代器模式·excel·桥接模式
开开心心就好1 个月前
实用PDF擦除隐藏信息工具,空白处理需留意
运维·服务器·windows·pdf·迭代器模式·桥接模式·1024程序员节
资深web全栈开发1 个月前
设计模式之桥接模式 (Bridge Pattern)
javascript·设计模式·桥接模式
进阶的猪1 个月前
VMware桥接模式(bridge模式)不能使用的原因和解决方法
桥接模式