当前位置: 首页 > news >正文

C# WPF上位机开发(利用tcp/ip网络访问plc)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        c# wpf如果是用来开发非标上位机的,那么和plc的通信肯定是少不了的。而且,大部分plc都支持modbus协议,所以这个时候如果有一个库可以帮助我们和plc设备进行modbus通信,那就非常方便的。目前NuGet下关于modbus的函数库还是有一些的,比如EasyModbus。

        

1、用NuGet下载EasyModbus

        对应库的名字叫EasyModbusTCP,虽然名称当中包含了TCP,其实本身也是支持UDP的。这点大家注意下。下载的方法和之前的下载也是类似的,用NuGet搜索完成后,直接下载即可,

2、准备测试xaml界面

        测试界面的话,也不用特别复杂,主要就是两个按钮。这两个按钮就是负责设备的读写功能。除了这两个按钮之外,还有一个textbox,负责数据的显示。

        界面本身不复杂,这里也给出xaml代码,供大家参考,

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp"mc:Ignorable="d"Title="MainWindow" Height="450" Width="600"><Grid><StackPanel Margin="10,10,10,10"><Button Content="Read from PLC" Height="80" Click="ReadFromPLC_Click"/><Label Height="20"/><Button Content="Write to PLC" Height="80" Click="WriteToPLC_Click"/><Label Height="20"/><TextBox x:Name="plcValueTextBox" Height="60" Text=""/></StackPanel></Grid>
</Window>

3、编写和准备测试代码

        代码部分主要还是围绕着控件的回调功能进行的。首先两个按钮肯定各有一个回调函数。而且函数实现的功能也肯定和modbus相关。此外既然是网络,那么有必要在程序开始启动的时候,就准备好对应的设备套接字,这样才能在回调函数中完成对应的读写操作。

        整个代码本身没有什么理解难度,大家简单浏览下就会掌握它的用法的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;using EasyModbus;namespace WpfApp
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{private ModbusClient modbusClient;public MainWindow(){InitializeComponent();ConnectToPLC();}private void ConnectToPLC(){modbusClient = new ModbusClient("10.0.0.10", 502); // Replace with your PLC's IP addressmodbusClient.Connect();}private void ReadFromPLC_Click(object sender, RoutedEventArgs e){ushort startAddress = 0; // Replace with the starting address in your PLCint num = 2;int[] data = modbusClient.ReadHoldingRegisters(startAddress, num);plcValueTextBox.Text = data[0].ToString();}private void WriteToPLC_Click(object sender, RoutedEventArgs e){ushort startAddress = 0; // Replace with the starting address in your PLCint valueToWrite = Convert.ToInt32(plcValueTextBox.Text);modbusClient.WriteSingleRegister(startAddress, valueToWrite);}}
}

http://www.lryc.cn/news/260851.html

相关文章:

  • Knife4j 接口文档如何设置 Authorization 鉴权参数?
  • CentOS 防火墙管理及使用的redis基本常用命令
  • 路由器原理
  • 采埃孚4D成像雷达拆解
  • 若依框架springboot——修改前端图片上传样式
  • mysql 数据库 关于库的基本操作
  • 【通用】Linux,VSCode,IDEA,Eclipse等资源相对位置
  • 音视频技术开发周刊 | 323
  • STM32在CTF中的应用和快速解题
  • SaaS 电商设计 (五) 私有化部署-实现 binlog 中间件适配
  • Android APP 常见概念与 adb 命令
  • 菜鸟学习日记(python)——函数
  • 垃圾回收 (GC) 在 .NET Core 中是如何工作的?
  • Appium 图像识别技术 OpenCV
  • 产品Axure的元组件以及案例
  • 智能优化算法应用:基于头脑风暴算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • flutter Pageview组件
  • 如何用 Cargo 管理 Rust 工程系列 丙
  • Vue学习笔记-Vue3中的provide与inject
  • 2021年数维杯国际大学生数学建模A题新冠肺炎背景下港口资源优化配置策略求解全过程文档及程序
  • 【css】css实现文字两端对齐效果:
  • ElasticSearch指南 - Mapping - Metadata fields
  • 12.15每日一题(备战蓝桥杯摘花生)
  • VUE-脚手架搭建
  • ArcGIS Pro SDK根据Xml/Json文件反向生成几何
  • LY/T 3301-2022 实木厚芯胶合板检测
  • 代码随想录算法训练营第十六天| 104. 二叉树的最大深度、111. 二叉树的最小深度、222. 完全二叉树的节点个数
  • 字符串——OJ题
  • Linux---cp和mv命令选项
  • LVS负载均衡器(nat模式)+nginx(七层反向代理)+tomcat(多实例),实现负载均衡和动静分离