Просмотр полной версии : Все RETAIN-ы - на Modbus
aaaSashaMGGU
04.12.2024, 21:24
Добрый!
Есть ПЛК100 с программой на Codesys 2.3. Нужно заменить его на ПЛК210 на Codesys 3.5
Все Retain-ы в ПЛК100 хранятся в ModBus (slave). Их там ~ пара сотен байт (включая группы битов по 8)
Эти переменные читает Weintek по ModbusTCP. Выводит на свой экран
Оператор, если требуется, жмёт на экран, отправляет команду, меняет уставки и т. д. Weintek напрямую пишет данные обратно в контроллер по ModbusTCP
Далее контроллер работает с новыми значениями
Как теперь быть в ПЛК210? Как все эти Retain-ы закинуть прямо на Modbus, чтобы работало также, но при этом чтобы не создавать 2 разных массива (один для Retain-ов, второй для Modbus) и постоянно их сравнивать, а, если есть изменения, писать в Retain-ы и/или наоборот
В общем, какая-то ерунда получается
Можно ведь сделать красиво?
Спасибо за советы
Евгений Кислов
05.12.2024, 06:11
Добрый день.
1. https://owen.ru/forum/showthread.php?t=28167&p=434909&viewfull=1#post434909
2. https://youtu.be/jPj2v3vAKRw?si=jHsBN2ncMvMVeAc_
aaaSashaMGGU
05.12.2024, 08:50
Добрый день.
1. https://owen.ru/forum/showthread.php?t=28167&p=434909&viewfull=1#post434909
2. https://youtu.be/jPj2v3vAKRw?si=jHsBN2ncMvMVeAc_
Спс, буду пробовать
aaaSashaMGGU
07.12.2024, 19:45
Добрый день.
1. https://owen.ru/forum/showthread.php?t=28167&p=434909&viewfull=1#post434909
2. https://youtu.be/jPj2v3vAKRw?si=jHsBN2ncMvMVeAc_
На видео - прям 100% как мне нужно. Спасибо
Примерно так я и хотел: одним массивом и всё одним большим списком
Разве что, при переносе с Codesys 2.3 каждой использованной переменной придётся дописать в начале имя структуры с точкой, но это уже мелочи
aaaSashaMGGU
28.04.2025, 13:44
Добрый
Наконец-то я начал это делать. И сразу возникла как будто нерешаемая проблема
Вот есть у меня структура:
TYPE STRUCT_Weintek_Program_DATA:
STRUCT
//Собственно, все параметры
ROOM_READ_TEMP : REAL; //Адрес 000-001. СЗ. Текущая температура в помещении с датчика
ROOM_TEMP_ON : REAL; //Адрес 002-003. Температура включения нагревателей
ROOM_TEMP_OFF : REAL; //Адрес 004-005. Температура выключения нагревателей
V1_PRESSURE : REAL; //Адрес 006-007. СЗ. Давление из В1 (город)
Pings : DINT; //Адрес 008-009. Счётчик пингов для внешних систем
OUT_V1_PRESSURE : REAL; //Адрес 010-011. СЗ. Давление В1. На участок запаса воды
CPU_Load : REAL; //Адрес 012-013. Загрузка ЦП контроллера
AFTER_PUMP1_PRESSURE : REAL; //Адрес 014-015. СЗ. Давление после перекачного насоса
TANK_PRESSURE : REAL; //Адрес 016-017. СЗ. Давление в емкости (Уровень)
DRY_RUNNING_PROTECT_ON : REAL; //Адрес 018-019. Защита от сухого хода ВКЛ
..............
.............
..........
END_STRUCT
END_TYPE
Вот код:
83520
Вот всё работает как надо, всё хорошо
Но структура большая, в ней ~400 строк
Стоит мне переименовать/добавить/удалить любой параметр, как Codesys сразу говорит, что мол структура изменилась - и теперь будет обнулена
А это значит, что остальные ~399 параметров тоже обнулятся - и придётся все RETAIN-ы вводить по-новой
Пока вижу решением только хранить всё это с универсальными именами типа такого:
TYPE STRUCT_Weintek_Modbus_DATA:
STRUCT
//Собственно, все параметры
rHoldReg_000_000 : REAL; //Адрес 000-001. СЗ. Текущая температура в помещении с датчика
rHoldReg_002_002 : REAL; //Адрес 002-003. Температура включения нагревателей
rHoldReg_004_004 : REAL; //Адрес 004-005. Температура выключения нагревателей
rHoldReg_006_006 : REAL; //Адрес 006-007. СЗ. Давление из В1 (город)
rHoldReg_008_008 : DINT; //Адрес 008-009. Счётчик пингов для внешних систем
rHoldReg_010_010 : REAL; //Адрес 010-011. СЗ. Давление В1. На участок запаса воды
rHoldReg_012_012 : REAL; //Адрес 012-013. Загрузка ЦП контроллера
rHoldReg_014_014 : REAL; //Адрес 014-015. СЗ. Давление после перекачного насоса
rHoldReg_016_016 : REAL; //Адрес 016-017. СЗ. Давление в емкости (Уровень)
rHoldReg_018_018 : REAL; //Адрес 018-019. Защита от сухого хода ВКЛ
..............
.............
..........
END_STRUCT
END_TYPE
Тогда переименовывать ничего не придётся, но выглядит-то плохо
Может, как-то через UNION? Через структуры? Через указатели? Через атрибуты?
Хочется где-то в стороне создать такую же структуру, объединить адреса у этой и у модбасовской структуры, но не через UNION, т.к., когда они в одном UNION-е - та же самая проблема с переименовкой
Спасибо за идеи
Евгений Кислов
28.04.2025, 15:13
Стоит мне переименовать/добавить/удалить любой параметр, как Codesys сразу говорит, что мол структура изменилась - и теперь будет обнулена
Судя по всему - вы объявили структуру в списке PERSISTENT-переменных.
В первом посте вы писали:
Есть ПЛК100 с программой на Codesys 2.3. Нужно заменить его на ПЛК210 на Codesys 3.5.
...
Как все эти Retain-ы закинуть прямо на Modbus, чтобы работало также
В ПЛК100 PERSISTENT-переменных не было в принципе.
Вероятно, в процессе обсуждения вашей задачи возникнут ещё дополнительные уточнения, которые ранее не были вами упомянуты.
Поэтому, чтобы предметно её обсудить - напишите, пожалуйста, ваш вопрос на support@owen.ru
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot