Read Holding Register FC03, Read Input Register FC04 C# | Modbus RTU/ASCII/TCP C#
Link tải Source C#:
Link tải DLL Library:
Code Visual Studio 2015
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Modbus.Device;
using System.Threading;
using Modbus.Utility;
namespace Test_NModbus_RTU_Serial
{
public partial class Form1 : Form
{
ModbusSerialMaster master;
byte slaveID = 1;
ushort startAddress = 0;
ushort numOfPoints = 10;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
read();
}
private void button1_Click(object sender, EventArgs e)
{
write();
}
private void read()
{
try
{
SerialPort serialPort = new SerialPort(); //Create a new SerialPort object.
serialPort.PortName = "COM3";
serialPort.BaudRate = 9600;
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.Open();
master = ModbusSerialMaster.CreateRtu(serialPort);
BeginWork();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
private async void BeginWork()
{
while (true)
{
// Since we asynchronously wait, the UI thread is not blocked by the file download.
var result = await DoWork(textBox6.Text);
// Since we resume on the UI context, we can directly access UI elements.
textBox6.Text = result;
}
}
private async Task<string> DoWork(object text)
{
// Do actual work
await Task.Delay(100);
// Return Actual Result
ushort[] holding_register = master.ReadHoldingRegisters(slaveID, startAddress, numOfPoints); // Read holding FC03
await Task.Delay(100);
//ushort[] input_register = master.ReadInputRegisters(slaveID, startAddress, 10); //Read Input FC04
bool[] read_coid = master.ReadCoils(slaveID, startAddress, 10); // Read coil FC01
textBox1.Text = read_coid[0].ToString();
textBox2.Text = read_coid[1].ToString();
textBox3.Text = read_coid[2].ToString();
textBox4.Text = read_coid[3].ToString();
textBox5.Text = read_coid[4].ToString();
textBox11.Text = Convert.ToString(holding_register[0]); // 16bit
textBox10.Text = Convert.ToString(holding_register[1]); // 16bit
textBox9.Text = Convert.ToString(holding_register[2]); // 16bit
textBox8.Text = Convert.ToString(holding_register[3]); // 16bit
textBox7.Text = Convert.ToString(holding_register[4]); // 16bit
/* uint value_1 = ModbusUtility.GetUInt32(input_register[1], input_register[0]); // 32bit
uint value_2 = ModbusUtility.GetUInt32(input_register[3], input_register[2]); // 32bit
uint value_3 = ModbusUtility.GetUInt32(input_register[5], input_register[4]); // 32bit
uint value_4 = ModbusUtility.GetUInt32(input_register[7], input_register[6]); // 32bit
uint value_5 = ModbusUtility.GetUInt32(input_register[9], input_register[8]); // 32bit
textBox1.Text = BitConverter.ToSingle(BitConverter.GetBytes((uint)value_1), 0).ToString(); // chuyển đổi float
textBox2.Text = BitConverter.ToSingle(BitConverter.GetBytes((uint)value_2), 0).ToString(); // chuyển đổi float
textBox3.Text = BitConverter.ToSingle(BitConverter.GetBytes((uint)value_3), 0).ToString(); // chuyển đổi float
textBox4.Text = BitConverter.ToSingle(BitConverter.GetBytes((uint)value_4), 0).ToString(); // chuyển đổi float
textBox5.Text = BitConverter.ToSingle(BitConverter.GetBytes((uint)value_5), 0).ToString(); // chuyển đổi float */
return DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
}
private void textBox6_TextChanged(object sender, EventArgs e)
{
}
private void write()
{
master.WriteSingleRegister(slaveID, ushort.Parse(textBox15.Text), ushort.Parse(textBox16.Text));
}
private void Read_Coil()
{
}
private void button2_Click(object sender, EventArgs e)
{
master.WriteSingleCoil(slaveID, ushort.Parse(textBox15.Text), bool.Parse(textBox16.Text));
}
}
}
bạn có file hướng dẫn sự dụng nmodbus không cho mình xin với.
ReplyDelete