Такое в общем то громадное количество регистров - думаю куда столько?)))
Посмотрел картинки - такое ощущение что дискретный сигнал (бит - суда по названию) передаётся 2byte (1 регистр).
Если так конечно можно.
Может все таки оптимизировать проект?
Такое в общем то громадное количество регистров - думаю куда столько?)))
Посмотрел картинки - такое ощущение что дискретный сигнал (бит - суда по названию) передаётся 2byte (1 регистр).
Если так конечно можно.
Может все таки оптимизировать проект?
Последний раз редактировалось Rask; 06.04.2023 в 16:13.
Привожу пример такой конфигурации в картинках.
На картинка видно, что проект содержит 2 Modbus Slave.
В первом слейве 981 dword (т.е. в регистрах 1962).
Во втором слейве 303 dword (т.е. 606 регистров).
Конфигурация при этом 146 Кб, если ее вычислять по указанному выше способу.
И все работает и грузится.
Читайте тему на форуме о размере конфигурации (то что выше). Там Филоненко говорит о каких-то блоках по 100 Кб.
В общем тут нужно методом проб, но как факт конфигурация может быть большой!
Где-то на форуме я это описывал, но уже сам не смог найти где, поэтому коротко повторю.
Я создаю структуры для нужных мне элементов.
Например.
Struct Valve
Command : word;
State : word;
Mode : word;
Alarm : word;
end_struct
И общую структуру, которая включает в себя эти структуры.
Struct PanelData
Valve1 : Valve;
Valve2 : Valve;
Valve3 : Valve;
и т.д.
end_struct
Затем объявляю (обычно в глобальных данных) данную структуру следующим образом:
PanelData AT %QD7.1.0 : PanelData;
где %QD7.1.0 - адрес первого 4х байтового элемента в нужном мне Модбас слейве.
ВСЕ!
Далее, если в Valve1.Alarm := 1, она появляется в нужном месте в области передачи в слейв.
Желательно в панели тоже использовать средства "наведения", чтобы в панели самому не считать номер получившегося регистра.
Но не на всех панелях это работает, поэтому этот метод не всегда хорош.
Но в любом случае, можно структуры внутренние (в моем примере Valve) огранизовать так, чтобы они были кратны чему-то, тогда можно их элементы легко рассчитывать по номеру "клапана" и элемента в нем. Ну, и тогда даже если в панели нет средств "наведения", то рассчитать номер регистра можно, без особых сложностей.
Замечу также, что я разумеется не указываю имена переменным в конфигурации, а навожу на конфигурацию структуру данных, поэтому в конфигурации ничего, кроме "голых" элементов.
Ужал в 6 раз количество регистров. При этом размер того самого файла после ключевого слова CommConf стал равен 85кбайт. Возможно будет меньше, если у каждого регистра убрать описание. Пока полет нормальный.
Есть несколько вопросов:
1) Создал загрузочный проект в онлайне. Контроллер стал уходить в бесконечный рестарт при сбросе питания со шкафа. Порт Ethernet перестает работать, USB остается рабочим. Подключаешься по USB к ПЛК и он перестает перезагружаться. Что это вообще за странное поведение?
Основную программу, в которой вызываются другие блоки, перенес из Freewheeling в Cyclic с временем t#40ms. Все стало ок. В чем может быть проблема ? Понимаю, что стоит выложить debug.txt, но возможность только во вторник будет...
2) Почему сохраняемые переменные (Retain) реинициализируются при загрузке изменной аппаратной конфигурации. Как сделать, чтобы этого не происходило?
3) Являются ли переменные MB Slave сохраняемыми?
4) Точно ли 160м02 считается плк для средних систем автоматизации ?
- Retain памяти слишком мало (16кб), что в 2 раза меньше, чем у малыша S7-312 и в 5 раз меньше, чем у самой базовой модели S7-1511.
- Нужно задумываться о размере некоего файла, который отвечает за описание аппаратной конфигурации. И не дай бог, чтобы он превысил 100кб. Это же абсурд.
- Отсутствие нормального диагностического буфера.
- Неработающие переключатели режимов на борту ПЛК. Переводишь в СТОП, он продолжает работать. Переводишь в Работа, он остается в СТОП. Режим менять получается только через Codesys.
- Рестарты плк. Программа без косвенной адресации, без обращения к несуществующим областям памяти. Все прописано строго через обращение к символьным именам переменным.
Спасибо.
Последний раз редактировалось sanya0971; 15.04.2023 в 11:11.