思维导图

思维导图全文浏览

部分界面

主界面视图模型源码

using MaterialDesignThemes.Wpf;
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Text;
using NormalizingApp.MVVM;
using NormalizingApp.Models;
using NormalizingApp.Messagebox;
using System.Threading;
namespace NormalizingApp.ViewModels
{/// <summary>/// 初始化界面上菜单选项的ListView控件后台数据,把所有窗体的名字和内容传递到ListView进行选择/// </summary>class MainWindowViewModel : NotifyObject{//定义Listbox绑定的数据源属性public Models.MainWindowItem[] DemoItems { get; }  //绑定的视图模型 数组        demo项:名称 内容 private Thread uiThread; //开一个线程更新UI绑定属性//软件版本号private double _versionNumber;public double VersionNumber{get { return _versionNumber; }set{_versionNumber = value;RaisePropertyChanged("VersionNumber");}}//通讯连接状态private bool _connectionState;public bool ConnectionState{get { return _connectionState; }set{_connectionState = value;RaisePropertyChanged("ConnectionState");}}//焊缝编号显示private string _productNumber;public string ProductNumber{get { return _productNumber; }set{_productNumber = value;RaisePropertyChanged("ProductNumber");}}//系统时间显示private string _systempDateTime;public string SystempDateTime{get { return _systempDateTime; }set{_systempDateTime = value;RaisePropertyChanged("SystempDateTime");}}//通讯延时显示private int _connectionDelay;public int ConnectionDelay{get { return _connectionDelay; }set{_connectionDelay = value;RaisePropertyChanged("ConnectionDelay");}}//窗体关闭时执行事件private MyCommand _windowClosing;public MyCommand WindowClosing{get{if (_windowClosing == null)_windowClosing = new MyCommand(new Action<object>(o =>{// 保存当前的颜色选择var p = new PaletteHelper().QueryPalette();using (StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + @"..\..\Data\Palette\Palette.txt", false, Encoding.UTF8)){//  从当前颜色选择构建 json对象sw.Write(JObject.FromObject(p).ToString());}}));return _windowClosing;}}//窗体载入时执行事件private MyCommand _windowLoaded;public MyCommand WindowLoaded{get{if (_windowLoaded == null)_windowLoaded = new MyCommand(new Action<object>(o =>{// 加载原先保存的主题配色if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + @"..\..\Data\Palette\Palette.txt")){using (StreamReader sr = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + @"..\..\Data\Palette\Palette.txt", Encoding.UTF8)){string temp = sr.ReadToEnd();//读取保存的主题二进制流MaterialDesignThemes.Wpf.Palette obj = JObject.Parse(temp).ToObject<MaterialDesignThemes.Wpf.Palette>();//解析json为 主题对象new PaletteHelper().ReplacePalette(obj);//设置保存的主题颜色}}//new PaletteHelper().SetLightDark(true);//设置系统是否为深色}));return _windowLoaded;}}//空构造函数public MainWindowViewModel() { }//构造函数public MainWindowViewModel(ISnackbarMessageQueue snackbarMessageQueue)//Snackbar 消息队列 接口 {InitData();//初始化数据库和PLC连接if (snackbarMessageQueue == null) throw new ArgumentNullException(nameof(snackbarMessageQueue));DemoItems = new[] //视图与视图模型关联{new MainWindowItem("机床信息", new Views.HomePage(){ DataContext = new HomePageViewModel()}),new MainWindowItem("手动控制", new Views.ManualPage(){ DataContext = new ManualPageViewModel()}),new MainWindowItem("自动控制", new Views.AutoPage(){ DataContext = new AutoPageViewModel()}),new MainWindowItem("实时曲线", new Views.CurvePage(){ DataContext = new CurvePageViewModel()}),new MainWindowItem("历史查询", new Views.DataQueryPage()),new MainWindowItem("故障报警", new Views.AlarmSystemPage(){ DataContext = new AlarmSystemPageViewModel()}),new MainWindowItem("系统设置", new Views.SystemSet()),new MainWindowItem("主题设置", new Views.UserPaletteSelector{ DataContext = new PaletteSelectorViewModel() }),};}/// <summary>/// 初始化数据(数据库和PLC数据)/// </summary>private void InitData(){DataBase.DBHelp.FileName = DataBase.DBHelp.fileName;//数据库路径初始化//检查数据库文件是否存在,不存在则创建if (!DataBase.DBHelp.CreteFilesName()){CMessageBox.Show("没有数据库模板", "提示");Environment.Exit(0);}cc://连接PLCif (Lib.S71KConnect.ConnectPLC()){Lib.S71KConnect.StartPLCRead();}else{Lib.S71KConnect.StopPLCRead();goto cc;}VersionNumber = 1.2;//显示版本号ProductNumber = LoginWindowViewModel.productNumber.ProductNumberFull; //显示焊缝编号//启动更新线程if (Lib.S71KConnect.userItem.ConnectionState){uiThread = new Thread(new ThreadStart(UpDataThread));uiThread.IsBackground = true;uiThread.Start();}}/// <summary>/// 线程方法/// </summary>private void UpDataThread(){while(true){ConnectionDelay = Lib.S71KConnect.userItem.ConnectionDelay;//通讯延时ConnectionState = Lib.S71KConnect.userItem.ConnectionState;//通讯状态SystempDateTime = Lib.S71KConnect.userItem.SystempDataTime;//系统时间ProductNumber = LoginWindowViewModel.productNumber.ProductNumberFull;//焊缝编号Thread.Sleep(500);}}}
}

The End

【WPF】某S7-1200上位机源码研究相关推荐

  1. C#与三菱PLC以太网通讯程序上位机源码 通过3E帧SLMP /MC协议与三菱FX5U/Q系列PLC通讯

    C#与三菱PLC以太网通讯程序上位机源码 通过3E帧SLMP /MC协议与三菱FX5U/Q系列PLC通讯 1.该程序可以与FX5U/Q系列PLC以太网通讯,根据3E帧报文写了一个类库,可以读写各种类型 ...

  2. C#工业触摸屏上位机源码 替代传统plc搭载的触摸屏

    C#工业触摸屏上位机源码 0, 纯源代码. 1, 替代传统plc搭载的触摸屏. 2, 工控屏幕一体机直接和plc通信. 3, 功能强大,多级页签. 4, 可以自由设定串口或以太网通信. 5, 主页. ...

  3. C#工业触摸屏上位机源码 纯源代码 替代传统plc搭载的触摸屏

    C#工业触摸屏上位机源码 0, 纯源代码. 1, 替代传统plc搭载的触摸屏. 2, 工控屏幕一体机直接和plc通信. 3, 功能强大,多级页签. 4, 可以自由设定串口或以太网通信. 5, 主页. ...

  4. C#与三菱PLC以太网通讯程序上位机源码 通过3E帧SLMP MC协议与三菱FX5U Q系列PLC通讯

    C#与三菱PLC以太网通讯程序上位机源码 通过3E帧SLMP MC协议与三菱FX5U Q系列PLC通讯 1.该程序可以与FX5U Q系列PLC以太网通讯,根据3E帧报文写了一个类库,可以读写各种类型和 ...

  5. C#全自动多线程上位机源码编程

    C#全自动多线程上位机源码编程 0, 纯源代码. 1, 替代传统plc搭载的触摸屏. 2, 工控屏幕一体机直接和plc通信. 3, 功能强大,多级页签. 4, 可以自由设定串口或以太网通信. 5, 主 ...

  6. c#上位机 源码 控制固高,研华,雷赛这类的运动板卡。偏向 程序运动控制。winform+板卡+sqlite

    c#上位机 源码 控制固高,研华,雷赛这类的运动板卡.偏向 程序运动控制.winform+板卡+sqlite

  7. FPGA驱动FT601实现USB3.0相机 OV5640视频采集 提供2套工程源码和QT上位机源码

    目录 1.前言 2.FT601芯片解读和时序分析 FT601功能和硬件电路 FT601读时序解读 FT601写时序解读 3.我这儿的 FT601 USB3.0通信方案 4.vivado工程1--彩条视 ...

  8. QT上位机源码+STM32图像采集

    QT上位机源码+STM32图像采集 ID:6915673042556427

  9. 物联网系统上位机源码,含服务器和客户端 物联网服务端程序

    物联网系统上位机源码,含服务器和客户端 物联网服务端程序,可以接受市面上大多数透传数据的DTU登录,以及和DTU双向通讯 程序功能:能分组管理,不同的组别用户只可见自己组别的设备,设备和客户端登录掉线 ...

最新文章

  1. ASP.NET MVC 3中ViewBag, ViewData和 TempData
  2. android layout后还原位置,Android图片框架photoview如何记住所有状态并还原,包括缩放度,缩放后的移动的距离等等...
  3. 投资比特币现金的四个理由
  4. ThinkPHP笔记——完全配置参考手册
  5. hashmap 存取原理图_HashMap底层实现原理
  6. python进行usb通讯_Python实现树莓派USB串口通讯
  7. SpringCloud与zuul
  8. jQuery-点击按钮页面滚动到顶部,底部,指定位置
  9. 图解CSS中padding、margin、border的区别及使用
  10. 1-10所有5个数的组合_121期大乐透:关注10+5、重点号6个
  11. 视频教程-IP地址划分(CCNA魔鬼训练营系列)-思科认证
  12. 如何设置CentOS7的时间与网络同步
  13. 电脑桌面云便签怎么开启窗口置顶一直让悬浮便签显示在屏幕上?
  14. 基于树莓派的语音对话助手 百度机器人 适合入门
  15. Linux下查看CPU、内存占用率
  16. 利用html5实现的360度全景图浏览(带天地)
  17. 【可穿戴技术】相关资料
  18. 冰尘社补丁php,300英雄冰尘社盒子ios
  19. ES6: 支持ES6的浏览器版本(汇总表)
  20. Android利用百度地图API实现定位功能(记录)

热门文章

  1. mysql修改密码级别
  2. 【机器人领域会议】简介
  3. 什么是显卡的OpenGL模式
  4. 技术雪球里的小度,向内寻找答案
  5. 魅蓝note3 android7,魅蓝Note3和全面评测对比 良心推荐!
  6. MYSQL中expect,expect使用方法
  7. [架构优化]webAPP优化解决办法
  8. tomcat环境配置以及cmd下启动tomcat
  9. 在html或dreamweaver中怎么设置无序项目列表符号的大小,Dreamweaver cs6项目列表的使用方法教程--系统之家...
  10. 小偷模拟器 Thief Simulator V20230207 最新中文学习版 单机游戏游戏下载免安装【3.27G】