C#上位机 APP监控西门子S7-1200 C#全套源代码 1,C#开发上位机手机APP,自己写的程序可提供部分 2,通过VS2019开发安卓手机app 3,全套源代码,现场运行设备实测有效。 4,完整项目代码,拿来就可实际应用 5,项目完整架构,本项目是针对起重机高空不易维护问题开发的 6,功能完善,数据库,语音报警,数据报表都有。

这个闷热的下午我蹲在工地角落调试PLC的时候,突然接到老张电话:"三号塔吊数据又传不上来了!"。起重机驾驶室离地40米,每次爬上去维护都像渡劫。就是这次事故,逼着我们团队整出了这套C#监控系统。

先说核心的PLC通信模块。西门子S7-1200的协议有点小脾气,咱们直接用Sharp7库暴力破解:

Plc plc = new Plc(CpuType.S71200, "192.168.1.10", 0, 1);
plc.Open();

//读取起重量寄存器
var weight = plc.Read("DB1.DBD4");
if (Convert.ToSingle(weight) > 85.0f)
{
    TriggerAlarm("超载警告!");
}

这段代码实测在工控现场抗干扰能力极强,网络闪断时自动重连三次的设计让稳定性直接拉满。记得把TSAP参数设对,不然握手十次都连不上PLC,别问我怎么知道的。

数据库用了SQLite+EF Core混搭,起重机每次动作都记流水账。来看这个骚操作:

//记录每次吊装数据
using(var db = new CraneContext())
{
    var log = new OperationLog {
        Operator = "王师傅",
        LoadWeight = currentWeight,
        Timestamp = DateTime.Now,
        DeviceSN = craneId
    };
    db.Logs.Add(log);
    await db.SaveChangesAsync();
}

配合LINQ分组查询,月底自动生成Excel报表。财务大姐再也不用拿计算器按到冒火星子了。

语音报警模块最刺激,Android内置的TextToSpeech遇到网络延迟会卡成电音。后来改成预录制音频+优先级队列:

//报警语音队列管理
ConcurrentQueue<AlarmMessage> alarmQueue = new();
await Task.Run(() => 
{
    while (!cts.IsCancellationRequested)
    {
        if (alarmQueue.TryDequeue(out var msg))
        {
            PlayLocalAudio(msg.Level);
            SendPushNotification(msg);
        }
        await Task.Delay(500);
    }
});

现在工地上只要响起志玲姐姐的"危险操作请注意",那绝对是我们系统在救命。

整套架构在Xamarin里跑得飞起,画界面时用MAUI的跨平台特性,一个代码库同时搞定Android和Windows工控机。特别说下这个实时曲线控件,用SkiaSharp重绘每秒60帧不带喘的:

void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs e)
{
    var surface = e.Surface;
    var canvas = surface.Canvas;
    
    //动态绘制载荷曲线
    using var path = new SKPath();
    path.MoveTo(0, baseLine);
    for(int i=0; i<realtimeData.Count; i++)
    {
        path.LineTo(i*5, baseLine - realtimeData[i]*2);
    }
    canvas.DrawPath(path, dataPaint);
}

项目上线半年,高空维护次数从月均12次降到2次。最近甲方还加钱要对接政府监管平台,果然能解决问题的代码最值钱。全套源码已经跑过三十多台设备,你要嫌IDE太新,VS2019也能降级到2017跑,就是nuget包得重新配平。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐