Средство для программирования контроллера: Си или МЭК 61131? |
Ответить | Страница <1 45678 53> |
Автор | ||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 27 Март 2003 Категория: Russian Federation Online Status: Offline Публикации: 240 |
Опубликовано: 12 Сентябрь 2003 04:03 |
|
Осмелюсь предположить, что Вы просто явились >>>>>>>>>>>>>>>> Можно сказать даже участником. Так как по 65 комитету я из России был единственным представителем, то приходилось голосовать по всем вопросам.
Между тем, то, о >>>>>>>>>>>>>>>>> Так Вы отсканируйте статью и разместите здесь в конференции. Все проще чем мне в ленинскую библиотеку бежать. Что касается использования стандартов в конкурентной борьбе, то желающих то много, да не так просто это сделать. Скажем в МЭКе агент транснациональной корпорации может убедить «свой» купленный национальный комитет по стандартизации выйти с предложением в МЭК создать карманный стандарт этой корпорации. Это предложение рассылается всем национальным комитетам МЭК. Только если это предложение странами одобряется, начинает формироваться рабочая группа. Приглашения участвовать в работе этой группы так же рассылаются по всем странам. После того как группа сформирована, она начинает работать и создает проект стандарта, этот проект рассылается по национальным комитетам для изучения и предложения поправок, поправки учитываются рабочей группой в новом проекте, который опять рассылается и так несколько раз (CDV1, CDV2 и т.п.). Если результат всем странам нравится, то после учета последних поправок стандарт направляется на окончательное голосование (FDIS). Стандарт считается принятым, если не менее 2/3 стран высказались «ЗА», и не более 25% стран высказались «ПРОТИВ» (страна может и воздержаться). Каждый этап длится месяцами и годами. Уже на этапе New Work Item Proposal агент другой транснациональной корпорации, сидящий в другом национальном комитете, поняв откуда уши растут, может забаллотировать стандарт в зародыше или выдвинуться в состав рабочей группы, где оба агента в кулуарах группы будут либо душить друг друга, либо в конце концов договорятся. В итоге же решающим с точки зрения содержания стандарта может оказаться мнение других членов рабочей группы, которых интересы этих корпораций совершенно не волнуют. А голосуют в конце концов национальные комитеты. И если Вы считаете, что какая то одна корпорация может купить 75% национальных комитетов МЭК, то хотя бы назовите ее (а то ведь проспим появление супермонополии). Если крупнейшие игроки рынка договариваются поддержать какое либо одно решение в качестве стандартного, то конечным пользователям только лучше. Договорились бы Сони с Филипсом о едином стндарте DVD и не было бы у обычных пользователей мороки с совместимостью.
>>>>>>>>>>>>>>>>>>>>>>> Я так и не понял чем PLCOpen провинилась. И что плохого в переносимости? Просто у переносимости есть несколько уровней: 1) Унификация синтаксиса и семантики используемых языков. 2) Переносимость проектов с помощью промежуточного формата представления проектных данных 3) двоичная совместимость проектных данных разных инструментальных средств. PLCOpen пытается решить эти проблемы на уровне 1 и 2. Вы хотите сразу уровня 3, но так к сожалению не бывает (и по моему в обозримом будущем не предвидится). Опять же если языки 61131 не нравятся, то просто не используйте их. Если Вы используете язык С, то там с переносимостью даже на первом уровне не все в порядке. Подсказали бы IEEE и ISO что с этим делать, а то ведь они то же все про portability талдычат. К счастью у меня сохранились документы PLCopen >>>>>>>>>>>>>>>>>>>>>>>>>> Этим разговорам даже больше 5 лет. Как говорится не получилось у них в тот раз. В МЭК кстати обычное явление, когда над стандартом работают несколько лет, а потом он не набирает нужное число голосов. Рабочая группа тогда обычно распускается, а результаты их работы публикуются как просто Technical Report. Технологии на месте не стоят – появился XML, вот PLCOpen и пытается «подойти к весу» второй раз.
>>>>>>>>>>>>>>>>>>>>>>>>>>> А я по поводу PLCOpen и не радуюсь, и не огорчаюсь. Подобных клубов по интересам в сфере АСУ ТП несколько десятков. Я только не пойму что Вы хотите сказать. То у Вас PLCOpen только переносимостью и занимается, а когда я сказал, что этой проблемой занимается один комитет из шести, Вы меня «огорчаете», что эти работы сворачиваются. Что PLCOpen считает важным на данный момент, тем они и занимаются – никто им разнарядку сверху не спускает. Если Вам не нравится чем они занимаются, имеете полное право организовать свою некоммерческую организацию PLCClose и заниматься там всем чем заблогарассудится.
>>>>>>>>>>>>>>>>>>>>>> После того как Вы научили уму разуму все PLCOpen сообщество, я надеюсь многие из этих поумневших компаний вняли призыву «Я русский бы выучил только за то, что им разговаривал .....» и такую рамочку все таки повесили J. С Уважением Сергей Сорокин
|
||
Действительный член Присоединился: 16 Апрель 2003 Online Status: Offline Публикации: 126 |
||
Извините за молчание. Просто мы у себя решили не заниматься более пустыми спорами о "правильности пчел", а предложить уважаемой аудитории результаты тестов, которые все заинтересованные люди смогут повторить самостоятельно. В качестве тестовой задачи мы занималисть непрерывным извлечением корня квадратного из "флоат" числа, с подсчетом количества циклов которое получалось за 2 секунды. Причем - в качестве платформы мы выбрали "средний" 386 процессор, без сопроцессора. То что обычно встречается в промышленных контроллерах. Текст на С этой незамысловатой программы выглядит так: #include <stdio.h> void main (void) Исходник можно взятьс ftp://ftp.prosoft.ru/pub/Software/ultralogik/SQRT_issue/test5.c Скомпилируйте и запустиеи его под ДОС. Если запускать по Windows - то надо нажимать клавишу "Control" - иначе результаты будут крайне плохие... Для "ленивых" - результат компиляции: ftp://ftp.prosoft.ru/pub/Software/ultralogik/SQRT_issue/TEST5.EXE Так вот, на моем Р4 (Win2000) этот C-шный тест дает ~ 170 000 циклов за две секунды. Хороший результат, но это для нас еще не главное. Главное - как это поведет сеты в реальном контроллере. Так вот, на контроллере 6040 (Octagon Sysytems) результат - всего 2207 циклов за 2 сек. По моему - стоит задуматься... Таперь попробуем сделать тот же алгоритм на UL. Владельцы UL могут скачать исходник с ftp://ftp.prosoft.ru/pub/Software/ultralogik/SQRT_issue/test4.plc, а остальные посмотреть графически: (ftp://ftp.prosoft.ru/pub/Software/ultralogik/SQRT_issue/test4.jpg) Вычисление корня в этой программе призводится с помощью стандартного модуля "полином". Но никто не мешает, если нужно, написать такой кубик самому, "забить" все коэффициетны полинома "внутрь" и назвать кубик, например "SQRT" для удобства дальнейшего использования. Все операйии и результат, также как и в примере на С производятся с переменными формата "float".
Так как в этой программе пришлось делать вывод в консоль (однократную, в конце теста), то для этого в проекте используется внешняя функция, написанная на С следующего вида: #include <stdio.h> void _pascal comment (int *n) Исходник - на ftp://ftp.prosoft.ru/pub/Software/ultralogik/SQRT_issue/comment.c Для тех, у кого еще нет UL, привожу также результат компиляции проекта целиком: ftp://ftp.prosoft.ru/pub/Software/ultralogik/SQRT_issue/TEST4.EXE Кстати, это как раз пример "правильного" использования внешней функции, напсанной на С внутри UL, ибо именно для таких задач эта возможность и была предусмотрена!!! Согласитесь, что писать аналог printf на FBD - это уже слишком. А то, что это работает медленно, это в данном случае не критично, поскольку это сообщение делается однократо и после основного цикла. А теперь самое интересное. Запускаем test4.exe на моем Р4. Результат - 1 101 200 циклов за 2 секунды !!! Это более чем в 6 раз быстрее, чем SQRT на С!!! А что на "слабом" контроллере? Резутьтат теста на 6040 (Octagon Sysyems) - 11 427 за 2 сек. Т.е. более чем в 5(!) раз быстрее, чем на С! Результаты сводного теста:
Можно также скачать с ftp://ftp.prosoft.ru/pub/Software/ultralogik/SQRT_issue/COMPARE.jpg
Таким образом, результаты тестирования предельно объективно показывают, насколько оптимальнее работает компилятор UltraLogik даже по сравнению со столь уважаемым многими Borland C версии 3.1. Причем речь идет в данном случае о самом "невыгодном" для UL случае - о сложных операциях с плавающей точкой. Поверьте, что результат работы тестов с булевыми операциями показал бы еще больший уровень "отрыва" UltraLogik" от С. Именно поэтому я и утверждал, как Вы помните, что если Вы хотите получит программу, (особенно если это не "ТЕТРИС", а программа с минимум консольных операций, и с максимум расчетов реального временм) выполняющуюся в Вашем контроллере МАКСИМАЛЬНО бысто, то быстрее, чем UltraLogik может быть токьло прямой Ассемблер. По крайне мере, - изо всех известных мне компилирующих языков программирования. Не говоря уже о других широко известных "псевдо-компиляторах" формата IEC-61131.3, которые на самом деле являются либо интерпретаторами, либо "кросс-компиляторами" через С, Паскаль или Java. Производительность таких систем по сравнению с С ничуть не выше, а даже серьезно ниже. Наверно, именно отсюда у многих есть предубеждение к самому стандарту 61131, как к чему-то "нехорошему". Надеюсь, что проимер UL позволит это предубеждение рассеить, и доказать, что и в рамказ МЭК-овского стандарта можно сделать хороший и быстрвй компилятор, причем, иногда даже более оптимальный чем С. Все остальные материалы по теме я также выложил на ftp://ftp.prosoft.ru/pub/Software/ultralogik/SQRT_issue/ С уважением. |
||
Сергей Гусев
"Первая Миля", Authorized ICONICS Systems Integrator |
||
Действительный член Присоединился: 16 Апрель 2003 Online Status: Offline Публикации: 126 |
||
Вдогонку, результаты для WIN2000, P4-1700 ftp://ftp.prosoft.ru/pub/Software/ultralogik/SQRT_issue/Win2000.jpg |
||
Сергей Гусев
"Первая Миля", Authorized ICONICS Systems Integrator |
||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 09 Сентябрь 2003 Категория: Russian Federation Online Status: Offline Публикации: 247 |
||
Сергей Гусев:
do { sqrt (10.0); time (&t); ++calc; } while (t - t2 < 2); Ребята, это несерьезно... Вы чужих баранов на sqrt вешаете... :-) У Вас погрешность "эксперимента" под 50% будет... В итоге, за счет неверной организации "эксперимента", Вы завышаете действительное время вычисления sqrt минимум в два раза... Плюс, по определению неверно сравнивать вычисление корня с максимально допустимым разрешением и с разрешением всего в пять процентов... Так все, что угодно "обосновать" можно... :-) Вот Вам приблизительный текст теста: #include <stdio.h> #include <MATH.h> main () { long i; float data; data = 2.0; printf("\n ============ START. ======"); for (i = 0; i < 1000000000; i++) { sqrt(data); } printf("\n ============ END OF PART 1 ======"); for (i = 0; i < 1000000000; i++) { } printf("\n ============ END OF PART 2 ======"); return(NULL); } Замеряйте время выполнения цикла с SQRT (время между появлением на экране "START" и "END OF PART 1") и время на накладные расходы... (время между появлением на экране "END OF PART 1" и "END OF PART 2"). Время замеряйте просто "ручками"... 10% погрешности тут, я вижу, что слону дробина... чтобы снизить погрешность увеличивайте число в цикле... Замерьте, а потом отнимите от первого времени второе... можно и автоматом эти замеры и вычисления делать, коль функцией time вы владеете... Сергей Гусев, Вы меня сильно огорчили, нехорошо пытаться лапшу окружающим вешать... да еще и лапшу такого низкого качества... Добавлю, что подобными "обоснованиями" ничего, кроме подрыва имиджа UL, добиться нельзя... P.S. я тут экспериментик поставил на основе ваших исходников пока у Вас сайт "глючил"... Так вот. У меня получилось, что за 100 сек с sqrt исполняется - 18929185 циклов, а без sqrt (тот же самый цикл)- 19103533... среднее время вычисления sqrt - 50 нс (НОНОСЕКУНД с учетом накладных расходов), и 50 мс (МИКРОСЕКУНД!) (если без учета)... Резюме - вы завышаете время исполнения не в два раза, а в тысячу (sic!) раз. Вы что, ребята?! Надеюсь, все же, что ваш "тест" вы не специально придумали, а просто по непониманию "сляпали"... Совет: Вам имеет смысл хорошего консультанта для таких дел принять... ну, чтобы не позориться прилюдно... тексты на Си см. здесь: calc = 0L; time (&t); do time (&t2); while (t == t2); // wait for start of second // phase2 do { sqrt (data); time (&t); ++calc; } while ((t - t2) < TIME_VALUE); printf ("\nCycles per %d seconds: %ld", TIME_VALUE, calc); N1=(float)calc; calc = 0L; time (&t); do time (&t2); while (t == t2); // wait for start of second // phase2 do { // sqrt (data); time (&t); ++calc; } while ((t - t2) < TIME_VALUE); N2=(float)calc; printf ("\nCycles per %d seconds: %ld", TIME_VALUE, calc); printf ("\nseconds per SQRT: %g", (float)(N2-N1)*(float)TIME_VALUE/(N1*N2)); |
||
Владимир Е. Зюбин
Язык Рефлекс -- Си-подобный язык программирования ПЛК http://reflex-language.narod.ru/ |
||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 09 Сентябрь 2003 Категория: Russian Federation Online Status: Offline Публикации: 247 |
||
Сергей Сорокин:
Так Вы отсканируйте статью и разместите здесь в конференции. Все проще чем мне в ленинскую библиотеку бежать. Увольте. Довольно будет, что я Вам ссылку дал. Что я тут, насильно просвещать буду, что ль? :-) Сергей Сорокин: Я так и не понял чем PLCOpen провинилась. И что плохого в переносимости? Просто у переносимости есть несколько уровней... Сергей, во-первых, не надо рассказывать очевидных вещей. а, во-вторых, - читайте внимательно мою статью, которую Вы критикуете, по-видимому, предварительно даже не удосужившись прочитать... Прочтите внимательно, и осознайте, что никто не говорит, что переносимость - это плохо... Сергей Сорокин: После того как Вы научили уму разуму все PLCOpen сообщество, я надеюсь многие из этих поумневших компаний вняли призыву «Я русский бы выучил только за то, что им разговаривал .....» и такую рамочку все таки повесили J. Я сделал то, что должен быть сделать... и мне до сих пор приходят теплые письма от читателей. Если Ваши аргументы в подтверждение тезиса "автор не до конца понимает" иссякли, предлагаю закрыть тему. Можете не извиняться. Если же желаете конструктивного диалога - то действуйте общепринятым образом: сначала внимательно прочтите статью, убедитесь, что поняли все верно, а потом критикуйте на здоровье, не забывая при этом цитировать критикуемый оригинал... |
||
Владимир Е. Зюбин
Язык Рефлекс -- Си-подобный язык программирования ПЛК http://reflex-language.narod.ru/ |
||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 29 Июль 2003 Категория: Russian Federation Online Status: Offline Публикации: 140 |
||
Все зациклилились на скорости, я для себя уже решил и ни кто меня не переубедит, все опробовано на реальных системах, С++ лучше и не только скоростью но и гибкостью. Я динамически могу менять реакцию системы(сейчас это бысстрее, а после этого другое, а это пока подождет), тоесть выделяя больше ресурсов и временени тому, что в этот момент требует большего внимания. Я согласен, что все языки если есть пользователи имеют право на существования, но С++ более универсален, быстр(если вы сомневаетесь в его прямом быстродействии, то уж за счет оптимального построения задачи с изменяющимися приоритетами тут спору нет). Может для кого то он и неудобен, но это его проблемы. Да и дешевле он.
|
||
www.sinat.ru
|
||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 09 Сентябрь 2003 Категория: Russian Federation Online Status: Offline Публикации: 247 |
||
Mike_K:
Все зациклилились на скорости, я для себя уже решил и ни кто меня не переубедит, все опробовано на реальных системах, С++ лучше и не только скоростью но и гибкостью. Что касается подтемы UL и Си, то тут дело не в скорости, а в корректности утверждений... А если про контроллеры говорить, то Си++, он сам по себе никакой методологии не представляет, а вот если его снабдить, скажем библиотечками, то было б достаточно интересно... Впрочем, подобные штуки вроде б имеются... см. например, http://homepage.mac.com/pauljlucas/software/chsm/ |
||
Владимир Е. Зюбин
Язык Рефлекс -- Си-подобный язык программирования ПЛК http://reflex-language.narod.ru/ |
||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 08 Сентябрь 2003 Категория: Russian Federation Online Status: Offline Публикации: 178 |
||
Я вам больше того скажу - приличный компилятор с приличной оптимизацией и с инлайнизацией из цикла
do { sqrt (10.0); time (&t); ++calc; } sqrt уж точно должен выкинуть... |
||
SY,
EK |
||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 09 Сентябрь 2003 Категория: Russian Federation Online Status: Offline Публикации: 247 |
||
evgen:
Я вам больше того скажу - приличный компилятор с приличной оптимизацией и с инлайнизацией из цикла sqrt уж точно должен выкинуть... Вы правы, об этом нужно заботиться... но это не всегда корректно... слыхал я, был такой компилятор умный... при оптимизации строчки типа a = f(x); a = b; оптимизировал до a = b; но в какой-то программе это привело к плачевным результатам... т.к. в функции f() какие-то полезные действия выполнялись... инициализация, что ли... не помню.. т.ч. в общем случае это философский вопрос... но предупреждение приличный компилятор несомненно должен сгенерить... |
||
Владимир Е. Зюбин
Язык Рефлекс -- Си-подобный язык программирования ПЛК http://reflex-language.narod.ru/ |
||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 27 Март 2003 Категория: Russian Federation Online Status: Offline Публикации: 240 |
||
>Увольте. Довольно будет, что я Вам ссылку дал. >>>>>>>>>>>>>>>>>> Придется прозябать в темноте J. >>>>>>>>>>>>>>>>>>> Да читал я ee. >>>>>>>>>>>>>>>>>>> Вы так же читайте внимательно. Моя реплика относится не к статье, а к Вашему предыдущему письму.
>>>>>>>>>>>>>>>>>>>>> Честно говоря я больше не вижу предмета для обсуждения. Что касается последнего абзаца моего предыдущего письма, то это была совсем не злая ирония, и надеюсь, что именно так это и было воспринято. С Уважением, Сергей Сорокин |
||
Ответить | Страница <1 45678 53> |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |