Добрый день.
Я пытаюсь взаимодействовать с TPM202 из кода по протоколу Modbus. Пишу на C#, Visual Studio 2013. Использую библиотеку NModbus.
Устройство подключено через преобразователь AC4, системой порт определяется как COM2. Через выложенную у вас на сайте утилиту устройство видится, управлять им возможно.
Однако, при попытке связаться с ним из кода у меня вылетает System.TimeoutException на строчках, отсылающих запросы устройству.
Код следующий:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using Modbus.Data;
using Modbus.Device;
using Modbus.Utility;
using Modbus.Serial;
namespace OWEN_TPM202_Control
{
class Data
{
public string ReturnedCommand { get; private set; }
private bool connected;
private SerialPort serialPort;
public Data()
{
connected = false;
}
public void Connect()
{
if (!connected)
{
serialPort = new SerialPort("COM2");
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
serialPort.Handshake = Handshake.None;
serialPort.ReadTimeout = 500;
serialPort.WriteTimeout = 500;
serialPort.Open();
connected = true;
}
var adapter = new SerialPortAdapter(serialPort);
ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(adapter);
master.ReturnQueryData(1, 0); // вот здесь выдает исключение
byte slaveID = 1;
ushort startAddress = 0;
ushort numOfPoints = 5;
ushort[] registers = master.ReadHoldingRegisters(slaveID, startAddress, numOfPoints); // и здесь
}
}
}
Объясните мне, пожалуйста, что я делаю не так и в чем может быть проблема.