手机组态软件 APP监控西门子S7-1200 PLC C#全套源代码 1,C#开发上位机手机APP,自己写的程序可提供部分 2,通过VS2019开发安卓手机app 3,全套源代码,admin ,123456 4,手机组态软件无线WiFi与PLC通信

"想在手机上实时监控S7-1200 PLC的状态?这活儿用C#就能干!"我叼着咖啡杯把手,在VS2019里噼里啪啦敲着Xamarin的代码。手机组态软件开发最带劲的地方,就是能把工业控制场景装进裤兜里带着走。

先整点硬核的通信代码。S7-1200的协议得用S7.Net这个NuGet包,手机端和PC端通用:

// PLC连接核心代码
var plc = new Plc(CpuType.S71200, "192.168.1.10", 0, 1);
await plc.OpenAsync();

// 读取DB1中的布尔量
var status = plc.Read("DB1.DBX0.0");
txtStatus.Text = status ? "运行中" : "待机状态";

这段代码里的门道在于CpuType要选对型号,IP地址得和PLC的Profinet配置一致。遇到过最坑的情况是手机WiFi和PLC不在同一网段,那叫一个抓狂。

手机组态软件 APP监控西门子S7-1200 PLC C#全套源代码 1,C#开发上位机手机APP,自己写的程序可提供部分 2,通过VS2019开发安卓手机app 3,全套源代码,admin ,123456 4,手机组态软件无线WiFi与PLC通信

登录模块得整个像样的界面,虽然用户给了admin/123456的默认账号,但咱得做点安全措施:

<!-- Xamarin安卓端的登录布局 -->
<EditText android:id="@+id/txtUsername"
    android:hint="工号/手机号"
    android:inputType="textPassword|textVisiblePassword"/>
<EditText android:id="@+id/txtPassword"
    android:hint="密码"
    android:inputType="textPassword"/>
<Button android:text="进入车间"
    android:click="btnLogin_Click"/>

注意那个textVisiblePassword属性,调试时能看到输入内容,正式发布前记得删掉。密码存储别直接用明文的123456,至少要做个SHA1哈希:

// 密码验证逻辑
var hashedPwd = ComputeSHA256("123456");
if(inputPwdHash == hashedPwd)
{
    Navigation.PushAsync(new DashboardPage());
}
else
{
    DisplayAlert("警告", "老师傅,密码该换了!", "知道啦");
}

数据交互部分有个骚操作——用JSON格式缓存PLC状态。当WiFi信号不稳时,APP能显示最后一次有效数据:

// 带缓存功能的数据读取
try
{
    var currentData = await plc.ReadBytes(DataType.DataBlock, 1, 0, 10);
    File.WriteAllText(cachePath, JsonConvert.SerializeObject(currentData));
}
catch(S7Exception ex)
{
    var lastData = JsonConvert.DeserializeObject<byte[]>(File.ReadAllText(cachePath));
    UpdateUI(lastData);
}

调试时发现个坑:安卓9.0以上系统默认禁用明文传输。要么上HTTPS,要么在AndroidManifest.xml里加android:usesCleartextTraffic="true",不过生产环境建议还是走加密通道。

整套源码里最得意的是报警推送功能。当PLC触发异常时,手机能收到像微信那样的悬浮通知:

// 安卓通知管理
var alarmManager = (NotificationManager)GetSystemService(NotificationService);
var channel = new NotificationChannel("alarm_channel", "设备告警", NotificationImportance.High);
alarmManager.CreateNotificationChannel(channel);

var notification = new Notification.Builder(this, "alarm_channel")
    .SetContentTitle("PLC温度预警!")
    .SetSmallIcon(Resource.Drawable.emergency_icon)
    .SetVibrate(new long[] { 0, 1000, 500, 1000 }) // 震动节奏
    .Build();

alarmManager.Notify(0, notification);

实测发现不同品牌的安卓机对后台服务的限制差异很大,小米得单独设置电池优化白名单,华为要允许应用自启动。这些细节在源码的README.md里都做了特别标注。

最后说个真事:有次在客户现场调试,手机APP死活连不上PLC。折腾两小时才发现是车间WiFi的DHCP把IP池用完了——PLC的固定IP被路由器分配给了保洁阿姨的智能手机。所以源码包里专门加了个IP冲突检测工具,这事教会我工业无线通信不仅要懂编程,还得会修路由器。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐