?1、在項目中通過NuGet添加NModbus,在界面中添加一個Button。
using NModbus.Device;
using NModbus;
using System.Net.Sockets;
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;
using System.Diagnostics;namespace WpfAppModbus
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void btnRead_Click(object sender, RoutedEventArgs e){// 1. 連接到 Modbus 服務器(Modbus TCP)string ipAddress = "127.0.0.1"; // 設備的 IP 地址int port = 502; // Modbus TCP 默認端口TcpClient client = new TcpClient(ipAddress, port);// 2. 獲取 Modbus TCP 設備的協議客戶端var factory = new ModbusFactory();IModbusMaster master = factory.CreateMaster(client);// 3. 讀取從站設備的寄存器ushort startAddress = 0; // 寄存器起始地址ushort numRegisters = 10; // 讀取 10 個寄存器// 4.從站地址(Slave ID)byte slaveId = 2;try{// 讀取保持寄存器 // ReadHoldingRegisters: 讀取保持寄存器的值。參數包括從站地址(Slave ID)、起始地址和要讀取的寄存器數量。// NModbus 還支持其他 Modbus 操作,例如:// 讀取輸入寄存器: ReadInputRegisters// 讀取線圈狀態: ReadCoils// 寫入單個寄存器: WriteSingleRegister// 寫入多個寄存器: WriteMultipleRegisters// 寫入單個線圈: WriteSingleCoil// 寫入多個線圈: WriteMultipleCoilsushort[] registers = master.ReadHoldingRegisters(slaveId,startAddress, numRegisters);// 輸出結果Debug.WriteLine("讀取到的寄存器值:");foreach (var register in registers){Debug.WriteLine(register);}}catch (Exception ex){Debug.WriteLine($"讀取錯誤: {ex.Message}");}// 5. 關閉連接client.Close();}}
}
2、使用Modscan32軟件模擬一個Modbus服務器,選擇文件->新建,設置Device Id、Address、Lenght,在下拉框中選擇03:HOLDING REGISTER。在下方灰色框中雙擊要修改的數據。
https://download.csdn.net/download/xingchengaiwei/90341117
3、運行程序后,讀取到的數據如下。