PDA

Просмотр полной версии : TPM202, Modbus, C#, System.TimeoutException



Tiruno
16.03.2016, 16:42
Добрый день.
Я пытаюсь взаимодействовать с 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); // и здесь
}
}
}


Объясните мне, пожалуйста, что я делаю не так и в чем может быть проблема.

capzap
16.03.2016, 17:24
http://www.owen.ru/forum/showthread.php?t=20122 эту тему читали?

Tiruno
17.03.2016, 11:22
http://www.owen.ru/forum/showthread.php?t=20122 эту тему читали?

Да, читал.
Приложенный в теме проект(после правки Modbus TCP на Modbus RTU) у меня тоже выдает исключение System.TimeoutException.
Лучше задать этот вопрос там?

capzap
17.03.2016, 11:51
Егор в состоянии читать темы с форума, раз не ответил, значит на то есть причины. Я пишу на Яве, у меня проблем с опросом по рту не было

Малышев Олег
17.03.2016, 17:26
Может
надо сначала запросить

byte slaveID = 1;
ushort startAddress = 0;
ushort numOfPoints = 5;
ushort[] registers = master.ReadHoldingRegisters(slaveID, startAddress, numOfPoints); // и здесь


а потом брать данные ?

master.ReturnQueryData(1, 0); // вот здесь выдает исключение

Yegor
17.03.2016, 17:52
Алгоритм стандартный: искать работающий мастер, снифером сравнивать пакеты. Я б помог конкретнее, но ТРМов даже вживую не видел.

melky
17.03.2016, 22:50
А что, NModbus единственные исходники, посмотреть и опробовать другие решения нельзя ?

Tiruno
18.03.2016, 17:38
Вопрос снят.
Проблема исчезла после переустановки драйвера преобразователя. Странно.