PDA

Просмотр полной версии : Проблема с чтением данных из приборов учета ИРВИС. ПЛК160 МО2



Felicio
22.04.2023, 06:40
Здравствуйте! Столкнулись с проблемой чтения данных на ПЛК160 [М02]. К контроллеру посредством RS-485 подключен счетчик газа ИРВИС-PC4-УЛЬТРА. Все данные читаются хорошо, за исключением Объема газа (на данный момент 7-мизначное число). Регистр в ИРВИСЕ-139, тип данных uint(dword), учитывая сдвиг, считываю 140 регистр. Считывал через modbus(master) при помощи 32bit input module (приложенный скриншот). Первые 2 цифры считывает верно, а следующие скачут между случайными значениями, то больше, то меньше. Перебрал все варианты. Все остальные данные (включая данные Float) читаются корректно. Есть серьезные подозрения на неправильный порядок считывания байтов в модуле 32bit input module. В ИРВИСЕ данный регистр является типом Uint32, а байты передаются в порядке 1-0-3-2. Подскажите, как поменять порядок байтов CodeSYS 2.3 или все-таки проблема в чем-то другом?

UPD: Проблему решил не совсем стандартным способом. Считал оба регистра 16 битным типом данных WORD и сложил побайтово в один DWORD. Делал при помощи библиотеки SysLibMem

imaex
22.04.2023, 09:24
dword - это не uint. а long или ulong. Так и надо 2-мя регистрами считывать по слову. Есть 4 типа преобразования в long:

10000 x low register + high register
65536 x low register + high register
10000 x high register + low register
65536 x high register + low register

kondor3000
22.04.2023, 09:53
Здравствуйте! Столкнулись с проблемой чтения данных на ПЛК160 [М02]. К контроллеру посредством RS-485 подключен счетчик газа ИРВИС-PC4-УЛЬТРА. Все данные читаются хорошо, за исключением Объема газа (на данный момент 7-мизначное число). Регистр в ИРВИСЕ-139, тип данных uint(dword), учитывая сдвиг, считываю 140 регистр. Считывал через modbus(master) при помощи 32bit input module (приложенный скриншот). Первые 2 цифры считывает верно, а следующие скачут между случайными значениями, то больше, то меньше. Перебрал все варианты. Все остальные данные (включая данные Float) читаются корректно. Есть серьезные подозрения на неправильный порядок считывания байтов в модуле 32bit input module. В ИРВИСЕ данный регистр является типом Uint32, а байты передаются в порядке 1-0-3-2. Подскажите, как поменять порядок байтов CodeSYS 2.3 или все-таки проблема в чем-то другом?

UPD: Проблему решил не совсем стандартным способом. Считал оба регистра 16 битным типом данных WORD и сложил побайтово в один DWORD. Делал при помощи библиотеки SysLibMem

Для начала попробуйте поставить в UMD (Универсал модбайс девайс), последнюю настройку Native (переставить регистры)
А вообще переставить байты (регистры) проще всего с помощью указателей ( работает и на Float), можно и биб-кой.
В целочисленных можно и проще, с помощью SHR, SHL.
Uint32=UDINT=DWORD