C по IEC 61131-3 IL компилятор - PullRequest
       73

C по IEC 61131-3 IL компилятор

4 голосов
/ 16 апреля 2009

У меня есть требование для портирования некоторого существующего кода C на ПЛК, совместимый с IEC 61131-3 .

У меня есть несколько вариантов разбиения кода на дискретные функциональные блоки и объединения этих блоков в стандартное решение (Ladder, FB, Structured Text и т. Д.). Но для этого потребуется разделить код на C, чтобы построить каждый функциональный блок.

При взгляде на спецификацию IEC я понял, что форма списка инструкций IEC может быть целевым языком для компилятора. В статье википедии перечислены два инструмента разработки:

  1. CoDeSys
  2. Beremiz

Но, похоже, они предназначены для компиляции языков IEC в C, а не в C в IEC.

Другое возможное решение - протолкнуть код C через переводчик C-Pascal и использовать его в качестве отправной точки для решения Структурированный текст .

Если их нет, я пойду по пути разделения кода на функциональные блоки.

Редактировать

В ответ на ответ Млисона я должен был упомянуть, что код C является существующей системой управления в реальном времени. Таким образом, алгоритмы программ уже должны соответствовать среде ПЛК.

Ответы [ 7 ]

4 голосов
/ 15 октября 2009

Возможно, этот ответ приходит слишком поздно, но можно вызвать C-код из CoDeSys благодаря внешней библиотеке.

Документацию можно найти на форуме CoDeSys по адресу http://forum -en.3s-software.com / viewtopic.php? T = 620

Это даст вам возможность использовать ваш C-код в ПЛК с небольшими изменениями. Вам просто нужно определить функции или интерфейсы функциональных блоков.

3 голосов
/ 17 апреля 2009

Я предполагаю, что переводчик с языка C на Паскаль не подберет вам достаточно места, чтобы стоить того. Структурированный текст очень похож на Паскаль, но есть различия, которые вам нужно будет исправить везде.

Не проблема, но не забывайте, что среда выполнения ПЛК немного отличается. Приложения C начинаются с main () и заканчиваются, когда main () возвращается. PLC вызывает его main () снова и снова, 100: s раз в секунду, и это никогда не заканчивается. Обычно длительные вычисления и операции ввода / вывода должны кодироваться иначе, чем использовалось бы в приложении C.

Если ваш исходный код на C не содержит много-много тысяч строк кода - перепишите его.

1 голос
/ 22 августа 2011

Существует несколько сред разработки МЭК и целевого оборудования, которые могут использовать блоки С ... Я также хотел бы взглянуть на причины, по которым он ДОЛЖЕН быть целью подачи жалоб по МЭК-61131. Я много писал о соблюдении и почему это не означает присед. SOFTplc Corp может помочь, я уверен, с определяемыми пользователем загружаемыми модулями ... и они могут быть в C ..

Schneider также поддерживает функциональные блоки C ...

Labview тоже !! не уверен, почему IEC важна, вот и все !! компилятор, если он существует, наверняка создаст плохой код :)

1 голос
/ 17 августа 2011

невозможно. Короче говоря: язык IL - 4GL (т.е. ограничен домен, а также другие языки IEC 61131-3 - ST, FBD, LD, SFC). Язык C является 3GL.

Чтобы понять проблему, попробуйте ответить на вопрос, в какую сторону выразить в IL манипуляции с указателем? например, экспресс-вызов функция по указателю. Как насчет прерываний? Низкий уровень доступа к периферийные устройства?

(действительно, проблем больше)

Кстати, есть язык Reflex, он же "C с процессами". Reflex является 4GL для управляющий домен с C-подобным синтаксисом. Но известные переводчики производят C-код и Python-код.

1 голос
/ 03 октября 2009

Если количество преобразуемого кода составляет несколько тысяч строк, вероятно, лучшим вариантом будет перекодирование вручную.

Если у вас много кода для конвертации, тогда автоматизированный инструмент может быть очень эффективным. Используя DMS Software Reengineering Toolkit , мы создали трансляторы для преобразования диаграмм механического движения в код RLL (PLC). DMS также имеет полный анализатор C / анализаторы / внешние интерфейсы. Кусочки предназначены для построения кода C на RLL.

Это не простая задача. Скорее всего, потребуется 6-12 человеко-месяцев, чтобы настроить DMS на то, что вам нужно. Если это меньше, чем то, что нужно делать вручную, тогда это правильный способ сделать это.

0 голосов
/ 19 февраля 2015

Каждый раз, когда я делал это, я просто анализировал и конвертировал его вручную из C непосредственно в ST. Я столкнулся только с несколькими функциями, которые требовали полной переписки, хотя было очень мало того, что касалось указателей, что, к сожалению, вызывает ST.

0 голосов
/ 19 августа 2011

Лучше всего разбить ваш код C на более мелкие части, которые можно перекодировать как функциональные блоки PLC, и использовать преобразователь C в PASCAL для каждого блока, который вы будете переписывать в структурированном тексте. Подготовьтесь к выполнению большого количества ручной работы, поскольку автоматическое преобразование, вероятно, разочарует вас.

Также посмотрите на эту страницу: http://www.control.com/thread/1026228786

...