Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Не пинайте тапком, если решил задачу не оптимальным способом, но у меня все заработало.
Итак, для возможности одновременного задания уставки с ПР200, СП3ХХ и OwenCloud (или/и например со SCADA) нужно в панели оператора СП3ХХ:
1. Создать скрипт и вызывать его функциональной областью по событию "После включения панели" (режим - последовательный) :
2. Создать скрипт и вызывать его функциональной областью в цикле каждые, например, 2 секунды, режим вызова скрипта - последовательный:Код:WORD Value1=0; WORD Value2=0; Value1=PSW[531]; PSW[531]!=0 ? Write(PLC, 1, MODBUS_RTU_REG_4X, 531, 0, TYPE_WORD, Value1): Read(PLC, 1, MODBUS_RTU_REG_4X, 531, 0, TYPE_WORD, &PSW[531]); Value2=PSW[514]; PSW[514]!=0 ? Write(PLC, 1, MODBUS_RTU_REG_4X, 514, 0, TYPE_WORD, Value2): Read(PLC, 1, MODBUS_RTU_REG_4X, 514, 0, TYPE_WORD, &PSW[514]);
// Комментарии:Код:WORD Value1=0; WORD Value2=0; Value1=PSW[531]; Value2=PSW[514]; Read(PLC, 1, MODBUS_RTU_REG_4X, 531, 0, TYPE_WORD, &PSW[600]); if (PSW[600]!=PSW[601]) {PSW[531]=PSW[600];} PSW[531]!=PSW[600] ? Write(PLC, 1, MODBUS_RTU_REG_4X, 531, 0, TYPE_WORD, Value1) : Read(PLC, 1, MODBUS_RTU_REG_4X, 531, 0, TYPE_WORD, &PSW[601]); Read(PLC, 1, MODBUS_RTU_REG_4X, 514, 0, TYPE_WORD, &PSW[602]); if (PSW[602]!=PSW[603]) {PSW[514]=PSW[602];} PSW[514]!=PSW[602] ? Write(PLC, 1, MODBUS_RTU_REG_4X, 514, 0, TYPE_WORD, Value2) : Read(PLC, 1, MODBUS_RTU_REG_4X, 514, 0, TYPE_WORD, &PSW[603]);
// Регистры PSW[601], PSW[603] - буферные значения изменяемых уставок, при предыдущем опросе
// Регистры PSW[600], PSW[602] - буферные значения изменяемых уставок, при текущем опросе
3. В этой же функциональной области добавить функцию "Копирование группы регистров" (в моем случае 60 шт. с ) как на картинке:
изображение_2022-02-12_133914.png
Соответственно скрипт написан для возможности изменения регистров 514 и 531 в ПР200, на котором реализована вся логика работы основной программы.
Последний раз редактировалось BrEST; 13.02.2022 в 17:35.
У меня вопрос: Почему когда добавляешь в проект историческую таблицу, при эмуляции очень долго загружается окно эмуляции? Примерно секунд 30.
Всем привет.
Подключил к СП-307 блок входов-выходов МК110-224 (8 входов, 4 выхода)
Для чтения состояния входов использую макрос:
Read (PLC, 24, MODBUS_RTU_REG_3X, 51, 0, TYPE_WORD, &Value);
А как записать выходы? Пробую так:
Write (PLC, 24, MODBUS_RTU_REG_16, 50, 0, TYPE_WORD, &Value);
Но так не проходит. Ругается на параметр "MODBUS_RTU_REG_16".
В руководстве на блок входов-выходов МК110-224 написано, что "Регистры записываются командой 16 (0x10), считываются – командами 3 (0x03) или 4 (0x04)".
Может кто подскажет, как правильно сформировать команду записи?
Спасибо.
Во первых, что Вы изобретаете не существующие ключевые слова.
Во встроенной справке перечислены ВСЕ ДОПУСТИМЫЕ названия регистров
Захват-02.png
Воспользуйтесь встроенной автоподстановкой
- не делайте копи/пасте, а вводите ручками, посимвольно Write( , после скобки появится стандартное окно выбора регистра. выбрать нужно тип -Регистр, в опциях регистра - 4х50
Скрытый текст:
Во вторых, за выбор команды записи отвечает системный регистр PFW36.2 (для PLC порта)
Захват-01.png
Т.е. функц.областью, глобальной, с действием - После загрузки проекта, с функцией - Установить бит PFW36.2.
Вступает в действие после перезагрузки панели по питанию
Последний раз редактировалось petera; 23.02.2022 в 09:22.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Спасибо, в первой частью разобрался.
А по - поводу второй части - нужно в начале макроса установить бит 2 в PFW?
Это делается так:
Write(HMI_LOCAL_MCH, 0, TYPE_PFW, 36, 2, TYPE_BIT, 1);
И потом перезагрузить панель? (передернуть питание)
Последний раз редактировалось ВладОвен; 23.02.2022 в 09:50.
Зачем в макросе?
Вторая часть подразумевает обычную функциональную область на любом экране
Действия по установке бит 2 в PFW36 нужно делать всего ОДИН РАЗ ЗА ВСЕ ВРЕМЯ РАБОТЫ ПАНЕЛИ ПОСЛЕ ЗАГРУЗКИ ПРОЕКТА.
Если делать в начале макроса, то при каждом вызове макроса будет выполнятся запись во флеш память (PFW), ресурс перезаписи которой ограничен.
Короче, зачем этот геморрой?
Делаем
Захват-02.png Захват-03.pngТ.е. функц.областью, глобальной, с действием - После загрузки проекта, с функцией - Установить бит PFW36.2.
Вступает в действие после перезагрузки панели по питанию
Захват-04.png
Последний раз редактировалось petera; 23.02.2022 в 09:58.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Спасибо. Теперь стало понятно. Сделал так, как вы советовали.
Но при записи в порт PLC такой командой:
Write(PLC, 24, MODBUS_RTU_REG_4X, 50, 0, TYPE_WORD, &Value2);,
не проходит компиляция макросов. Ругается:
"Глобальный макрос: line -5: implicit cast of pointer to 'int'" (неявное приведение указателя на 'int')
Но в глобальном макросе у меня ничего нету. Он пуст.
И при чем тут line 5? Эта ошибка пропадает, если закомментировать строку №7
Трабл.png
(это я пытаюсь подружить панель СП307 и блок МК110. Читать входы и писать выходы)
Последний раз редактировалось ВладОвен; 23.02.2022 в 10:18.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Не закрывая проект, смотри в папке конфигуратора \ARMTool
Результаты компиляции будут в папка типа "MacХХ"
Твоя "line 5" находится в файле MacХХ.c
Захват-01.png
ВНИМАНИЕ
Папок типа "MacХХ" может быть несколько, каждая новая папка создается при каждой компиляции макросов. Ищи последнюю по времени изменения
Последний раз редактировалось petera; 23.02.2022 в 10:42.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg