前言
WPF入门:使用Nmodbus4,通过串口连接,并读取写入寄存器的方法
一、下载dll
打开Nuget并安装NModbus4和IO.Ports
二、步骤
1.加入按钮
代码如下(示例):
<Window x:Class="WpfApp1.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:WpfApp1"
mc:Ignorable="d"
WindowStartupLocation="CenterScreen"
Title="Test" Height="500" Width="800" >
<Grid>
<StackPanel>
<Button Content="读取" Click="Button_Click" Width="100" Margin="0,10"></Button>
<Button Content="写入" Click="Button_Click_1" Width="100" Margin="0,5"></Button>
</StackPanel>
</Grid>
</Window>
2.读取写入数据(点击按钮事件)
代码如下(示例):
using Modbus.Device;
using System.IO.Ports;
using System.Text;
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;
namespace WpfApp1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
/// <summary>
/// 读寄存器
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click(object sender, RoutedEventArgs e)
{
#region 读取modbus
ushort startAddr = 0; //起始地址
ushort readLen = 10;//读取长度
using (SerialPort serialPort = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One))
{
serialPort.Open();
IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);
ushort[] result = master.ReadHoldingRegisters(1, startAddr, readLen);
}
#endregion
}
/// <summary>
/// 写寄存器
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click_1(object sender, RoutedEventArgs e)
{
#region 写modbus
ushort startAddr = 1;
using (SerialPort serialPort = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One))
{
serialPort.Open();
IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);
ushort[] values = new ushort[] { 222, 444 };
master.WriteMultipleRegisters(1, startAddr, values);
}
#endregion
}
}
}
Modbus Slave软件选择03并连接,软件下载与具体配置网上查找说明
3.功能演示:
点击写入,写入222与444:
点击读取,后台代码读取到222与444:
总结
在串口与modbus模拟软件安装好后(具体步骤可网上搜索),代码实现读取与写入如上所述,可用于后续看板的编写与数据收集处理。