|Компьютер| -> |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();
}
Я застрял и не знаю, как действовать, поскольку я не уверен, что происходит не так. Мои предположения заключались в следующем:
- Использовать ведомую сеть RTU вместо главной (также не удалось заставить это работать)
- Может быть, мой компьютер не может быть главным, и мне нужно иметь Arduino или ПЛК между датчиками?
- Постарайтесь как можно глубже проследить за NModbus и посмотреть, где происходит сбой (Происходит в ModbusTransport.UnicastMessage, "response=ReadResponse, но я понятия не имею, почему).
Подробнее здесь: https://stackoverflow.com/questions/791 ... odbus-in-c