Вход

Просмотр полной версии : ТРМ 202 и OwenRead



settom
27.11.2019, 14:21
Доброго дня!
Подскажите решение.
Проблема с чтением двух значений входов. Теоретически должно работать, но OwenRead вылетает с ошибкой


"Выдано исключение типа "OwenioNet.Exceptions.SlaveNetworkException".\r\nРазмер поля данных не соответствует ожидаемому"} System.Exception {OwenioNet.Exceptions.SlaveNetworkException}

Count = 2;


private Mutex OwenMut = new Mutex();
----------------------------------------------------------------
private double[] ReadAI(int Adr, int Count)
{
double[] result = null;
byte[] InData = null;
try
{
result = new double[Count];
for (ushort i = 0; i < Count; i++)
{
OwenMut.WaitOne();
InData = owenProtocol.OwenRead(Adr, OwenioNet.Types.AddressLengthType.Bits8, "PV ", i);
OwenMut.ReleaseMutex();
var converter = new OwenioNet.DataConverter.Converter.ConverterFloat(3 );
var value = converter.ConvertBack(InData);

result[i] = (double)value;
}
}
catch (Exception ex) { Console.WriteLine("ReadAI: " + ex.Message); }
return result;
}

При этом так
owenProtocol.OwenRead(Adr, OwenioNet.Types.AddressLengthType.Bits8, "PV ");
и так
owenProtocol.OwenRead(Adr, OwenioNet.Types.AddressLengthType.Bits8, "PV ", null);
работает корректно и выдает значение первого входа

А так
owenProtocol.OwenRead(Adr, OwenioNet.Types.AddressLengthType.Bits8, "PV ", 0);
owenProtocol.OwenRead(Adr, OwenioNet.Types.AddressLengthType.Bits8, "PV ", 1);
и даже так
owenProtocol.OwenRead(Adr, OwenioNet.Types.AddressLengthType.Bits8, "PV ", (ushort)0);
owenProtocol.OwenRead(Adr, OwenioNet.Types.AddressLengthType.Bits8, "PV ", (ushort)1);
уже нет

settom
27.11.2019, 15:33
Не понимаю, почему ответ на такой вопрос и то косвенно удалось найти совсем в другом мануале
https://docplayer.ru/90189577-Spk-nastroyka-obmena-po-protokolu-oven-rukovodstvo-dlya-nachinayushchih-polzovateley-versiya-1-2-data.html
стр. 23-24.
Оказывается для второго и последующего значения нужно обращаться к другому последующему адресу. Почему про это не написано в мануале к самому ТРМ, мне не понятно.
В общем вот так правильно.
InData = owenProtocol.OwenRead(Adr + i, OwenioNet.Types.AddressLengthType.Bits8, "PV ");

Aleksander8
30.12.2019, 12:52
Странно. В коробке с приборами, кроме ИЭ, есть ещё лист.

SergeyML
11.12.2023, 19:35
Можно отправить в личку рабочий проект, для понимания? Спасибо