Добрый день.
Возникла проблема при загрузке проекта в панель. Выдает сообщение "Не достаточно памяти для загрузки проекта".
Поясните пожалуйста, о чем идет речь? При симуляции такой проблемы не было.
Вид для печати
Добрый день.
Возникла проблема при загрузке проекта в панель. Выдает сообщение "Не достаточно памяти для загрузки проекта".
Поясните пожалуйста, о чем идет речь? При симуляции такой проблемы не было.
Со всей ответственностью заявляю
1. В конфигурации ПЛК адреса регистров панели для ВСЕХ real output/input модулей должна быть ЧЕТНОЙ, как для регистров PSW так и для регистров PFW! У Вас в конфигурации ПЛК все адреса НЕЧЕТНЫЕ!
2. Byte Sequence должен иметь значение "Native"
По поводу времени.
Запись в Регистры PFW в панели кешируется. Т.е. физическая запись в регистры PFW происходит с задержкой, может через несколько десяток секунд.
Может это и влияет
Однако в вашем проекте ПЛК есть другая засада!
Овен ПЛК через конфигурацию не умеет делать групповые запросы к слейвам.
А у Вас в Мастере, в UMD сотни регистров!
Т.к. групповых запросов нет, то все регисты читаются и пишутся по очереди, по списку, ПО ОДНОМУ,
Интервал между запросами к регистрам панели - polling time Вы задали в одном случае 0,4 сек, а во втором 0,3 сек
Вложение 49273 Вложение 49274
При этом Work mode установлен как Both ! Т.е. ВСЕ output модули будут записываться в панель циклически по времени, а не по изменению их значений!
Запись/чтение чередуются
Теперь смотрите как будет работать обмен с панелью 80
1. зп. ПЛК --> Панель PSW301, 302
пауза 300мс
2. чт. Панель --> ПЛК PFW399, 400
пауза 300мс
3. зп. ПЛК --> Панель PSW303, 304
пауза 300мс
4. чт. Панель --> ПЛК PFW403, 404
пауза 300мс
5. зп. ПЛК --> Панель PSW305, 306
пауза 300мс
6. чт. Панель --> ПЛК PFW405, 406
пауза 300мс
.......
и т.д. пока список ВСЕХ модуле не закончится, затем сначала
Теперь сложите ВСЕ 300мс и скажите, через сколько минут ПЛК прочитает последние регистры PFW469, 470 ?
А кроме панели 80 есть еще и 88 и модули!
Дополнение
Если в конфигурации несколько UDM, то мастер обрабатывает по одной переменной из каждого UMD по очереди. Т.е сначала одну переменную из одного UMD, затем одну переменную из второго UMD, опять одну переменную из одного UMD, затем одну переменную из второго UMD и т.д. Если количество переменных в UMD разное, то переменные одного UMD фактически будут опрашиваться чаще. Даже при одинаковом времени Polling time для обоих UMD.
Добрый день.
В эмуляторе обращение к discrete inputs слэйва CODEYS возможно только через 3x (в функциональной области выбираете операцию Копировать регистр, например 3x0-->PSW256).
Биты 0-15 регистра PSW256 будут отображать значения discrete inputs слэйва 0-15.
Для записи coils надо использовать обращение типа 0x0.
На реальной панели - обращение к discrete inputs через 1x и обращение к coils слэйва CODESYS через 4x - работает корректно.
Вопрос решил.
В историческом графике параметры среза были большие.
Если для модулей - чтение идет правильное, то менять Трейс Моде не надо.
Для панелей - лучшее решение в плане повышения быстродействия - сделать ПЛК слейвом,
Я понимаю, что много переделывать нужно, тогда это совет на будущие проекты
А сейчас
Минимум - разнести для панелей все модули input и ouput по разным UMD. В UMD c ouput сделать режим работы By Value Change.
Максимум
Для реализации групповых запросов, хотя бы для чтения регистров из панели, использовать в конфигурации модули String, тогда можно по 40 регистров за один раз читать из панели. Здесь тоже правка проекта в ПЛК нужна, но проще.
Спасибо Petera! Буду исправляться потихоньку. И тут сразу вопрос раскидал по разным UMD input и output, вообще теперь контроллер не видит панель(81 ошибка). Наверное из-за того что у меня на столе только панель и плк, без модулей или где то время сделать поменьше/побольше?
Я бы для начала, чтобы понять принципы обмена, сделал тестовый проект ПЛК-Панель, по 3..4 регистра для чтения и записи и поигрался бы с ним, разные там Byte Sequence, адреса - четные/нечетные.
Для примера использования модулей String для организации групповых запросов к панели
Принцип простой
Вложение 49283
1. В UMD создаем String Output/Input
2. Смотрим какой адрес типа "AT % ......" конфигуратор присвоил модулю
3. В разделе объявления PLC_PRG создаем Массивы типа
<Наше Имя> AT <смотрим п.2>:ARRAY [<число элементов>] OF <нужный тип> (WORD, BYTE, REAL)
4. При этом число байт(символов) в свойствах String Output/Input д.б. для
- WORD ровно в 2 раза больше чем число элементов в массиве п.3.
- REAL ровно в 4 раза больше чем число элементов в массиве п.3.
- BYTE равно числу элементов в массиве п.3.
но для любого типа число байт(символов) в свойствах String д.б НЕ БОЛЕЕ 80. Почему максимум 80 - отдельная тема. Меньше можно.
Вложение 49284
Осталось в программе извлечь элементы массивов по привычным названиям переменных.
Результат в работе
Вложение 49285
Внимание! Значение Byte Sequence для данного способа не имеет значения, т.к. при групповом чтении массива регистров из панели они приходят в правильном порядке.
ЗЫ.
Команды чтения для String input нужно заменить на 0х03
Вложение 49287