Спасибо Филоненко Владиславу, за содержательный диспут по поводу преимущества CODESYS v2. По поводу быстродействия: контроллер Berghof EC1000 (400 мгц) У меня есть две версии на v2 и v3. При отключенной WEB визуализации, показывает большее быстродействие на CODESYS 3. Контроллер Wago PFC200 (600 мгц), последняя прошивка позволяет переключать v2 и v3. При отключенной WEB, также показывает увеличение быстродействия на v3. Естественно сравнивалось на одном проекте, конвертированном в CODESYS 3. Если нет прошивки для ПЛК110 на CODESYS 3, мне интересно откуда взялось утверждение, что на CODESYS v2 он работает быстрее? Про WEB визуализацию, я вообще молчу. В CODESYS 3 гораздо удобней работать с сетями (даже если использовать конфигурационные библиотеки Овен). Кто не использовал пока объектно-ориентированное программирование в CODESYS 3, наверное не сможет понять его преимуществ. Для начала хорошо бы прочесть статью http://www.codesys.ru/art7.
http://www.codesys.ru/art7
Прекрасный по полноте и бессмысленности пример.
Если не заметили, там всё в режиме симуляции.
А в реальности эти лампочки, комнаты и т.п. связываются с реальным оборудованием, как I/O контроллера, так и I/O на модулях расширения и других ПЛК.
И вот тут то и кроется лопата. В красивый абстрактный класс лампочки грязными лапами вступает действительность.
Или мы прикручиваем связь с реальным I/O через указатель ( к примеру), что криво и небезопасно.
Либо в конце прекрасного объектного кода вставляем ну совсем не объектный переход от содержимого всех классов в содержимое I/O.
Или извращаемся с доступом по символьному имени (самый правильный вариант, но тяжёлый...)
Вот если бы объявляя переменную лампочки реально можно было бы выбрать тип "I/O на вот том модуле расширения", но...
Тролль-наседка, добрый, нежный и ласковый
my_perfect_var : DIN_FROM_PLC_110_30;
И компилятор сам в конфигурации выделяет 1 вход.
И если надо можно их перетасовать в конфигурации и программа не поменяется.
А в таргете производитель ПЛК помимо всего остального задаёт тип DIN_FROM_PLC_110_30 для дискретных входов ПЛК.
Тролль-наседка, добрый, нежный и ласковый
Судя по справке CS (смотрю на справку CS 2.3), Variable Configuration служит как раз для внешней привязки переменных к адресам памяти.
Наверняка же и в CS3 так можно?
Т.е. в программе указываем "тут какой-то вход", "тут какой-то выход". А потом отдельно привязка переменных конкретного блока к реальному ПЛК.
Код:FUNCTION_BLOCK locio VAR loci AT %I*: BOOL := TRUE; loco AT %Q*: BOOL; END_VAR .. PROGRAM PLC_PRG VAR Hugo: locio; Otto: locio; END_VAR .. VAR_CONFIG PLC_PRG.Hugo.loci AT %IX1.0 : BOOL; PLC_PRG.Hugo.loco AT %QX0.0 : BOOL; PLC_PRG.Otto.loci AT %IX1.0 : BOOL; PLC_PRG.Otto.loco AT %QX0.3 : BOOL; END_VAR
AT %X... самый жестокий способ самоубийства. Компилятор не проверяет правильность и возможны серьёзные проблемы со стабильностью, выходом за пределы конфигурации и пр. прелестями.
Уже не один десяток таких программ видел.
P.S. Глобальные переменные (как их не называй) зло. Как только их число превышает десяток и программа чуть забывается (тем более если другой программист немного правит её), вылезают такие баги, что тапок его только щекочет.
Последний раз редактировалось Филоненко Владислав; 11.01.2016 в 14:15.
Тролль-наседка, добрый, нежный и ласковый
Не-не-не, Девид Блейн. У нас будет свой компилятор, с нормальными проверками.
Поэтому и спрашиваю: "как должно быть, если делать по фен-шую".
Инициатива, конечно, хорошая, но даже 2-й CoDeSys это 5-6 человеколет, а 3-й уже к 20-ке подбирается. В одиночку такого не осилить.
А для команды да в разумные сроки нужно 2-3 кк$. И как Вы собираетесь это отбивать?
Тролль-наседка, добрый, нежный и ласковый