C#全自动多线程上位机源码编程 0,纯源代码。 1,替代传统plc搭载的触摸屏。 2,工控屏幕一体机直接和plc通信。 3,功能强大,多级页签。 4,可以自由设定串口或以太网通信。 5,主页。 6,报警页。 7,手动调试页。 8,参数设定页。 9,历史查询页。 10,系统设定页。 11, 赠送所有控件。 12,使用的西门子Plc。 13,注册opcdaauto.dll组件,用于使用opc。 15,安装kepserverEx5。 16,可以链接其他数据库。

最近在工控项目里搞了个硬核玩意儿——用C#撸了个全自动多线程上位机。这货直接把传统PLC触摸屏按在地上摩擦,咱们用Windows工控一体机直连西门子PLC,操作丝滑得就像玩手机APP。关键源码全开放,自己拿着代码想改哪就改哪!

通信这块儿咱们玩得花,看看这段串口配置代码:

private SerialPort sp = new SerialPort();
sp.PortName = "COM3";
sp.BaudRate = 9600;
sp.DataReceived += (s, e) => {
    byte[] buffer = new byte[sp.BytesToRead];
    sp.Read(buffer, 0, buffer.Length);
    // 交给数据处理线程
    dataProcessor.Enqueue(buffer);
};

想换网口通信?改个IP配置就能原地切换:

TcpClient client = new TcpClient();
client.Connect(IPAddress.Parse("192.168.1.10"), 502);
NetworkStream stream = client.GetStream();

界面搞了六层TabControl,每个页面独立线程跑。重点看这个多线程UI更新技巧:

void UpdateLabel(Label lbl, string text) {
    if (lbl.InvokeRequired) {
        lbl.Invoke(new Action(() => lbl.Text = text));
    } else {
        lbl.Text = text;
    }
}

报警页面用了生产者-消费者队列,数据来了直接往队列里扔,UI线程定时拉取显示,完全不卡界面。

OPC配置这块要特别注意,得先注册组件:

regsvr32 opcdaauto.dll /s

数据库支持SQL Server和MySQL自由切换,看这段万能适配代码:

DbConnection CreateConnection(string type) {
    return type switch {
        "MSSQL" => new SqlConnection(connStr),
        "MySQL" => new MySqlConnection(connStr),
        _ => throw new NotSupportedException()
    };
}

控件库打包了50+工业风格组件,像这个圆形压力表控件:

<uc:AnalogMeter Value="{Binding Pressure}" 
               ScaleColor="#FF00A2E8"
               PointerColor="Red"/>

历史数据查询用了分页加载,20万条记录秒开。核心是这段分页SQL:

DECLARE @PageSize INT = 100
DECLARE @PageNum INT = 3
SELECT * FROM HistoryData 
ORDER BY Timestamp DESC 
OFFSET (@PageNum-1)*@PageSize ROWS 
FETCH NEXT @PageSize ROWS ONLY

调试的时候发现个坑:Kepserver的OPC标签路径必须带命名空间。解决方法在这:

string FormatTagPath(string device, string tag) {
    return $"ns=2;s={device}.{tag}";
}

这项目整下来最大的感悟:工业软件的核心不是花哨功能,而是把通信稳定性和异常处理做到极致。比如这个看门狗线程,专治各种断线:

void ComWatchdog() {
    while (true) {
        if (!CheckConnection()) {
            Reconnect();
            Thread.Sleep(5000);
        }
    }
}

源码里最骚的操作是用了内存映射文件,把实时数据直接映射到显存,画面刷新直接走显卡通道,帧率直接飙到60fps。想要源码的老铁直接评论区甩邮箱,拿回去改改就能往产线怼!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐