Цитата(Vasiliy @ 4.9.2008, 9:52) [snapback]288511[/snapback]
Вопрос то в том, что неужели NC удобнее FBD? Я ту программку неделю делал, т.к. пока вник в NC, пока с вводом-выводом разобрался. На FBD у меня это заняло бы максимум полчаса.
Из личного опыта, для чего нужен был Neuron C.
На одном из объектов была куча контроллеров (штук 150), в которых нужно было организовать ряд функций, которые во многом повторялись (управление 2 или 4-трубным фэнкойлом, навороченное освещение, включение-выключение чего-либо по времени, обработка тревог, мониторинг каких-либо входов и многое другое), т.е. в каждом из контроллеров было несколько каких-либо функций из этого набора, причем во многом настройки каждой функции должны были быть индивидуальными. От самого тупого - в одном случае контакт NC, в другом NO, Т.е. на объект реально получалось минимум штук 40 конфигураций.
Поэтому решено было склепать единую программу, состоящую из штук 15 functional blocks, а на объекте инсталяторы конфигурировали каждый контроллер индивидуально при помощи кучи configuration properties и binding'ов.
Ну и некоторые технические аспекты.
1. Как известно, большинство графических языков типа FBD, LD итд - работают на логике состояний (state driven), а события не поддерживаются. Это важно в первую очередь при работе с сетью. Например, есть у нас переменная SNVT_scene, вызвали мы вторую сцену командой scene_recall 2. А потом повторно хотим вызвать эту вторую сцену, но программа на FBD это не отработает, поскольку
значение переменной не изменилось. В Neuron C же есть событие when NV updates.
Конечно у некоторых контроллеров есть возможность настроить функцию receive heartbeat, в результате которой значение входной переменной через определенное время после апдейта автоматически становится "инвалидным", а в программе на FBD соответственно сделать проверку на "инвалидность". Но если эта входная переменная должна мониториться Скадой, то этот трюк уже не прокатит.
Гораздо хуже, когда нужно делать обновления выходной переменной, не автоматически с интервалом send heartbeat, а по какому-то событию в программе. В neuron C для этого есть функция propagate NV.
2. Вообще некоторые программы с использованием событий на текстовых языках писать проще. Например, стандартная функция диммера: короткое нажатие на клавишу - включение на 0% или 100% по заднему фронту, длительное - плавное регулирование. А также такие вещи как циклы, обработка массивов итд.
3. Не видел ни одного лоновского свободно-программируемого контроллера с нормальной поддержкой UCPT. А также с возможностью создавать собственные functional block.
4. Именно на NC можно добиться самого оптимального кода. Как-то пришлось сражаться за каждый байт оперативной памяти контроллера MB-2, для этого некоторые битовые значения пришлось объявлять как одну байтовую переменную и индивидуально оперировать каждым битом. Потом в коде на FBD каждый блок обязательно выполняется за цикл процессора один раз (если нет чего-то типа task'ов как в Codesys), что может сказаться на проивзводительности, а также вызывать всякие lost messages.
5. Меня очень бесит, что в большинстве случаев у свободно-программируемых контроллеров при изменении состава NV и/или CP приходится в проекте сети удалять устройство и создавать заново, вместе со всеми биндингами. Хорошо сделано у Wago, что можно менять NV/CP в плагине, но если например выбранный шаблон 26_26 на определенном этапе работы надо заменить на другой, тады ой.
6. Если нужно использовать для обмена данными не только SNVT, но и messages, то боюсь здесь только Neuron C.
Да, понимаю, что некоторое из вышеописанного - вещи довольно экзотические. И такие "классические" системы как вентустановки, тепловые пункты на мой взгляд незачем реализовывать на Neuron C. Но в случае какой-то продвинутой автоматизации помещений (фэнкойлы-освещение-жалюзи, с применением датчиков движения, освещенности, с функциями сцен итд) - NC может оказаться существенно лучше.
P.S. А никто не пробовал ковырять Wago'вский 750-819 на NC с использованием соответствующих библиотек с сайта wagotoplon.com ?