安装NuGet包
1. 打开Visual Studio。
2. 在解决方案资源管理器中右键点击你的项目。
3. 选择“管理NuGet程序包”。
4. 在NuGet包管理窗口中,选择“浏览”选项卡。
5. 搜索框中输入“netstandard.modbus”,找到netstandard.modbus库。
6. 安装netstandard.modbus库。
using System;
using System.Text;
using Modbus.Device;
namespace ModbusTcpExample
{
public class Program
{
public static void Main(string[] args)
{
try
{
// 创建MODBUS TCP客户端
using (var client = new ModbusTcpClient("192.168.1.10", 502))
{
client.Transport.ReadTimeout = 5000; // 设置超时时间
client.Transport.WriteTimeout = 5000;
// 连接到MODBUS TCP服务器
client.Connect();
// 写入一段文字“你好”
WriteString(client, 1, 100, "你好");
// 断开连接
client.Disconnect();
}
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
private static void WriteString(ModbusTcpClient client, int unitId, int startAddress, string text)
{
// 将字符串转换为字节数组
byte[] textBytes = Encoding.UTF8.GetBytes(text);
// 确保字节数组长度是偶数
if (textBytes.Length % 2 != 0)
{
textBytes = new byte[textBytes.Length + 1];
Array.Copy(textBytes, 0, textBytes, 0, textBytes.Length - 1);
}
// 将字节数组转换为16位整数数组
ushort[] wordArray = new ushort[textBytes.Length / 2];
for (int i = 0; i < textBytes.Length; i += 2)
{
wordArray[i / 2] = (ushort)((textBytes[i] << 8) | textBytes[i + 1]);
}
// 写入多个寄存器
bool success = client.WriteMultipleRegisters(unitId, startAddress, wordArray);
if (success)
{
Console.WriteLine($"Successfully wrote string '{text}' starting at address {startAddress}");
}
else
{
Console.WriteLine($"Failed to write string starting at address {startAddress}");
}
}
}
}
1. 创建MODBUS TCP客户端:
创建一个ModbusTcpClient实例,指定MODBUS TCP服务器的IP地址和端口号(默认为502)。
using (var client = new ModbusTcpClient("192.168.1.10", 502))
2. 设置超时时间:
client.Transport.ReadTimeout = 5000; // 设置超时时间为5秒
client.Transport.WriteTimeout = 5000;
3. 连接到MODBUS TCP服务器:
client.Connect();
4. 写入一段文字“你好”:
WriteString(client, 1, 100, "你好");
调用WriteString方法,向指定地址写入一段文字“你好”。
5. 断开连接:
client.Disconnect();
private static void WriteString(ModbusTcpClient client, int unitId, int startAddress, string text)
{
// 将字符串转换为字节数组
byte[] textBytes = Encoding.UTF8.GetBytes(text);
// 确保字节数组长度是偶数
if (textBytes.Length % 2 != 0)
{
textBytes = new byte[textBytes.Length + 1];
Array.Copy(textBytes, 0, textBytes, 0, textBytes.Length - 1);
}
// 将字节数组转换为16位整数数组
ushort[] wordArray = new ushort[textBytes.Length / 2];
for (int i = 0; i < textBytes.Length; i += 2)
{
wordArray[i / 2] = (ushort)((textBytes[i] << 8) | textBytes[i + 1]);
}
// 写入多个寄存器
bool success = client.WriteMultipleRegisters(unitId, startAddress, wordArray);
if (success)
{
Console.WriteLine($"Successfully wrote string '{text}' starting at address {startAddress}");
}
else
{
Console.WriteLine($"Failed to write string starting at address {startAddress}");
}
}