Значит, просто не умеете чертить схемы.
Совершенно не читабельно. Разбросанные блоки, соединенные тегами.
Вид для печати
Коли так, то как Вам электросхемы, выполненные разнесенным методом в чем то типа элплана? Только работать с ними Вам приходится не за столом, при большой поверхности, возможности разложить и хорошем освещении, в в "полях" и "на коленке". Перекрестные ссылки помогают, но как же достают "прыжки", когда надо отследить цепь!
Вы наверное не работали с действительно большими проектами. Если схема большая, как вы её задокументируете? Стандартный чертёж - это формат А4 или А3. Как Вы там расположите схему с несколькими сотнями датчиков и несколькими сотнями исполнительных устройств? Или как у нас например - проект АСУ турбины, состоящий из нескольких десятков тысяч чартов (аналог листа схемы, содержащий законченную логическую схему). Они соединяются между собой как раз ссылками. Я не зря говорил про осмысленные названия соеденений. Это конечно отдельное умение - давать осмысленные названия соединениям, и непосредственно участкам схемы, и этому надо учится. Тогда не надо будет прыгать по ссылкам. Например рассмотрим один кусочек схемы:
Вложение 32184
Включение автомата ДГ произойдёт если:
"Режим автомат" И "Автомат ДГ отключён" И "Нет напряжения на вводе 1" И "Нет неисправности на вводе 1" И "Нет неисправности на вводе ДГ" И "Есть напряжение на вводе ДГ" И "Ввод 1 отключён"
И не потребовалось прыгать по схеме, всё понятно из названий. Любую сложную схему можно разбить на отдельные законченные кусочки., которым всегда можно дать осмысленное название. В этом и заключается мастерство промышленного программиста, схемотехника, да и простого програмиста то же. Везде идеология одинакова -"Разделяй и властвуй";)
Ну я так и поступил.
Вложение 32186
Но это не всегда возможно и не совсем оптимально. Всё таки переменные занимают память. Например в той схеме которая у Вас в цитате, я воевал за каждый байт. Именованное соединение не занимает памяти, это просто другое отображение соеденительной линии - то есть бесплатное улучшение читаемости.
https://habrahabr.ru/company/infopulse/blog/331934/ к чему я эту ссылку дал, можно много говорить, что чьё то ПО не отвечает лично Вашим требованиям, но в них есть свои преимущества незаметные тем, кто ни когда на них не программировал.
Вы дезасемблировали все среды разработки, что уверенно говорите что в ОЛ используются временные переменные, а в других ПО этого нет, ведь если их не видно не значит что их нетЦитата:
Всё таки переменные занимают память
Золотые слова, и разбиваем дальше, по кусочкам подсистем, например обработка сигнала от одного датчика (масштабирование, верхние и нижние пороги предупреждений и аварий от него) на одном листе. На выходе ссылки - например:" Текуший уровень гликоля", "Аварийно низкий уровень гликоля" и т.д.
Очень неудобно, особенно где ни будь в контейнере, в шкафу водить карадашом по паутинке линий чтобы найти нужную связь
Ну это уже как получится
А вот так не пробовали делать?Вложение 32187
Ну вообще то в представленном примере используются именно переменные (созданные в таблице переменных). А именованные связи в ZelioSoft точно не жрут памяти. Я это проверял, когда пытался впихнуть в контроллер слишком большой проект (честно говоря я это проверил в первую очередь, когда кончилась память). Да и LogoSoftComfort от сименса (ещё одна среда где они используются) так же была проверенна на это дело. И то же в использовании памяти контроллера для именованных соединений замечено не было. Ну и естественно в FLProg где они применяются это точно просто другой способ отображения соединения.Тут я могу сказать точно.:cool:
Я думаю, что "переменные" в проекте ОЛ никак не являются "переменными, используемыми в контроллере". Любой "промежуточный результат" - это "переменная", не важно как она называется в проекте - "именованное соединение" или "переменная". Так что, насчёт оптимизации памяти МК, и то, и другое - абсолютно равнозначно. Если, конечно, не использовать энергонезависимые или сетевые переменные, которые, действительно, занимают физическую память в конкретной физической области.
Вообще-то, это "таблица переменных" существует только в проекте на компьютере. Очень удивлюсь, если она как-то (статически) живёт в конечном коде программы контроллера. Не должна эта таблица жрать память (контроллера) сама по себе. А экономить память в проекте... :)
Т.е., смотрите. При наличии в проекте "именованных цепей" в проекте наверняка есть "таблица цепей", в дополнении к "таблице пользовательских переменных". Разница - только в названии, т.к. в конечном коде не будет ни "цепей", ни "пользовательских переменных"
Если ОЛ так сделано, то это бредовый подход. В этом просто нет необходимости, гробить память на глобальные переменные для промежуточных значений. Те переменные которые создаются в таблице тэгов - это глобальные переменные (они не возвращаются в кучу после отработки цикла), и под них сразу отводится память. Как реализовано обсчитывание логики в ОЛ я не знаю, но уверен что они не настолько тупы что бы использовать глобальные переменные для всех входов и выходов блоков.
ну примерно так - собираю проект, проверяю его - не хватает 20 байт, перевожу часть соединений в линии - проверяю -не хватает 20 байт, оптимизирую проект (меняю логику, убираю блоки, меняю алгоритмы) , проект влазит (около 0 запаса памяти). ОК. Перевожу все соединения в текст, проект влазит, свободного места столько - же. Как то так..... Результат - именованные соединения не жрут памяти.
Я вообще не понимаю ,зачем заказчику или пользователю читать схему .Если бы он была сделана на микросхемах ,то да нужно найти неисправную и заменить .В проекте же так не бывает .Или работает как надо или не работает .Если речь о разработчике (что бы не забыл, что для чего)-то делайте как вам привычней и читабильней ,только не говорите что это самое совершенство представления схемы принципиальной электрической...
А у каждой и не нужно. "Двухвходовки" собираются в макросы, ответственные за "основную логику". А подписать осмысленные сигналы, чтобы легче ЧИТАЛАСЬ логика программы ничего не стоит, но при обслуживании и отладке это сильно помогает. Это как подписи входов/выходов макросов или компонентов эс. Увидел на триггере R и S входы - и уже пофиг как там внутри он организован. Так и с подписями сигналов.
да макросы это хорошо. Я как раз про это и говорю, разбиение на маленькие кусочки. Я так же использую макросы в Zelio (в моей программе это пользовательские блоки), но не все таки текстовый вид соеденений нравится больше чем линии. Тут конечно каждому свое, но было бы неплохо что бы можно было выбирать что использовать, кому нравятся линии - могут использовать их, кому нравится текст - использует текст. Это и есть забота о ВСЕХ пользователях. Самое главное что сделать это не очень сложно, говорю как человек сделавший это в своей программе.
Вы это заказчику объясните ))). Предложишь другой контроллер (раза в два дороже - следующий по цене и возможностям контроллер -S7-1200) - потеряешь тендер. Так и приходится крутиться)))))Цитата:
Переходите на другую платформу.
Кто Вам такое сказал?
Я ж и пишу о том, что выделять память под "пользовательские переменные" просто "чохом" было бы, мягко говоря, не оптимально. Эти "переменные" внутри в "глобальном" виде нужны ровно так же, как "глобальная переменная" на каждую связь из Вашей схемы.
"Пользовательские переменные" - это ТОЧНО ТАКАЯ ЖЕ таблица, как "таблица цепей". "Оптимизация" таблицы пользовательских переменных в общем случае никак не относится к оптимизации кода для контроллера. Эти переменные всёравно никак и нигде, кроме как в самой программе недоступны.
Вы когда ни будь работали в эксплуатации? Это происходит где то так: Механы просят вывести новый параметр. Киповцы ставят датчик, и подключают его. Ну а асушники допиливают программу (с предложением вызвать для этого сименсов к руководству лучше не соваться - дорого, долго, да и вообще - "а зачем Вы то здесь, асушники"). То же касается и изменения алгоритмов (под изменившиеся внешние условия например, или устаревания оборудования, замена модулей новым поколением и т.д.). И это не шарашкина контора, а Роснефть.
разочарование года какое то, тот же Ситников извинятся десять раз заставит за несоблюдение правил, стандартов, с которыми профессионально работает только он. А тут, то эксплутационники сперва я так понимаю нанимают не сертифицированных исполнителей, затем в обход технологии правят на свое усмотрение программы, то оказывается роснефть перешла на бюджетный вариант, не желает вызывать специалистов, там видимо точно карманы набивают, вместо инвестиций в производство
Цитата:
Вообще-то, это "таблица переменных" существует только в проекте на компьютере. Очень удивлюсь, если она как-то (статически) живёт в конечном коде программы контроллера. Не должна эта таблица жрать память (контроллера) сама по себе. А экономить память в проекте...
Т.е., смотрите. При наличии в проекте "именованных цепей" в проекте наверняка есть "таблица цепей", в дополнении к "таблице пользовательских переменных". Разница - только в названии, т.к. в конечном коде не будет ни "цепей", ни "пользовательских переменных"
Цитата:
Я думаю, что "переменные" в проекте ОЛ никак не являются "переменными, используемыми в контроллере". Любой "промежуточный результат" - это "переменная", не важно как она называется в проекте - "именованное соединение" или "переменная". Так что, насчёт оптимизации памяти МК, и то, и другое - абсолютно равнозначно. Если, конечно, не использовать энергонезависимые или сетевые переменные, которые, действительно, занимают физическую память в конкретной физической области.
Цитата:
Кто Вам такое сказал?
Я ж и пишу о том, что выделять память под "пользовательские переменные" просто "чохом" было бы, мягко говоря, не оптимально. Эти "переменные" внутри в "глобальном" виде нужны ровно так же, как "глобальная переменная" на каждую связь из Вашей схемы.
"Пользовательские переменные" - это ТОЧНО ТАКАЯ ЖЕ таблица, как "таблица цепей". "Оптимизация" таблицы пользовательских переменных в общем случае никак не относится к оптимизации кода для контроллера. Эти переменные всёравно никак и нигде, кроме как в самой программе недоступны.
Цитата:
Так есть такая возможность. Через "переменные". Просто, таблица "именованных цепей" совмещена с таблицей "пользовательских переменных". Названия разные, а суть одна.
Так, похоже необходимо провести ликбез:confused:
Существует два вида переменных, глобальные и временные. Для глобальных (которыми и являются пользовательские переменные) место в ОЗУ отводится при компиляции программы, и оно заранее занято (под них в ОЛ отводится 32 килобайта, можете посмотреть в статусной строке программы). Для временных переменных существует так называемая "куча" - какой то объём памяти в ОЗУ. Во время выполнения программы при необходимости из этой кучи берется место под временную переменную. Одна и та же временная переменная (собственно говоря адрес в ОЗУ, и размер выделенной памяти) может использоваться в программе насколько раз, в совершенно разных операциях. Это необходимо для оптимизации использования памяти. После выполнения необходимых операций эта память возвращается в "кучу". То есть значения в этих переменных не сохраняются между циклами выполнения программы (официально цикл программы называется сканом программы). Соединения могут использовать как раз временные переменные, а глобальные используются для хранения значений между циклами программы и не могут быть переиспользованы.
Ну вообще то у нас все асушники сертифицировны (у меня 6 сертификатов от сименса), ну и доработки оборудования (разработанные нами) согласовываем с Сименсом естественно. Бывают и замечания. Исправляем. Тут деньги большие завязаны, и той же Роснефти выгоднее иметь сертифицированных асушников у себя в штате и регулярно обучать их, чем вызывать разработчиков.
Вот я Вас и спрашиваю. Кто Вам такое сказал?
Зачем "пользовательские переменные" делать "глобальными", если "время жизни" их не превышает цикла программы? (не считая "линий задержки", сетевых и энергонезависимых переменных) Так же, как значение сигнала любой "именованной цепи".
Всё остальное вытекает из этого Вашего утверждения.
Покажите пример "пользовательской переменной" в ОЛ, которая хранит значения между циклами. Может быть, Вы правы. Но, на сколько я вижу, они даже инициализируются (получают значение) только в цикле, и между циклами вообще не существуют.Цитата:
Соединения могут использовать как раз временные переменные, а глобальные используются для хранения значений между циклами программы и не могут быть переиспользованы.
Отладки "в железе" нет, из цикла в цикл ничего не хранится... Нафига их делать "глобальными"?
Сначала начальники пилили бюджет ,заказав разработку у сименса ,потом асушники премии получают ,меняя ,доделывая ...Надо отечественных искать разработчиков ,что бы потом в течении времени вносили изменения при необходимости ...или самим делать ,если такие грамотные и сертифицированные ...
Вот посмотрите пример
Вложение 32189
Что тут происходит? В каждом цикле программе к переменной А прибавляется 1. А теперь скажите откуда контроллер в начале нового цикла будет знать какое значение было в конце предыдущего цикла? Это глобальная переменная, состояние которой сохраняется между циклами.
А теперь посмотрим другой пример:
Вложение 32190
Здесь в каждом цикле к переменной А прибавляется 1 а затем это значение умножается на 10 и кладётся обратно в переменную А.
Цепь помеченная стрелочкой (промежуточное значение) может использовать временную переменную. Значение в этой цепи нам не нужно в следующем цикле, в нём оно снова пересчитается. Причём эта временная переменная после записи значения в переменную А больше не нужна и может быть использована для хранения временных значений в другом вычислении как например в рисунке ниже
Вложение 32191
А нету их. Нас собирали (10 человек) шесть лет. Но надо стремиться. Я например стараюсь привлечь молодёжь к специальности АСУ с помощью своей программы (FLProg), и даже вроде что то получается, Овен считает эту затею коммерчески невыгодной (почитайте здесь ветку про ПР-КИТ), занятия в кружках для детей очень дорогие (что удивляться, все они на конструкторах ЛОГО - а цены на них заоблачные), ну а уровень обучения в наших институтах честно говоря упал ниже плинтуса. В почёте только экономические специальности, технические так, для галочки.
Да я например так думаю. И быстрее и дешевле.. У меня в среднем сейчас проходит 2-5 проектов в месяц.(занимаюсь фрилансем на свободную вахту) Часть на сименсе, часть на шнейдере, вот и овены попадаться начали. Заказчики разные. От РЖД до частников.(естественно работаю через официальные фирмы друзей). Да и остальные ребята у нас подрабатывают. Всё равно же месяц через месяц дома сидим)). У нас получается действительно дешевле и быстрее чем через официальных разработчиков сименса.