PDA

Просмотр полной версии : MB110+OwenIONet



AndreyMal
20.08.2019, 16:44
пробую создать приложение для MB110 по сбору данных.
По протоколу modbus, пробовал на питоне, но к сожалению без результата.
Скачал библиотеку для C# и пользуясь инструкцией написал небольшой код.


owenProtocol.OwenRead(<Адрес>, AddressLengthType.Bits11, "rEAd");

получаю ошибку
{"Выдано исключение типа "OwenioNet.Exceptions.SlaveNetworkException".\r\nНеизвестный код сетевой ошибки"} OwenioNet.Exceptions.SlaveNetworkException


SerialPort masterPort = new SerialPort("COM3");
masterPort.BaudRate = 9600;
masterPort.DataBits = 8;
masterPort.Parity = Parity.None;
masterPort.StopBits = StopBits.One; masterPort.Open();
using (IOwenProtocolMaster owenProtocol = OwenProtocolMaster.Create(masterPort))
{
byte[] dataFromDevice = owenProtocol.OwenRead(<Адрес>, AddressLengthType.Bits11, "rEAd");
var converterFloat = new ConverterFloat();
var valueFromDevice = converterFloat.ConvertBack(dataFromDevice);
}

Новикова Маргарита
21.08.2019, 10:11
пробую создать приложение для MB110 по сбору данных.
По протоколу modbus, пробовал на питоне, но к сожалению без результата.
Скачал библиотеку для C# и пользуясь инструкцией написал небольшой код.


owenProtocol.OwenRead(<Адрес>, AddressLengthType.Bits11, "rEAd");

получаю ошибку
{"Выдано исключение типа "OwenioNet.Exceptions.SlaveNetworkException".\r\nНеизвестный код сетевой ошибки"} OwenioNet.Exceptions.SlaveNetworkException


SerialPort masterPort = new SerialPort("COM3");
masterPort.BaudRate = 9600;
masterPort.DataBits = 8;
masterPort.Parity = Parity.None;
masterPort.StopBits = StopBits.One; masterPort.Open();
using (IOwenProtocolMaster owenProtocol = OwenProtocolMaster.Create(masterPort))
{
byte[] dataFromDevice = owenProtocol.OwenRead(<Адрес>, AddressLengthType.Bits11, "rEAd");
var converterFloat = new ConverterFloat();
var valueFromDevice = converterFloat.ConvertBack(dataFromDevice);
}


Добрый день!
У Вас действительно в настройках модуля параметр A.Len равен 11? По умолчанию этот параметр равен 8. Проверьте сетевые настройки модуля в конфигураторе.
У модулей аналогового ввода измеренное значение "rEAd" передается в формате float с меткой времени. В качестве конвертера нужно использовать ConverterFloatTimestamp.

AndreyMal
30.08.2019, 09:25
Вопрос решился. Все сделал.
Спасибо.
Пример выкладываю, может кому пригодиться:

SerialPort masterPort = new SerialPort("COM3");
masterPort.BaudRate = 9600;
masterPort.DataBits = 8;
masterPort.Parity = Parity.None;
IOwenProtocolMaster owenProtocol = OwenProtocolMaster.Create(masterPort);
float value= GetFromDevice(owenProtocol, 0x11); // получаем значение с первого входа, все остальные +1
static float GetFromDevice(IOwenProtocolMaster owenProtocol, Int32 Address)
{
try
{
var converterFloat = new ConverterFloat();
byte[] dataFromDevice = owenProtocol.OwenRead(Address, AddressLengthType.Bits8, "Read");
return converterFloat.ConvertBack(GetFloatFromData(dataFr omDevice));
} catch
{
return -1;
}
}
static byte[] GetFloatFromData(byte[] dataFromDevice)
{
byte[] shortdata = new byte[4];
shortdata.SetValue(dataFromDevice[0], 0);
shortdata.SetValue(dataFromDevice[1], 1);
shortdata.SetValue(dataFromDevice[2], 2);
shortdata.SetValue(dataFromDevice[3], 3);
return shortdata;
}