Просмотр полной версии : ПЛК200, OWEN Communcation, Взлёт ЭМ ЭКСПЕРТ-921МИ
Здравсвуйте, пытаюсь опросить 2 расходомера Взлёт ЭМ ЭКСПЕРТ-921МИ, по протоколу MODBUS, через библиотеку Owen commutication, соединение есть, на выходе блока OCL.MB_Serial_Request на выходе xERROR мигает Illegal Data Adress, пытаюсь опросить два регистра в массив, но нули, понимаю что что то не так с адресами регистров но не могу понять что, пробовал уже по разному.
В карте регистров
349289 Текущий расход, л/мин Q
3 отбросил в начале, ввожу 49289.
с 3 вначале не компилируется ))
Заранее спасибо, за ответы )))
Новичок в данной тематике, на другом ПЛК сделал сеть 3 ПЧ Instart и 2 конвеерных весов, всё опрашивается без проблем, по такой же логике вводил регистры ))
Для ВЗЛЁТА ЭКСПЕРТ ЭМ есть разные карты регистров номер пробовал из разных карт, ошибка одна и та же
https://vzljot.ru/upload/iblock/2c2/wcwmq1mzfl7kkvwsw4g4ja3a1k8b2xdu/ModBus_em_expert.pdf
3 в начале, 4 в команде - InputRegister
У вас там чё?
In_Da_Cher_A
25.07.2025, 22:17
сначала прочтите любым ОРС сервером или любой прогой для модбас
чтобы понять какой командой сколько и с каким порядком
Получается 9289 надо просто ввести?
У меня AC4 преобразователь MODBUS - USB, завтра им уже попробую.
В самой актуальной карте регистов
https://vzljot.ru/upload/iblock/fbd/3pzy2dgml07m4ty1v0ho243pzhkpgizo/modbus_em_expert9xxm.pdf
указан
349289 Текущий расход, л/мин Q
Извините не совсем понял ваш вопрос.)
Забавно, в протоколе 5 знаков на адрес с учётом определения типа регистра, а в документации 6 знаков.
Кто-то трындит.
349289, я изначально и подумал, что 3 это функция, а 49289 это адресс. Но нет.
Емельянов Кирилл
26.07.2025, 01:23
+/- 1 к адресу делали?
МихаилГл
26.07.2025, 04:55
349289, я изначально и подумал, что 3 это функция, а 49289 это адресс. Но нет.
3 вначале, это область памяти, как я понимаю. В доке написано что область входных регистров, так почему вы читаете 3ей командой, для холдинг регистров, когда надо 4ой...
PS Вот это гляньте, там только области 5значные, а у вас 6значные...
https://masteropc.ru/faq_modbusuniversal
МихаилГл
26.07.2025, 05:08
Забавно, в протоколе 5 знаков на адрес с учётом определения типа регистра, а в документации 6 знаков.
Кто-то трындит.
Просто раньше не планировали так много данных отправлять, но так как 65536 это 5 значное число, то многие производители и пишут 400000, например у сименса на весах такая штука, забыв про первую цифру как информационную все встает на места.
349289, я изначально и подумал, что 3 это функция, а 49289 это адресс. Но нет.
Чего тут думать, если в документе явно сказано, что это регистры ввода. Лидирующая 3-ка - это просто мнемонический указатель на тип регистра, т.е. регистр ввода. Не функции, а регистра. Функция чтения будет 4. Так же в документе явно указано, что это логические адреса, т.е. физический будет на 1 меньше.
Чего тут думать, если в документе явно сказано, что это регистры ввода. Лидирующая 3-ка - это просто мнемонический указатель на тип регистра, т.е. регистр ввода. Не функции, а регистра. Функция чтения будет 4. Так же в документе явно указано, что это логические адреса, т.е. физический будет на 1 меньше.
Попробовал, функцией READ INPUT REGISTR адресс ввёл 49288, 349289 убрал 3 отнял 1. Опрашиваю в массив, с масива ФБ OCL.WORD2_TO_REAL преобразую в число с плавающей запятой.
Данные приходят, но не то что нужно, фактически Q1 варьируется от 0 до 300, а Q2 стабильно в районе 50.
Либо регистр не тот, либо преобразовываю неправильно?
kondor3000
26.07.2025, 19:07
Попробовал, функцией READ INPUT REGISTR адресс ввёл 49288, 349289 убрал 3 отнял 1. Опрашиваю в массив, с масива ФБ OCL.WORD2_TO_REAL преобразую в число с плавающей запятой.
Данные приходят, но не то что нужно, фактически Q1 варьируется от 0 до 300, а Q2 стабильно в районе 50.
Либо регистр не тот, либо преобразовываю неправильно?
Для правильного отображения, надо правильно расставить регистры и байты.
Регистры можно поменять местами, байты переставляются нижним входом OCL.WORD2_TO_REAL
Так а вы не отнимайте 1, введите как есть, или наоборот прибавьте 1.
И вообще, выпишите 4 байта принятых, и есть масса калькуляторов онлайн из hex, где вам покажут числа при разном расположении байт.
Так тоже пробовал, FALSE на TRUE менял, тоже не те значения
Не отнимая ввожу, та же ошибка что и вначале.
+1 49290 ввожу, равные два стабильные значения 9.95683
kondor3000
26.07.2025, 21:10
Так тоже пробовал, FALSE на TRUE менял, тоже не те значения
Варианта всего 4, а у вас только два.
МихаилГл
26.07.2025, 21:15
Вам бы для начала найти гарантированно тот регистр, значение которого вы знаете точно, так вы узнаете куда смещать или не смещать адрес. А потом уже на нужном регистре с вычисленным смещением проверять все перестановки...
Если float, то там 8 вариантов, потому что можно зацепить не с того регистра :)
МихаилГл
26.07.2025, 21:21
Если float, то там 8 вариантов, потому что можно зацепить не с того регистра :)
Поэтому и предложим тс сначала потренироваться на регистре с заранее известным значением. А то потом окажется, что правильно показывает только до 100, например, а выше какаято чушь по литражу...)
Попробовать через стандартным средтсвом опроса CODESYS опросить расходомер и с разной перестановкой , с разной перестановкой байт?
Да компьютером с самого начала надо посмотреть и определиться. Потом подключать к ПЛК.
потренироваться на регистре с заранее известным значением.
++!!
Задать адрес 99 и найти его. Сам бодрейт опять же.
Что же касается флоатов. Прочитать нужные 2 регистра как целое 32-битное и сделать простейшие операции
D1 at% MD0: dword;
X1 at% MD0: real; //1234
D2 at% MD2: dword;
X2 at% MD2: real; //3412
D3 at% MD4: dword;
X3 at% MD4: real; //2143
D4 at% MD6: dword;
X4 at% MD6: real; //4321
-------------------------
D1 := D3 := что прочитали
D2 := D4 := rol(D1, 16);
D3 := (shl(D3, 8) and 16#FF00FF00) + (shr(D3,8) and 16#00FF00FF);
D4 := (shl(D4, 8) and 16#FF00FF00) + (shr(D4,8) and 16#00FF00FF);
в иксах все варианты
In_Da_Cher_A
27.07.2025, 09:45
да всё это элементарно читается орс сервером или модбас пулом
спокойно всё делается
никаких проблем кроме нежелания прежде чем чтото делать выяснить что такое модбас и чем регистры ввода отличаются от регистров хранения
к ОВЕНу это не имеет никакого отношения
Чтобы не привязываться к абсолютным адресам, делаю как в Pascal - через "объединения".
https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_datatype_union.html
Внимание - набирал без проверки в браузере, но смысл должен быть понятным
Сначала объявляю тип TConvert
TYPE TConvert:
UNION
by : ARRAY [0...3] OF BYTE;
w: ARRAY [0..1] OF WORD;
dw: DWORD;
r : REAL;
END_UNION
END_TYPE
А потом в программе объявляю переменную tcTemp и с помощью её полей обмениваю байты и слова
tcTemp.r := rReceived;
// перестановка 3412
wTemp := tcTemp.w[0];
tcTemp.w[0] := tcTemp.w[1];
tcTemp.w[1] := wTemp;
// или такая перестановка 4321 взамен предыдущей
byTemp := tcTemp.by[0];
tcTemp.by[0] := tcTemp.by[1];
tcTemp.by[1] := byTemp;
byTemp := tcTemp.by[2];
tcTemp.by[2] := tcTemp.by[3];
tcTemp.by[3] := byTemp;
wTemp := tcTemp.w[0];
tcTemp.w[0] := tcTemp.w[1];
tcTemp.w[1] := wTemp;
// присвоение результата в итоговую переменную rResult
rResult := tcTemp.r;
или любой другой вариант.
Обмен можно и при помощи ротации выполнять, а можно и как в примере - прямым обменом.
Тут плюс в отсутствии привязки к абсолютным адресам.
Попробовал сегодня Modbus Scan просто найти устройства, нашёл, всё отлично.
Потом попробовал ModbusTool, прочитать регистр из карты регистров которую сам нашёл на сайте производителя, float, пробовал разную перестановку байт, единственное адекватный вариант float AB CD, но значение всё равно какое то левое.
Производитель написал, Вот ссылка на карту регистров для Эксперт https://vzljot.ru/upload/iblock/2c2/wcwmq1mzfl7kkvwsw4g4ja3a1k8b2xdu/ModBus_em_expert.pdf
Регистр текущего расхода 349187, л/мин, формат float. Считываете функцией 4 два регистра с адреса 49186.
Попробовал регистр который он дал, ошибка ILLEGAL DATA VALUE.
Извините, коллеги. Ошибка вот в чём была, прибор у меня показывает в м3/час, а регистр читается в л/мин, умножил полученное значение на 0.06, получилось нужное значение ))
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot