St_Denis_St
Forum Member / Участник форума
Участник № / Member № 7259
отправлено / posted
Добрый день, уважаемые форумчане! Прошу помощи. Пытаюсь читать данные с регистров по Modbus TCP ничего не получается, а вот записывать значения получается. В чем причина не могу понять, все перепробовал уже. Посмотрел кучу обучающих видео, все делаю аналогично, запись работает, чтение нет. Опишу последовательность своих действий. Новый проект->В "Источниках приемниках" создаю группу MODBUS -> далее создаю компонент на чтение Rin_Word(4) -> открываю свойства, номер порта "0", адрес ПЛК "1", адрес канала в шестнадцатиричной системе "313b" (или 12603) -> тип протокола "TCP/IP" -> направление "Input"-> формат "Аналог"-> IP адрес "192.168.0.21" (в моем случае это адрес ПЛК в сети). Далее перетаскиваю созданный компонент Rin_Word(4) при помощи drag & drop в группу "Каналы". Затем открываю компонент "Экран" создаю атрибут "Текст" далее из группы "Каналы" перетаскиваю компонент Rin_Word(4) в атрибуты экрана, после чего при помощи drag & drop беру аргумент и переношу на атрибут "Текст", затем сохраняю проект, нажимаю на кнопку "Сохранить для МРВ" устанавливаю курсор на узел "RTM" и нажимаю на кнопку "Запустить профайлер", после открытия окна "Профайлера" нажимаю на кнопку "Запустить", в поле атрибута "Текст" появляется значение "0", при том что в регистре по этому адресу я записываю другие значения и это никак не отражается в атрибуте "Текст". Сдвиг регистров учтен. В моем случае это (адрес регистра ПЛК-1).
Сообщения / Posts 46 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Откройте "Панель МРВ" при запуске профайлера, найдите в дереве каналов канал, связанный с "Источником" Rin_Word(4), и посмотрите в окне справа его значение и атрибут ДОСТОВЕРНОСТЬ (атрибут 4). Каким образом и в какой регистр Вы записываете "другие значения"?
"записывать значения получается". Из Trace Mode? В тот же контроллер? Как Вы это настраиваете в Trace Mode 6?
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
St_Denis_St
Forum Member / Участник форума
Участник № / Member № 7259
отправлено / posted
quote:Отправитель / Originally posted by AdAstra Technical Support: Откройте "Панель МРВ" при запуске профайлера, найдите в дереве каналов канал, связанный с "Источником" Rin_Word(4), и посмотрите в окне справа его значение и атрибут ДОСТОВЕРНОСТЬ (атрибут 4). Каким образом и в какой регистр Вы записываете "другие значения"?
"записывать значения получается". Из Trace Mode? В тот же контроллер? Как Вы это настраиваете в Trace Mode 6?
Зашел в "Панель МРВ" атрибут [004] - значение его "_F". Запись значений осуществляю следующим образом. В группе "MODBUS" создаю компонент W_Word(6), в его свойствах: номер порта "0", Адрес "1", Канал "0х313a" (или 12602 учитывая смещение в ПЛК адрес при этом 12603), протокол "TCP/IP", направление "Output", формат "Аналог", IP адрес "192.168.0.21" далее перетаскиваю этот компонент в группу "Каналы", на Экране создаю элемент "Кнопка" или "Значение аргумента" добавляю этот компонент из группы "Каналы" в "Аргументы экрана" и привязываю к элементу "Кнопка" либо "Значение аргумента". Все работает, значения пишутся в регистры. Запись значений в регистры осуществляется в онлайн режиме с ПЛК (BECKHOFF) средствами TWINCAT. Есть ли у Вас возможность подключиться к моему ПК, к которому подключен ПЛК, и посмотреть в чем причина ну и подсказать?
Сообщения / Posts 46 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Надо внимательно ознакомиться со стандартом Modbus.
1. Если у канала Rin_Word(4), возникает признак недостоверности (атрибут 4 показывает F), это означает, что в запросе чтения существует ошибка: неверный адрес устройства, неверный адрес регистра, неправильная Modbus-функция. Возможно также, что в настройках IP-адреса в этом "Источнике" все-таки есть ошибка.
2. Писать можно только в регистры типа HOLDING. Читать можно из регистров HOLDING (функцией Rout_Word(3)) и INPUT (функцией Rin_Word(4)). Если Вы пишете в регистр HOLDING, то прочитать его содержимое функцией Rin_Word(4) нельзя.
3. Чтобы считывать то, что Вы записываете, адреса регистров в функциях записи и чтения должны быть одинаковы. У Вас чтение осуществляется из регистра 12603, а пишете Вы по адресу 12602.
4. Бывают устройства, в которых используются отступления от Modbus-стандарта. Это можно увидеть только в документации на устройство.
5. Настройка "Источника" на функцию чтения "направление "Input"-> формат "Аналог"-> " вызовет создание канала типа FLOAT, но отображать он будет целочисленное значение регистра.
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
St_Denis_St
Forum Member / Участник форума
Участник № / Member № 7259
отправлено / posted
quote:Отправитель / Originally posted by AdAstra Technical Support: Надо внимательно ознакомиться со стандартом Modbus.
1. Если у канала Rin_Word(4), возникает признак недостоверности (атрибут 4 показывает F), это означает, что в запросе чтения существует ошибка: неверный адрес устройства, неверный адрес регистра, неправильная Modbus-функция. Возможно также, что в настройках IP-адреса в этом "Источнике" все-таки есть ошибка.
2. Писать можно только в регистры типа HOLDING. Читать можно из регистров HOLDING (функцией Rout_Word(3)) и INPUT (функцией Rin_Word(4)). Если Вы пишете в регистр HOLDING, то прочитать его содержимое функцией Rin_Word(4) нельзя.
3. Чтобы считывать то, что Вы записываете, адреса регистров в функциях записи и чтения должны быть одинаковы. У Вас чтение осуществляется из регистра 12603, а пишете Вы по адресу 12602.
4. Бывают устройства, в которых используются отступления от Modbus-стандарта. Это можно увидеть только в документации на устройство.
5. Настройка "Источника" на функцию чтения "направление "Input"-> формат "Аналог"-> " вызовет создание канала типа FLOAT, но отображать он будет целочисленное значение регистра.
Спасибо большое! Все заработало при смене функции Rin_Word(4) на функцию Rout_Word(4). Еще такой вопрос. Как сделать ярлык для запуска Профайлера и сразу его запуск не загружая среду разработки TRACE MODE (для оператора).
Сообщения / Posts 46 | Из / From: Russia
| IP / IP: IP адрес / IP address |
St_Denis_St
Forum Member / Участник форума
Участник № / Member № 7259
отправлено / posted
Еще такой вопрос. Как считывать и записывать знаковые переменные? Если ПЛК может передавать по сети Modbus TCP только переменные типа WORD (UINT) и/или INT (знаковое). При использовании функции Rout_Float(3) получаемое значение от ПЛК очень мало и находится в пределах "0" хотя текущее значение в регистре меняется от -20 до +20. Нашел в инструкции что нужно создавать текстовый документ, открыть и записать в него значение от 0 до 3 затем сохранить и переименовать его как modbus, затем изменить его расширение на ".set" но так и не понял где именно его создать и как изменить его расширение. И какое значение для моего случая в него записать.
Сообщения / Posts 46 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
В разделе "Отладка проекта": "rtc. Дополнительные ключи команды запуска Вид отображения графических экранов может быть задан с помощью следующих ключей команды запуска МРВ (см. также Задание параметров работы мониторов ):
/fullscreen – в полноэкранном режиме; если ключ не задан – в окне;
/fullscreen /hidemenu – в полноэкранном режиме без меню;
/run – запуск узла. Если в узле существуют каналы класса ПОЛЬЗОВАТЕЛЬ, МРВ пытается запустить узел от лица пользователя с логином default и паролем default;
/windows и /windowsxp – переопределяют стиль по умолчанию. Windows Vista и Windows 7: ключ /windows устраняет уменьшение ширины полосы прокрутки (ошибка Qt).
Ключи работают, если узел содержит хотя бы один экран."
отправлено / posted
Для отображения целочисленных знаковых переменных надо использовать Rout_Word(4) (формат ДИСКРЕТ) и привязать к этому источнику канал HEX16 с установкой флажка "Вид представления DEC".
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
St_Denis_St
Forum Member / Участник форума
Участник № / Member № 7259
отправлено / posted
quote:Отправитель / Originally posted by AdAstra Technical Support: В разделе "Отладка проекта": "rtc. Дополнительные ключи команды запуска Вид отображения графических экранов может быть задан с помощью следующих ключей команды запуска МРВ (см. также Задание параметров работы мониторов ):
/fullscreen – в полноэкранном режиме; если ключ не задан – в окне;
/fullscreen /hidemenu – в полноэкранном режиме без меню;
/run – запуск узла. Если в узле существуют каналы класса ПОЛЬЗОВАТЕЛЬ, МРВ пытается запустить узел от лица пользователя с логином default и паролем default;
/windows и /windowsxp – переопределяют стиль по умолчанию. Windows Vista и Windows 7: ключ /windows устраняет уменьшение ширины полосы прокрутки (ошибка Qt).
Ключи работают, если узел содержит хотя бы один экран."
Указанную командную строку можно поместить в ярлык.
St_Denis_St
Forum Member / Участник форума
Участник № / Member № 7259
отправлено / posted
quote:Отправитель / Originally posted by AdAstra Technical Support: Для отображения целочисленных знаковых переменных надо использовать Rout_Word(4) (формат ДИСКРЕТ) и привязать к этому источнику канал HEX16 с установкой флажка "Вид представления DEC".
Сделал, получается следующее: При положительном значении в регистре от 0 до 20, все хорошо, при отрицательном естественно 65535 и вниз до 65516. Как можно инвертировать эти значения в отрицательные от -20 до 0?
Сообщения / Posts 46 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
1. В справочной системе раздел "Отладка проекта/Профайлер с поддержкой графических экранов/rtc.Дополнительные ключи команды запуска".
2. Вы действительно установили у канала HEX16 флажок "Вид представления DEC"? Непосредственно в "Панели МРВ" можно ввести в такой канал 65516 и получить в реальном значении -20. Для отображения на экране тип данных аргумента экрана должен быть INT.
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
St_Denis_St
Forum Member / Участник форума
Участник № / Member № 7259
отправлено / posted
quote:Отправитель / Originally posted by St_Denis_St:
quote:Отправитель / Originally posted by AdAstra Technical Support: Для отображения целочисленных знаковых переменных надо использовать Rout_Word(4) (формат ДИСКРЕТ) и привязать к этому источнику канал HEX16 с установкой флажка "Вид представления DEC".
Сделал, получается следующее: При положительном значении в регистре от 0 до 20, все хорошо, при отрицательном естественно 65535 и вниз до 65516. Как можно инвертировать эти значения в отрицательные от -20 до 0?
С отображением разобрался, в атрибутах поля "Текст" указал формат %hd. А вот как быть с трендом? Как добиться верного построения кривой?
Сообщения / Posts 46 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Задайте тип данных аргумента REAL, а в ГЭ "Текст" формат "Float %g". На тренд этот аргумент будет выводиться как аналоговая кривая.
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
St_Denis_St
Forum Member / Участник форума
Участник № / Member № 7259
отправлено / posted
quote:Отправитель / Originally posted by AdAstra Technical Support: 1. В справочной системе раздел "Отладка проекта/Профайлер с поддержкой графических экранов/rtc.Дополнительные ключи команды запуска".
2. Вы действительно установили у канала HEX16 флажок "Вид представления DEC"? Непосредственно в "Панели МРВ" можно ввести в такой канал 65516 и получить в реальном значении -20. Для отображения на экране тип данных аргумента экрана должен быть INT.
С отображением разобрался и с построением кривой по значению читаемому из регистра. А вот с тем как запускать только Профайлер без запуска среды разработки, пока не понятно. В теории я предполагаю что нужно создать файл rtc.exe в котором написать строку <MPB><RTM_1>[/fullscreen [/hidemenu]] [/run] [/windows] [/windowsxp] Вопрос где создавать этот файл? RTM_1 - правая кнопка мыши, "создать компонент" -> "Документ" -> переименовать в "rtc.exe" и в него вписать строку выше. Или его нужно создать в папке проекта? в основной папке где name.exe или в папке RTM_1?
Сообщения / Posts 46 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Файл rtc.exe размещен в папке инструментальной среды Trace Mode 6. Ваша задача - записать в ярлык указанную командную строку: <путь к rtc.exe>rtc.exe <путь к *.dbb><Name>.dbb /run Например, c:\WORK\Trace_Mode_6_102\rtc.exe c:\WORK\TM6_test\Котельная\ARM\Котельная_0.dbb /run
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
St_Denis_St
Forum Member / Участник форума
Участник № / Member № 7259
отправлено / posted
quote:Отправитель / Originally posted by AdAstra Technical Support: Файл rtc.exe размещен в папке инструментальной среды Trace Mode 6. Ваша задача - записать в ярлык указанную командную строку: <путь к rtc.exe>rtc.exe <путь к *.dbb><Name>.dbb /run Например, c:\WORK\Trace_Mode_6_102\rtc.exe c:\WORK\TM6_test\Котельная\ARM\Котельная_0.dbb /run
отправлено / posted
На рабочем столе или в папке АВТОЗАГРУЗКА проведите стандартную процедуру "Создать ярлык" на базе указанной командной строки, отредактированной в соответствии с размещением и наименованием инструментальной среды и папки узла.
St_Denis_St
Forum Member / Участник форума
Участник № / Member № 7259
отправлено / posted
quote:Отправитель / Originally posted by AdAstra Technical Support: На рабочем столе или в папке АВТОЗАГРУЗКА проведите стандартную процедуру "Создать ярлык" на базе указанной командной строки, отредактированной в соответствии с размещением и наименованием инструментальной среды и папки узла.
Если Вы не знакомы с такими процедурами, привлеките Вашего системного администратора.
В версии BASE эта функция работает? Я сделал все, но почему то при запуске ярлыка выводится сообщение, что не найден файл *.dbb (ну и в командной строке при вводе команды /run ярлык не создается...)
Сообщения / Posts 46 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
В базовой версии автозапуск реализуется.
Если выводится "сообщение, что не найден файл *.dbb ", значит, Вы неправильно указали либо путь к файлу *.dbb, либо наименование файла *.dbb. Проверяйте. Читайте указанный раздел в справочной системе "Отладка проекта/Профайлер с поддержкой графических экранов/rtc. Дополнительные ключи команды запуска".
Ключ /run в командной строке указывает на автоматический запуск узла проекта после его загрузки профайлером.
St_Denis_St
Forum Member / Участник форума
Участник № / Member № 7259
отправлено / posted
quote:Отправитель / Originally posted by AdAstra Technical Support: В базовой версии автозапуск реализуется.
Если выводится "сообщение, что не найден файл *.dbb ", значит, Вы неправильно указали либо путь к файлу *.dbb, либо наименование файла *.dbb. Проверяйте. Читайте указанный раздел в справочной системе "Отладка проекта/Профайлер с поддержкой графических экранов/rtc. Дополнительные ключи команды запуска".
Ключ /run в командной строке указывает на автоматический запуск узла проекта после его загрузки профайлером.
Ярлык создается средствами ОС.
Можно ли создавать архив по значению считываемому из регистра и потом его читать и экспортировать в EXEL например? Как это реализовать?
Сообщения / Posts 46 | Из / From: Russia
| IP / IP: IP адрес / IP address |