Skip to content

Repository files navigation

catch (Exception ex) { // 连接失败,清理资源 _plc?.Close(); _plc = null;

// 触发连接状态变更事件
ConnectionStatusChanged?.Invoke(this, false);

// 记录更详细的错误信息
string errorMessage = $"PLC连接失败: {ex.Message}";
if (ex is S7.Net.PlcException plcEx)
{
    errorMessage += $"\nPLC异常类型: {plcEx.GetType().Name}";
}

throw new Exception(errorMessage, ex);

}# PLC监控上位机教学项目

项目简介

这是一个使用C#和WPF开发的上位机教学项目,演示如何通过S7通信协议与西门子PLC进行数据交互。项目采用MVVM架构模式,适合初学者学习工业自动化上位机开发。

功能特性

  • ✅ 美观的WPF用户界面
  • ✅ 与西门子PLC的S7通信
  • ✅ 实时读取PLC温度数据
  • ✅ 向PLC写入设定值
  • ✅ 连接状态可视化指示
  • ✅ MVVM架构设计
  • ✅ 异步操作和错误处理

技术栈

  • 开发语言: C# (.NET 6)
  • UI框架: WPF (Windows Presentation Foundation)
  • 架构模式: MVVM (Model-View-ViewModel)
  • 通信库: S7.Net Plus
  • 目标平台: Windows

项目结构

PLCMonitor/
├── Commands/
│   └── RelayCommand.cs          # 命令实现类
├── Services/
│   └── PLCService.cs            # PLC通信服务
├── ViewModels/
│   ├── ViewModelBase.cs         # ViewModel基类
│   └── MainViewModel.cs         # 主窗口ViewModel
├── MainWindow.xaml              # 主窗口界面
├── MainWindow.xaml.cs           # 主窗口代码
├── App.xaml                     # 应用程序资源
├── App.xaml.cs                  # 应用程序入口
└── PLCMonitor.csproj            # 项目文件

核心组件说明

1. MVVM架构

ViewModelBase.cs

  • 实现INotifyPropertyChanged接口
  • 提供属性变更通知机制
  • 所有ViewModel的基类

RelayCommand.cs

  • 实现ICommand接口
  • 用于界面控件的命令绑定
  • 支持命令执行条件判断

MainViewModel.cs

  • 主窗口的业务逻辑
  • 管理PLC连接状态
  • 处理数据读写操作
  • 定时读取温度数据

2. PLC通信服务

PLCService.cs

  • 封装S7.Net库的通信功能
  • 提供异步的连接、读取、写入方法
  • 支持Real和Bool数据类型
  • 实现连接状态管理

3. 用户界面

MainWindow.xaml

  • 响应式布局设计
  • 数据绑定到ViewModel
  • 美观的视觉效果
  • 状态指示器

PLC配置要求

硬件要求

  • 西门子S7-1200/1500系列PLC
  • 以太网通信模块
  • 网络连接

PLC程序配置

在PLC中创建DB1数据块,包含以下变量:

DB1 (数据块1):
├── Temperature (Real) - 地址: DB1.DBD0  # 当前温度值
└── SetPoint (Real)    - 地址: DB1.DBD4  # 温度设定值

网络配置

  • PLC IP地址: 192.168.1.100 (可在MainViewModel.cs中修改)
  • 子网掩码: 255.255.255.0
  • 确保PC和PLC在同一网段

使用方法

1. 环境准备

  • 安装Visual Studio 2022或更高版本
  • 确保已安装.NET 6 SDK
  • 配置PLC网络连接

2. 运行项目

  1. 打开项目文件PLCMonitor.csproj
  2. 还原NuGet包依赖
  3. 修改MainViewModel.cs中的PLC IP地址
  4. 编译并运行项目

3. 操作步骤

  1. 启动应用程序
  2. 点击"连接PLC"按钮
  3. 观察温度数据的实时更新
  4. 在设定值输入框中输入目标温度
  5. 点击"写入设定值"按钮
  6. 完成后点击"断开连接"

学习要点

1. MVVM模式理解

  • Model: 数据模型和业务逻辑 (PLCService)
  • View: 用户界面 (MainWindow.xaml)
  • ViewModel: 视图逻辑 (MainViewModel)
  • 数据绑定: 界面与数据的双向绑定
  • 命令模式: 界面操作与业务逻辑的解耦

2. 异步编程

  • 使用async/await进行异步操作
  • 避免界面冻结
  • 正确的异常处理

3. PLC通信原理

  • S7协议的基本概念
  • 数据块(DB)的地址映射
  • Real数据类型的读写
  • 连接管理和错误处理

4. WPF界面设计

  • XAML布局管理
  • 数据绑定语法
  • 样式和模板
  • 响应式设计

扩展功能建议

初级扩展

  • 添加更多PLC变量监控
  • 实现数据日志记录
  • 添加报警功能
  • 支持多个PLC连接

中级扩展

  • 实现数据图表显示
  • 添加配置文件管理
  • 支持不同PLC型号
  • 实现数据库存储

高级扩展

  • Web API接口开发
  • 移动端监控应用
  • 工业4.0数据分析
  • 云端数据同步

常见问题

Q1: 连接PLC失败怎么办?

A: 检查以下几点:

  • PLC IP地址是否正确
  • 网络连接是否正常
  • PLC是否允许外部连接
  • 防火墙设置是否阻止连接

Q2: 读取数据失败?

A: 确认:

  • DB1数据块是否存在
  • 变量地址是否正确
  • PLC程序是否在运行

Q3: 界面无响应?

A: 可能原因:

  • 网络超时导致界面阻塞
  • 异步操作未正确实现
  • 需要检查异常处理逻辑

学习资源

版本历史

  • v1.0.0 - 初始版本,基本功能实现
  • 支持S7通信协议
  • MVVM架构设计
  • 温度监控和设定值写入

许可证

本项目仅用于教学目的,请遵循相关开源协议。


作者: 上位机教学团队
更新时间: 2024年
联系方式: 如有问题请在项目中提出Issue

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages