CODESYS форум
https://forum-ru.codesys.com/

C++ и МЭК
https://forum-ru.codesys.com/viewtopic.php?f=2&t=933
Страница 1 из 1

Автор:  User_N1 [ Вт апр 27, 2010 7:42 am ]
Заголовок сообщения:  C++ и МЭК

Я вот уже два года продуктивно работаю в сфере автоматизации промышленности (в частности химической) используя
аппаратные платформы, поддерживающие CoDeSys. В основном работаю с приборами ОВЕН.
Недавно, не имея пока конкретной цели, начал изучать C++. Понял, что решение сложных задач без ООП - дело неблагодарное.
Раннее изучал только Паскаль, поэтому опыта с С++ не имею. Можно ли, и если "Да", то как, привлечь С++ к программированию каких нибудь аппаратных платформ? Для каких целей вообще служит этот язык?

Буду очень благодарен ответу.

Автор:  Igor Petrov [ Вт апр 27, 2010 8:01 am ]
Заголовок сообщения: 

С++ прекрасный сильнейший язык программирования. На нем можно запрограммировать любые задачи. Но, это компьютерный язык, а не язык спроектированный специально для ПЛК. Тут есть определенные особенности.

1) Для ПЛК важно иметь интегрированные отладочные средства,
заточенные под специфику автоматизации. Они должны позволять производить технологические операции с оборудованием. Например, при ремонте/наладке некой машины, техник/электрик/механик может машину остановить, вручную поуправлять выходами, проверить входы, зафиксировать выходы и т.п.
В CoDeSys это делается элементарно. Никаких программ писать не нужно вообще. Ни в одной среде С++ этого нет и близко. Там для элементарного задания нескольких последовательных наборов значений выходов, технику надо звать программиста и тратить время на программу.

2) Для ПЛК практически наплевать на эффективность кода, размер программы, экономию памяти, без которых не обойтись, например в базах данных, играх, при запуске непредсказуемо разных приложений пользователя и др. и пр.
Для ПЛК генератор кода должен давать простой дубово-надежный машинный код. Огромные массивы данных тут гонять не нужно. Рядом с ПЛК нет человека-контролера, который бы его перезагрузил при зависании. Да и сам подобный факт может быть фатальным. Поэтому из языков ПЛК намеренно выброшены все потенциально опасные штуки, типа new. В мире широко известны
несколько громких аварий по причине примитивных программных ошибок в Си. В МЭК подобные ошибки сделать просто нельзя.

3) ПЛК всегда работает в реальном времени. В МЭК системы встроены свои переносимые средства многозадачности, обеспечения времени цикла, вызова задач по фронтам и т.п. Программисту МЭК нет дела какая ОС сидит внутри ПЛК. Изучать ее функции не надою. В С++ без этого никуда. Своих подобных средств в нем нет, он опирается на ОС. Ее надо изучать.
Ее качество влияет на программу непосредственно. Перенос программы из одной ОС в другую (если сразу не приняты специальные меры) представляет сложность.

4) Языки МЭК значительно проще в освоении. Это не декларация, а факт. Мы не раз сталкивались с обучением техников/наладчиков на заводах. Максимум полдня и электрик уже может выполнить минимально необходимые ему действия сам. Шансов его обучить С++ за полдня ноль. С++ язык для программистов профи. Он позволяет залезать на низкий
уровень и эффективно программировать на уровне железа. Ест-но такие программы требуют знаний, тестирования, по специальным методикам и пр.

5) Часто для некоего электронного устройства 1 программист пишет все от формирования времянок микросхем, до прикладных вещей на С++. Программа выглядит одним большим винегретом. Никто, кроме автора в этом разобраться не может. Он незаменим и обязан сопровождать свою программу, даже если это ему совсем уже не хочется. Руководитель не может отдать это сопровождение молодому специалисту, а этого квалифицированного человека перевести на более выгодную работу. Ни в от отпуск, никуда... У нас это классическая судьба С++ программиста.

Теперь делим софт на системный уровень и прикладной. Между ними простой, четко описанный интерфейс. Это переменные ввода/вывода и системные биб-ки. Системный софт четко разграничен и понятен. Его может писать любой программист, даже наемный. Его легко заменить. Аналогично с прикладным.
Это широко известная старая концепция разделяй и властвуй, но верная и ныне. Подробнее тут.

Для системного уровня С++ прекрасно подходит. Для прикладных задач МЭК языки прекрасно подходят.

Короче говоря, я не в восторге от предложений внести С++ в состав языков МЭК. Такие попытки существуют. Но, это простейшее, что приходит в голову и продиктовано маркетинговым популизмом.
Идеально объединить эти 2 мира. Взять лучшее из языков ООП и ввести в языки МЭК. Собственно это и сделано CoDeSys V3.
См. тут.

Приезжайте к нам на конференцию по CoDeSys в мае. Обсудим этот вопрос и еще многие другие. Подробнее тут.
До встречи!

Автор:  arcman [ Ср янв 26, 2011 9:18 am ]
Заголовок сообщения:  Re: C++ и МЭК

В данном контексте интересует, позволяет ли CoDeSys встраивать в программу блоки написанные на Си?
Например имеем объёмный сложный код, уже реализованный на Си, который необходимо выполнять на контроллере с CoDeSys.
Си-код является черным ящиком с входами и выходами.
Код можно скомпилировать под целевую платформу.
Быстродействие критично.

Автор:  Igor Petrov [ Пт янв 28, 2011 9:36 am ]
Заголовок сообщения:  Re: C++ и МЭК

Позволяет. См. Внешние библиотеки.

Однако: Штука аппаратно зависимая. Единого документа тут быть не может. Способы линковки ОЧЕНЬ разные для разных процессоров и ОС. На некоторых (PC) достаточно положить DLL в рабочую папку, на других нужно вписывать интерфейс в рантайм и линковать все статически. Кроме того, надо знать распределение памяти и др. и пр. Нужно быть либо изготовителем ПЛК, либо плотно с ним взаимодействовать.

Если переписать на ST, то проблем быть не должно. В том числе с быстродействием. CoDeSys – это компилятор.

Автор:  malabiker [ Пн ноя 07, 2016 11:21 am ]
Заголовок сообщения:  Re: C++ и МЭК

Igor Petrov писал(а):
На некоторых (PC) достаточно положить DLL в рабочую папку


Расскажите этот момент попопдробнее, пожалуйста.

Страница 1 из 1 Часовой пояс: UTC+01:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/