Как мне прочитать регистр пирометра через NModbus на C#?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как мне прочитать регистр пирометра через NModbus на C#?

Сообщение Anonymous »

Я новичок в MODBus, но раньше работал с Profibus/PLC. Я пытаюсь использовать пакет C# NModbus для связи с двумя пирометрами с использованием RS485. Система настроена так:
|Компьютер| -> |RS485 на USB| -> |Раб 1| -> |Slave 2|
Пирометры, которые я использую, имеют этот список команд RTU. Я могу получить показания каждого из них индивидуально, используя фирменное программное обеспечение пирометров, поэтому я знаю, что моя проводка правильная. У меня есть код, который находит подключенные COM-порты, а затем позволяет пользователю выбрать номер COM для подключения.

Код: Выделить всё

 private void btnConnect_Click(object sender, EventArgs e)
{
string comNumber = tb_COM.Text;

myCOM.ConfigureAndOpen(comNumber, 115200);

SerialPort port = new SerialPort("COM10", Constants.BaudRate, Constants.Parity, Constants.DataBits, Constants.StopBits);

// Create the Modbus factory
var factory = new ModbusFactory();
var adapter = new SerialPortAdapter(myCOM.port);
IModbusSerialMaster master = factory.CreateRtuMaster(adapter);

// Read data from the first pyrometer(slave ID 1)
byte slaveId1 = 1;
ushort startAddress1 = 10000; // Input register address for the first pyrometer
ushort numRegisters1 = 1; // Number of registers to read
byte command1 = 0x04;
ushort[] registers1 = master.ReadInputRegisters(slaveId1, startAddress1, numRegisters1);
Console.WriteLine($"Pyrometer 1 Reading: {registers1[0]}");
tb_Display.AppendText($"Pyrometer 1 Reading: {registers1[0]}");

// Read data from the second pyrometer (slave ID 2)
byte slaveId2 = 2;
ushort startAddress2 = 10000; // Input register address for the second pyrometer
ushort numRegisters2 = 1; // Number of registers to read
byte command2 = 0x04;
ushort[] registers2 = master.ReadInputRegisters(slaveId2, startAddress2, numRegisters2);
Console.WriteLine($"Pyrometer 2 Reading: {registers2[0]}");
tb_Display.AppendText($"Pyrometer 2 Reading: {registers2[0]}");

timer1.Enabled = true;
timer1.Start();
}
Когда я нажимаю кнопку «Подключиться», моя программа перестает отвечать. Когда я отлаживал это, он останавливался на первой строке «ReadInputRegisters», и поток прекращал работу.
Я застрял и не знаю, как действовать, поскольку я не уверен, что происходит не так. Мои предположения заключались в следующем:
  • Использовать ведомую сеть RTU вместо главной (также не удалось заставить это работать)
  • Может быть, мой компьютер не может быть главным, и мне нужно иметь Arduino или ПЛК между датчиками?
  • Постарайтесь как можно глубже проследить за NModbus и посмотреть, где происходит сбой (Происходит в ModbusTransport.UnicastMessage, "response=ReadResponse, но я понятия не имею, почему).
Как я могу получить показания температуры от пирометров?< /п>

Подробнее здесь: https://stackoverflow.com/questions/791 ... odbus-in-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»