PDA

Просмотр полной версии : ПЛК160М и ИВК-102 по RS-485



Александр
09.12.2021, 12:09
Добрый день! Пытаюсь получить данные накопленного объема (V1) с ИВК-102 (Взлёт, v.82019111) по RS-485 (ModbusRTU). В качестве опрашивающего устройства (master) ПЛК160М (Овен), при опросе ИВК-102 возвращает ошибку опроса - код 81.
Логический адрес нужных данных 432785. Если правильно понял инструкцию Взлет, то в опрашивающем устройстве указываем физический адрес 32784 (отбрасываем старшую цифру логического адреса и вычитаем единицу). Целая часть накопленного объема (V1) - тип данных long, соответственно в ПЛК160 в подмодуле UniversalModBusDevice в качестве входного канала 32inputModule. Тип команды на чтение (ReadHoldingRegisters 0x03). Было бы достаточно получить только целую часть, без дробной, но в инструкции Взлет упоминается что в этом диапозоне адресов данные могут читаться только попарно. Так как дробная часть параметра V1 - float, добавил в ПЛК еще один входной канал 32inputModule (также пробовал RealInputModule) с адресом 49234 (дробная часть V1), но не уверен что это так работает, в описаниях протокола Modbus не нашел описания того как делается парное чтение.
Скорость 4800, без контроля четности, 8 бит, 1 стоповый бит. Изменение времени таймаута (текущий 1000), периода опроса устройства (текущее 500), эффекта не даёт (на ИВК задержка ответа 200). FramingTime слота RS-485 = 0. Последовательность байт менял с Native на TraceMode, эффекта нет.
Через "Универсальный просмоторщик-Взлет" ИВК-102 подключается, данные считываются.
Также, этот ПЛК160 по RS-485 ведет опрос преобразователя частоты, чтение и запись данных нормальная.
Где искать решение проблемы - непонятно.

kondor3000
09.12.2021, 13:56
Добрый день! Пытаюсь получить данные накопленного объема (V1) с ИВК-102 (Взлёт, v.82019111) по RS-485 (ModbusRTU). В качестве опрашивающего устройства (master) ПЛК160М (Овен), при опросе ИВК-102 возвращает ошибку опроса - код 81.
Логический адрес нужных данных 432785. Если правильно понял инструкцию Взлет, то в опрашивающем устройстве указываем физический адрес 32784 (отбрасываем старшую цифру логического адреса и вычитаем единицу). Целая часть накопленного объема (V1) - тип данных long, соответственно в ПЛК160 в подмодуле UniversalModBusDevice в качестве входного канала 32inputModule. Тип команды на чтение (ReadHoldingRegisters 0x03). Было бы достаточно получить только целую часть, без дробной, но в инструкции Взлет упоминается что в этом диапозоне адресов данные могут читаться только попарно. Так как дробная часть параметра V1 - float, добавил в ПЛК еще один входной канал 32inputModule (также пробовал RealInputModule) с адресом 49234 (дробная часть V1), но не уверен что это так работает, в описаниях протокола Modbus не нашел описания того как делается парное чтение.
Скорость 4800, без контроля четности, 8 бит, 1 стоповый бит. Изменение времени таймаута (текущий 1000), периода опроса устройства (текущее 500), эффекта не даёт (на ИВК задержка ответа 200). FramingTime слота RS-485 = 0. Последовательность байт менял с Native на TraceMode, эффекта нет.
Через "Универсальный просмоторщик-Взлет" ИВК-102 подключается, данные считываются.
Также, этот ПЛК160 по RS-485 ведет опрос преобразователя частоты, чтение и запись данных нормальная.
Где искать решение проблемы - непонятно.

Вы бы лучше инструкцию выложили, а то сами запутались и нас запутать хотите. 81 ошибка, это нет связи, проблема с адресом устройства, в настройках связи, или с подключением. Сначала надо разобраться со связью, а потом уже с чтением. Если скорость 4800, то сажать надо на отдельный слот, остальные то наверняка скорость побольше.

Если я правильно понял, то читать надо как RealInputModule, так как флоат, а не как вы 32inputModule. А потом выделить нужный кусок как WORD, то есть разбить на два WORD.
Или объявить переменную как массив WORD,
w_1 : ARRAY[0..1] OF WORD AT%QB9.1.3.0 ; и читать как StringInputModule (AT% подставить свои).

melky
09.12.2021, 15:31
прибору начхать на тип, если попросили 2 регистра, он и отдаст 2 регистра. 81 это ошибка связи вообще, а не ошибка запроса...

Александр
10.12.2021, 09:31
5826758268
Вы правы, с инструкцией будет понятней. Целая часть параметра V1: тип данных - long, поэтому 32inputModule. Дробная часть - float. Есть понимание - это требование чтения "только попарно" - просто последовательное обращение к двум регистрам?
Посадил на отдельный слот, теперь видно что last error циклически меняется с 81 на 89 (не нашел описания кода 89). Проверял (и менял) чередование А/В, параметры связи ИВК-102, почему проблемы с связью непонятно. Сейчас нет возможности проверить, в понедельник попробую подключиться с ноутбука (через адаптер AC4).

kondor3000
10.12.2021, 10:18
5826758268
Вы правы, с инструкцией будет понятней. Целая часть параметра V1: тип данных - long, поэтому 32inputModule. Дробная часть - float. Есть понимание - это требование чтения "только попарно" - просто последовательное обращение к двум регистрам?
Посадил на отдельный слот, теперь видно что last error циклически меняется с 81 на 89 (не нашел описания кода 89). Проверял (и менял) чередование А/В, параметры связи ИВК-102, почему проблемы с связью непонятно. Сейчас нет возможности проверить, в понедельник попробую подключиться с ноутбука (через адаптер AC4).

Вы опять про адреса регистров, забудьте про них пока.
Адрес устройства какой у вас? Что прописано в UMD? Что прописано в RS485? Скрины давайте.

Александр
10.12.2021, 10:27
5827158272
Когда в UMD нет запрашиваемых регистров, то опрос и не идет (last adress=0, last error=0).
На ИВК-102 адрес=1, скорость 4800 (это максимальная для него). Ставил на клеммы ПЛК RS-485 резистор 100 Ом, эффекта нет.

melky
10.12.2021, 10:35
kondor3000 вообще-то RTU, как бы unsigned long в двух регистрах не предполагает ничего другого...
4 в начале адреса, которую отбрасывают, говорит о том, что это Read Holding Registers, что тоже должно быть понятно и козе.

Логика - физика легко проверяется запросом... Тут производители каждый сам по себе...

Александр
10.12.2021, 10:55
Проект во вложении.
A-B => B-A ?
0x03 => 0x04 ?
Что имеете в виду?

kondor3000
10.12.2021, 11:16
5827158272
Когда в UMD нет запрашиваемых регистров, то опрос и не идет (last adress=0, last error=0).
На ИВК-102 адрес=1, скорость 4800 (это максимальная для него). Ставил на клеммы ПЛК RS-485 резистор 100 Ом, эффекта нет.

Вы на свою версию смотрели и что написано в ваших скринах?
В вашей версии Long вообще не используется, используется только флоат с 349153 регистра.
Выложили обрывки из описания, что руководство целиком нельзя выложить?

Александр
10.12.2021, 11:28
Вы на свою версию смотрели и что написано в ваших скринах?
В вашей версии Long вообще не используется, используется только флоат с 349153 регистра.

Вероятно не ту версию вложил. Пробовал всякие варианты, обращение к регистрам не требующим парное чтение.
Сейчас прикрепил актуальный проект.

Александр
10.12.2021, 11:36
Минцикл = 1
Уберите (пока) частотник из обмена и с физической линии
Пощупайте любые данные состоящие из 1-ого регистра
таймаут ну 200, не надо больше
Потыкайте A-B B-A

Спасибо за участие.
Убирал частотник. Менял А-В. В понедельник попробую еще покомбинировать варианты )

kondor3000
10.12.2021, 14:50
Вероятно не ту версию вложил. Пробовал всякие варианты, обращение к регистрам не требующим парное чтение.
Сейчас прикрепил актуальный проект.

Если у вас частотник на том же RS485-1 и скоростью 4800 , зачем у вас два Модбас-мастера ? Сделайте в одном два UMD с адресами 1 и 2. Но это потом, сначала вообще уберите Модбас мастер на частотник.
А лучше сделайте новый проект и работайте только со своим контроллером IVK-120, пока не заработает.
И ещё у вас PLC_PRG 2 вообще не запускается, вы специально так сделали?

Александр
13.12.2021, 09:13
Проблема в том что ПЛК на действующей установке, контролирует работу водоочистки, поэтому приходится в этом проекте упражняться. Два Модбас-мастера для пробы сделал (по вашему же совету)), PLC_PRG 2 - это CFC версия изготовителя оборудования, для практики для себя переделал в ST, этот вариант и используется.
На данный момент ситуация такая: подключился через АС4 к ноутбуку с InSAT\MasterOPC Universal Modbus Server. А-В совпало, связь есть, но с данными непонятка.
На фото в приложении видно что все запросы GOOD.
Tag1 и Tag2 - попытка попарного чтения целой и дробной части накопленного объема V1, нулевые значения.
Tag3 - индекс скорости RS232 (2:=4800b/s, вроде как соответствует).
Tag4 - адрес Modbus = 1 (соответствует).
Tag6 - заводской номер прибора (не соответствует, либо это программный номер, не совпадающий с тем что на корпусе).
Tag7 - заводской номер преобразователя расхода (значение=0, возможно и не установлен номер ПР на ИВК).
Tag8 и Tag9 - попытка попарного чтения целой и дробной части накопленного объема V1 другой командой.
Tag5 и Tag10 - параметры, значения которых не могу проверить, поэтому непонятно корректные данные или нет.
Прикрепил инструкции Взлет.
Есть идеи куда копать?
Увидел что в инструкции (ivk102p_82019111_modbus.pdf) сказано что Регистры хранения содержат настроечные параметры, а регистры ввода содержат
измеренные и вычисленные значения. (функция 3: чтение нескольких регистров хранения,
4: чтение нескольких регистров ввода).
Хотя во второй инструкции (prtkl_Modbus_standart_data.pdf) сказано что старшая цифра логического адреса = 4 (Holding Register – функция 3).
Попробовал функцией 4 прочитать по адресу 32784 (INPUT_REGISTERS), тип в устройстве uint, так же значение =0.
Не могу понять, в ivk102p_82019111_modbus.pdf логический адрес 432785 тип unsigned long, а в первой таблице prtkl_Modbus_standart_data.pdf при старшей цифре логического адреса=4 - Holding Register – 16 битные данные (word, uint). То есть и тип другой и функция чтения другая.

Александр
13.12.2021, 10:10
58318
В описании Modbus из инета говорится: 0x4 - Чтение регистров данных
Эта функция используется для последовательного чтения от 1 до 125 регистров данных.
Нумерация регистров начинается с нуля. Регистры 16-ти битные, беззнаковые или знаковые (в
дополнительном коде). 32-х битные регистры разбиваются на два 16-ти битных слова в формате
[HIword, LOWword].
Как читать один 32-битный регистр двумя 16-битными словами - непонятно

Александр
13.12.2021, 10:59
Исходя из того что измеренные данные в регистрах ввода, по Таблица регистров ввода типа целое значение 4 байта, по адресу 32822 (целая часть), и 49192 (дробная часть) вот такие цифери получились:
58319

Но накопленный объем = 778,747
58320

Непонятно всё это

Александр
13.12.2021, 11:31
58321
На данный момент ситуация такая: последний вариант (Tag1: address-32822, целая часть объема), при установке "старшим словом вперед") дает 6-значное число, которое соответствует целой части и дробной, только без запятой между ними )).
Tag2 - попытка получить дробную часть, показывает ерунду.
Tag3 - адрес 49178 (текущий измеренный расход) показывает корректно, ту же цифру что и на ИВК102, в том же виде.
Непонятно что делать с 6-значным накопленным объемом, нужна только целая часть (первые три знака).

kondor3000
13.12.2021, 11:39
Проблема в том что ПЛК на действующей установке, контролирует работу водоочистки, поэтому приходится в этом проекте упражняться. Два Модбас-мастера для пробы сделал (по вашему же совету)), PLC_PRG 2 - это CFC версия изготовителя оборудования, для практики для себя переделал в ST, этот вариант и используется.
На данный момент ситуация такая: подключился через АС4 к ноутбуку с InSAT\MasterOPC Universal Modbus Server. А-В совпало, связь есть, но с данными непонятка.
На фото в приложении видно что все запросы GOOD.
Tag1 и Tag2 - попытка попарного чтения целой и дробной части накопленного объема V1, нулевые значения.
Tag3 - индекс скорости RS232 (2:=4800b/s, вроде как соответствует).
Tag4 - адрес Modbus = 1 (соответствует).
Tag6 - заводской номер прибора (не соответствует, либо это программный номер, не совпадающий с тем что на корпусе).

Если правильно читает скорость и адрес и неправильно номер прибора, то возможно переставлены байты или WORD-ы в номере.

По поводу парного чтения, вам уже написал, в вашей версии не используется похоже. Попробуйте вот с этого адреса объём считать 58322

PS пока писал, вы сами сделали тоже. А что с накопленным, сколько в приборе и сколько показывает? И что за объём V2, непонятно?

А дробную часть, старшим словом вперёд сделали?

Александр
13.12.2021, 11:41
Если правильно читает скорость и адрес и неправильно номер прибора, то возможно переставлены байты или WORD-ы в номере.

По поводу парного чтения, вам уже написал, в вашей версии не используется похоже. Попробуйте вот с этого адреса объём считать 58322

Да, в сообщении выше описал результат

Александр
13.12.2021, 11:45
старшее слово с помощью SHL сместили на 16 разрядов и сложили с младщим, это один из вариантов, их так то много еще

К сожалению не владею темой, разовый вопрос - получение данных modbus, решится, и может еще год не придется сталкиваться. Поэтому уровень вот такой.

Александр
13.12.2021, 11:53
Если правильно читает скорость и адрес и неправильно номер прибора, то возможно переставлены байты или WORD-ы в номере.

По поводу парного чтения, вам уже написал, в вашей версии не используется похоже. Попробуйте вот с этого адреса объём считать 58322

PS пока писал, вы сами сделали тоже. А что с накопленным, сколько в приборе и сколько показывает? И что за объём V2, там есть тоже?
Скорее всего номер прибора неправильный из-за перестановки байт. Уже ушел оттуда, не могу проверить, но уверен что так и есть.
Накопленный объем V1 в приборе 779,075 а ОРС-сервер получает 779075. V2 - накопленный объем по второму каналу, не используется.
Попытался в ПЛК (32bit_input_module, и также попробовал варианты RegisterInputModule, RealInputModule) обратиться к адресу 32822 (функция 4), то же самое что и раньше, lastError меняется с кода 81 на 89.

Александр
13.12.2021, 11:59
А дробную часть, старшим словом вперёд сделали?

Да, все варианты попробовал, там похожей на правду цифры так и не получилось

kondor3000
13.12.2021, 12:04
Да, все варианты попробовал, там похожей на правду цифры так и не получилось

Значит надо не только слова (Word) менять местами, но и байты в словах переставлять.

Александр
13.12.2021, 12:18
Значит надо не только слова (Word) менять местами, но и байты в словах переставлять.
Это наверное уже в коде PRG делать? Смущает то что в ПЛК нет возможности при создании канала UMD выбирать эти варианты ("старшим словом вперед"). Там есть Trace_mode/Native, но ни один из них не дает эффекта, lastError 81/89 все так же идет.

kondor3000
13.12.2021, 12:43
Это наверное уже в коде PRG делать? Смущает то что в ПЛК нет возможности при создании канала UMD выбирать эти варианты ("старшим словом вперед"). Там есть Trace_mode/Native, но ни один из них не дает эффекта, lastError 81/89 все так же идет.
Сначала надо со связью разобраться, связь должна работать, тогда и данные будете получать, хоть и неправильные.
Добавьте целочисленные регистры которые точно читаются, адрес (RegistеrInput, WORD), скорость (RegistеrInput), номер прибора. Функция 0х03.

Потом будете разбираться с неправильными показаниями.
Как раз Native и переставит байты в словах (только в DWORD и REAL), останется только слова местами поменять в программе. ФБ для перестановки местами WORD, есть даже в примерах на форуме.

По поводу дробной части V1, попробуйте этот регистр считать как Real Input 58330

melky
13.12.2021, 12:48
Какая разница на порядок байт если вам прибор тупо не отвечает ВООБЩЕ ? что вы там переставляете бестолку...

Александр
15.12.2021, 11:57
Добрый день! Ситуация на данный момент такая:
Подключил для проверки другой ПЛК160v1 (не модернизированную версию), связь с ИВК102 нормальная, без ошибок связи, данные читает так же как и ОРС-сервером:
- целую часть V1 читает как 6-разрядное число, без запятой между целой и дробной частью, показания ИВК102 = 796,474 м3, ПЛК получает 796747;
- дробная часть V1 = какая-то непонятная циферь.
На установке стоит ПЛК-160М, менять его нечем, что с ним делать не понятно. Target-файл в этом году скачивал, то есть относительно свежий.
А ПЛК160v1 другую проблему имеет, ошибка связи при подключении из Codesys (Ethernet), но если раньше через раз но подключался, то сегодня вот успел несколько раз подключиться чтобы проверить связь с ИВК, а сейчас не получается вообще, перезагрузки всего не помогают. Треш какой-то. Тратится время и усилия не на то чтобы улучшить процесс, а на борьбу с недостатками оборудования.

kondor3000
15.12.2021, 16:35
Добрый день! Ситуация на данный момент такая:
Подключил для проверки другой ПЛК160v1 (не модернизированную версию), связь с ИВК102 нормальная, без ошибок связи, данные читает так же как и ОРС-сервером:
- целую часть V1 читает как 6-разрядное число, без запятой между целой и дробной частью, показания ИВК102 = 796,474 м3, ПЛК получает 796747;
- дробная часть V1 = какая-то непонятная циферь.
На установке стоит ПЛК-160М, менять его нечем, что с ним делать не понятно. Target-файл в этом году скачивал, то есть относительно свежий.
А ПЛК160v1 другую проблему имеет, ошибка связи при подключении из Codesys (Ethernet), но если раньше через раз но подключался, то сегодня вот успел несколько раз подключиться чтобы проверить связь с ИВК, а сейчас не получается вообще, перезагрузки всего не помогают. Треш какой-то. Тратится время и усилия не на то чтобы улучшить процесс, а на борьбу с недостатками оборудования.

Ну с дробной частью, скорее всего опять перестановка байт. А с ПЛК думайте что делать. Они же отработали и немало уже. Мне другое непонятно, если он с дугого оборудования читал, почему с ИВК не работает?

Александр
16.12.2021, 06:31
Подключил по старой схеме ИВК102 по RS-485 к основному контроллеру ПЛК160М. Отсоединил ПЧ, убрал из конфигурации ПЛК всё кроме Modbus(Master) с запросом одного регистра (скорость сети RS). Проверил все настройки по проекту контроллера который успешно связывался с ИВК. Отличие только в том что там минимальное время цикла 50мс, поменял, но это не дало эффекта. LastError=81.
PLCInfo
PLC model MODEL PLC 160
Версия ПО метр: 2.0
Binary VERSION 1.2.42
Need Target version >= 3.12
Compiled: 14:40:51 Feb 8 2021
STM32 binary version 114
MAC E4:1E:0A:01:2D:FE
IP 10.0.6.10
GATE 10.0.6.1
MASK 255.255.255.0

kondor3000
16.12.2021, 08:32
Подключил по старой схеме ИВК102 по RS-485 к основному контроллеру ПЛК160М. Отсоединил ПЧ, убрал из конфигурации ПЛК всё кроме Modbus(Master) с запросом одного регистра (скорость сети RS). Проверил все настройки по проекту контроллера который успешно связывался с ИВК. Отличие только в том что там минимальное время цикла 50мс, поменял, но это не дало эффекта. LastError=81.


Выкладывайте опять проект, чудес не бывает, с другим то оборудованием работает. Где то косяк.
В чём отличие подключения были при работе с ИВК ? К примеру новый ПЛК подключали на столе, а старый в цеху, БП другой, помехи в сети. Может у вас новый провод по RS485 в обрыве.

Лично мне попались недавно несколько! обрывов, в новом целом фторопластовом проводе отмотанного с катушки.

Александр
16.12.2021, 08:48
Очень хотелось бы чтобы это было из-за моего косяка, это проще решить чем проблемы с оборудованием. Проект в приложении.
Подключение ПЛК было по месту, Ethernet и RS-485 перекинул с одного на другой ПЛК и всё пошло. То есть кабели используются те же самые. БП разный, на старом ПЛК питание 220В, на основном 24В. Думаю может нужно какой-то жесткий сброс сделать ПЛК или прошивку поменять (вроде как делается такое), пока непонятно

kondor3000
16.12.2021, 09:08
Очень хотелось бы чтобы это было из-за моего косяка, это проще решить чем проблемы с оборудованием. Проект в приложении.
Подключение ПЛК было по месту, Ethernet и RS-485 перекинул с одного на другой ПЛК и всё пошло. То есть кабели используются те же самые. БП разный, на старом ПЛК питание 220В, на основном 24В. Думаю может нужно какой-то жесткий сброс сделать ПЛК или прошивку поменять (вроде как делается такое), пока непонятно

А почему адрес регистра то 1, а всё понял, скорость 1 регистр.

Александр
16.12.2021, 09:50
А почему адрес регистра то 1, а всё понял, скорость 1 регистр.

Там из логического адреса вычитается единица для получения физического адреса регистра. Логический адрес 400002, физический = 1. Ну и на старом ПЛК корректное получение по этому адресу было.

58384

kondor3000
16.12.2021, 11:19
Ещё один момент, у вас в программе таргет для ПЛК 160 М V2, а в программе для старого ПЛК какой тагрет? Должен быть ПЛК 160 М. Вы целевую платформу меняли для старого?

Александр
16.12.2021, 11:25
Ещё один момент, у вас в программе таргет для ПЛК 160 М V2, а в программе для старого ПЛК какой тагрет? Должен быть ПЛК 160 М. Вы целевую платформу меняли для старого?

Да, именно так, на старом ПЛК таргет PLC160-M, а на действующем ПЛК: PLC160-Mv2. Так понимаю - таргет является частью проекта, поэтому для старого плк свой проект со своим таргетом, для нового свой проект со своим таргетом.

kondor3000
16.12.2021, 11:35
Просто вы пишите про старый ПЛК, а программу для нового всё время выкладываете.

Если IP заводской, попробуйте сбросить к заводским настройкам, загрузить программу и снова проверить.
Еще мне не нравиться очень большой разрыв в версии прошивки ПЛК и версии таргета.

In_Da_Cher_A
17.12.2021, 09:03
Да, именно так, на старом ПЛК таргет PLC160-M, а на действующем ПЛК: PLC160-Mv2. Так понимаю - таргет является частью проекта, поэтому для старого плк свой проект со своим таргетом, для нового свой проект со своим таргетом.
а конфигурацию перебивали? просто замена таргета ничего не даст

Александр
28.12.2021, 10:26
Добрый день, к сожалению не получилось проверить последние предположения, ушел в отпуск, видимо только в феврале получится заниматься. Всем спасибо, постараюсь отписаться по результатам.