PDA

Просмотр полной версии : Не достаточно общей памяти данных



Спорягин Кирилл
10.11.2022, 18:49
При очередной правки проекта компилятор выдал сообщение "Не достаточно общей памяти данных" (см. снимок).
63769

Знаю, что это можно вылечить дав команду "Очистить все", но тогда горячее обновление кода в ПЛК будет невозможным.

А ПЛК на работающем объекте, и поэтому хотелось бы не перезагружать его со сбросом всей программы и загрузкой новой.

Можно ли как-то по-другому решить данный вопрос, т.е. так, чтобы горячее обновление кода было доступно?

Спасибо!

Cs-Cs
10.11.2022, 21:09
Возможно, ИМХО, как раз запас памяти для онлайн-замены и переполнился. Там же ПЛК несколько раз позволяет делать онлайн-замену, а потом говорит что всё - только полную загрузку.

Спорягин Кирилл
11.11.2022, 10:27
Да, речь о всяких накопленных данных, коэффициентах, настройках.

Ну, не буду же я переделывать и дописывать кучу всего, чтобы загрузить изменения на 5 копеек.

Ладно, придется записать на бумажке настройки и ввести их заново.

FPavel
12.11.2022, 16:40
У меня как-то идея была - сделать программку на C/C++ размером строк на 10-20, чтобы при помощи библиотеки libmodbus считать на компьютер всю последовательность регистров ModBus из ПЛК (настройки, вводимые с панели оператора). А потом - обратно загружать в ПЛК при помощи другой программы.
И, полученный образ данных, мог бы ещё пригодиться для создания письменного отчёта о настройках.

Но, с ПЛК Овен работал только один раз, когда посетила такая мысль - аппаратура была уже недоступна для проверки.

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

Если есть возможность - оборудование и время - попробуйте проверить такое решение. Думаю, что оно имеет право на жизнь.

1exan
12.11.2022, 18:46
У меня как-то идея была - сделать программку на C/C++ размером строк на 10-20, чтобы при помощи библиотеки libmodbus считать на компьютер всю последовательность регистров ModBus из ПЛК (настройки, вводимые с панели оператора). А потом - обратно загружать в ПЛК при помощи другой программы.
И, полученный образ данных, мог бы ещё пригодиться для создания письменного отчёта о настройках.

Но, с ПЛК Овен работал только один раз, когда посетила такая мысль - аппаратура была уже недоступна для проверки.

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

Если есть возможность - оборудование и время - попробуйте проверить такое решение. Думаю, что оно имеет право на жизнь.

У панелей оператора сейчас довольно широкий функционал, и если используете её как мастер, то можете перекинуть содержимое нужных регистров ПЛК-слейва на флешку, подключенную к панели (ну и обратно разумеется тоже можно).

FPavel
13.11.2022, 08:37
1.
2.
ПЛК(слейв)+Панель(мастер)
Отрываем/тушим панель и той "программка_на_компьютере" читаем карту. И конечно уверены что в этот момент все нужное в карте есть.
Когда-то опять отрываем/тушим панель и "другой программой" заносим карту. И конечно уверены что ПЛК все примет.
Т.е. либо "светофор" с парой регистров или не "10-20 строк".

3.
Еще один интерфейс для "программка_на_компьютере" и "другой программой"
Т.е заранее что-то прописывать в проекте ПЛК

?
Да, собственно такой вариант и рассматривал ПЛК[slave]+ОП[master]. Компьютер с программой кратковременно заменяет ОП на время копирования данных.
Собственно, если компьютер выполняет те же действия, что и ОП, то ПЛК и не заметит разницы.
Обе программы предполагаю консольными, без графического интерфейса (так проще - при отладке и при эксплуатации), поэтому размер исходника будет небольшим.

#include <stdio.h>
#include <modbus.h>

int main(void) {
modbus_t *mb;
uint16_t tab_reg[32];

mb = modbus_new_tcp("127.0.0.1", 1502);
modbus_connect(mb);

/* Read 5 registers from the address 0 */
modbus_read_registers(mb, 0, 5, tab_reg);

modbus_close(mb);
modbus_free(mb);
}
Потом, при желании, можно добавить графический интерфейс.

В любом случае, это попытка решения задачи сохранения и восстановления данных, с попутным составлением письменного протокола настроек прибора.
Причём, это решение можно отдать заказчику для самостоятельной работы (с оговорками, но можно).
И другие, мне не видятся (кроме тетради).

1exan
13.11.2022, 10:35
Да, собственно такой вариант и рассматривал ПЛК[slave]+ОП[master]. Компьютер с программой кратковременно заменяет ОП на время копирования данных.
Собственно, если компьютер выполняет те же действия, что и ОП, то ПЛК и не заметит разницы.
Обе программы предполагаю консольными, без графического интерфейса (так проще - при отладке и при эксплуатации), поэтому размер исходника будет небольшим.

#include <stdio.h>
#include <modbus.h>

int main(void) {
modbus_t *mb;
uint16_t tab_reg[32];

mb = modbus_new_tcp("127.0.0.1", 1502);
modbus_connect(mb);

/* Read 5 registers from the address 0 */
modbus_read_registers(mb, 0, 5, tab_reg);

modbus_close(mb);
modbus_free(mb);
}
Потом, при желании, можно добавить графический интерфейс.

В любом случае, это попытка решения задачи сохранения и восстановления данных, с попутным составлением письменного протокола настроек прибора.
Причём, это решение можно отдать заказчику для самостоятельной работы (с оговорками, но можно).
И другие, мне не видятся (кроме тетради).

Вообще то ничего заменять не нужно - если в ПЛК в ModbusSlave сделаете два порта (один для панели, другой - для ПК), то они будут работать параллельно.

FPavel
13.11.2022, 14:46
Тогда - только тетрадь на 96 листов.

Мне нечего добавить, кроме идеи чтения дампа памяти сетевых переменных. Когда будет возможность - лично для себя попробую. Убеждать в идеальности и универсальности - не буду, т.к. не продаю и выгоды не получу.
Спасибо, за напоминание, про возможность добавления Ethernet порта к ModBus Slave устройству в конфигураторе CoDeSys - этим летом специально для параллельной работы панели на щите и потенциального компьютера (или другой удалённой панели) добавлял порт 503.

А где бы почитать обоснования для выбора того или иного способа реализации ввода настроек с панели в ПЛК?

Речь про редкие для меня лично варианты:
- ПЛК (master) - ОП (slave)
- доступ только к части параметров, в зависимости от значения в одном из регистров

Встречал, конечно, у других людей подобное, пару раз и сам такое творил, но оно было вызвано в разных случаях:
1. странности оборудования, не позволяющие сделать - ПЛК (slave) - ОП (master) - в моём случае ПЛК МЗТА MC8 и ОП Delta TP04G - детали уже не помню, но это именно проблемы совместимости оборудования
2. нехватка сетевых переменных для обмена через конфигуратор - недавно на форуме видел решение для ПР200 - организовывалось "окно" для передачи части параметров.

Но именно, вариант "защиты данных" - не встречал.
Если можно, поделитесь ссылкой на разбор обоснований решений по связи.