南昌新手网站建设费用,网站服务器地址怎么查,网络服务费,wordpress tinymce 字体【 声明#xff1a;版权所有#xff0c;欢迎转载#xff0c;请勿用于商业用途。 联系信箱#xff1a;feixiaoxing 163.com】 c# wpf如果是用来开发非标上位机的#xff0c;那么和plc的通信肯定是少不了的。而且#xff0c;大部分plc都支持modbus协议#xff0c;所以这个…【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱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:ClassWpfApp.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:WpfAppmc:IgnorabledTitleMainWindow Height450 Width600GridStackPanel Margin10,10,10,10Button ContentRead from PLC Height80 ClickReadFromPLC_Click/Label Height20/Button ContentWrite to PLC Height80 ClickWriteToPLC_Click/Label Height20/TextBox x:NameplcValueTextBox Height60 Text//StackPanel/Grid
/Window3、编写和准备测试代码 代码部分主要还是围绕着控件的回调功能进行的。首先两个按钮肯定各有一个回调函数。而且函数实现的功能也肯定和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 的交互逻辑/// /summarypublic 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 PLCs 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);}}
}