Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Архив
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

все-таки как втроить С-код в проект на Co

 Ответить Ответить
Автор
Сообщение
kycua Смотреть выпадающим
Новичок
Новичок


Присоединился: 06 Январь 2006
Online Status: Offline
Публикации: 9
Свойства публикации Свойства публикации   Ответить, цитируя автора - kycua Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: все-таки как втроить С-код в проект на Co
    Опубликовано: 12 Январь 2006 15:01

Здравствуйте!

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

з.ы. контроллер beckipc sc13

спасибо

 

 

Наверх
_IP_ Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 29 Январь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 293
Свойства публикации Свойства публикации   Ответить, цитируя автора - _IP_ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 12 Январь 2006 17:09

Вызов внешних функций из obj файлов в SС13 не поддерживается.

Код Ваших С функций должен быть скомпонован с системой исполнения CoDeSys для SС13. В системе исполнения нужно сделать так называемую Reference table с указателями на Ваши функции. Далее нужно добавить функцию RHICFGGetExtRefTable, возвращающую указатель на эту таблицу. После чего Ваши функции будут видны из IEC программ.

В самом CoDeSys нужно сделать проект, содержащий объявления соответствующих POU и сохранить его как внешнюю библиотеку (external library). Получится .lib файл, который конечные пользователи должны будут включить в свои проекты. Для внешних библиотек полезно написать некие заглушки на IEC языках в CoDeSys. Они будут работать в режиме эмуляции.

Пример:

void huge MyFirstLibFunc(void)
{
   return;
}

int  huge MySecondLibFunc(int i)
{
   return 2*i;
}

RHIExtRefTable gRHIRefTable[] =
{
  {"MYFIRSTLIBFUNC", (void(*)())MyFirstLibFunc},
  {"MYSECONDLIBFUNC",(void(*)())MySecondLibFunc},
  {"", NULL}
};

RHIExtRefTable * RHICFGGetExtRefTable(void)
{
  return gRHIRefTable;
}

Подробнее см. документ 'RHI documentation' в SDK.

Igor Petrov
Наверх
kycua Смотреть выпадающим
Новичок
Новичок


Присоединился: 06 Январь 2006
Online Status: Offline
Публикации: 9
Свойства публикации Свойства публикации   Ответить, цитируя автора - kycua Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 13 Январь 2006 09:00

спасибо огромное!

разбираемся...

Наверх
kycua Смотреть выпадающим
Новичок
Новичок


Присоединился: 06 Январь 2006
Online Status: Offline
Публикации: 9
Свойства публикации Свойства публикации   Ответить, цитируя автора - kycua Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 16 Январь 2006 17:24
Добрый день!
не могу разобраться как именно подключать функции C к CoDeSys.
я так понимаю в CoDeSys необходимо создавать внешнюю библиотеку (которая будет далее использоваться в проектах), содержащую POU с объявлением функции (то есть описанием переменнах, входов/выходов) и сам код функции на языке Си. Каким образом код функции надо подключить к CoDeSys? я создаю в борлад Си проект, пишу код функции, создаю таблицу RHIRefTable (как в примере) со списком определенных функций, компилирую...и что делать дальше? или в борланд Си нужно создавать не exe-проект, а lib-библиотеку (для exe)?? но эта lib-библиотека не хочет загружаться в library manager CoDeSys...
одним словом, если есть возможность, пожалуйста, проясните поподробнее как это все делается.

спасибо
Наверх
_IP_ Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 29 Январь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 293
Свойства публикации Свойства публикации   Ответить, цитируя автора - _IP_ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 17 Январь 2006 17:45

1) Создайте в CoDeSys новый проект, указав в качестве целевой платформы Beck IPC @CHIP.

2) Создайте пустые (для ST достаточно поставить ; в разделе реализации) объявления своих функций. PLC_PRG нужно удалить.

3) Сохраните проект как внешнюю библиотеку (Save as… Тип файла: External library (*.lib)). Вы получите нужный (конечному пользователю) *.lib файл и заголовочный файл *.h с соответствующими объявлениями для C.

4) В Борланд Си пишете эти функции (как в примере) и статически компонуете все вместе с системой исполнения в единый exe.

 Вообще в CoDeSys внешние библиотеки на C нужны бывают редко. Можно писать внутренние библиотеки на ST. В них можно запретить доступ к текстам. Компилятор CoDeSys для этого семейства процессоров дает код, не хуже C компилятора. К функциям ОС доступ возможен через библиотеку rtos.lib.

 

Igor Petrov
Наверх
kycua Смотреть выпадающим
Новичок
Новичок


Присоединился: 06 Январь 2006
Online Status: Offline
Публикации: 9
Свойства публикации Свойства публикации   Ответить, цитируя автора - kycua Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Февраль 2006 09:07

Здравствуйте!

Спасибо, вобщем-то все получается. Библиотке CAN в собственной

интерпритации разрабатывается полным ходом.

 

Хотел бы уточнить следующее:

При создании external library в CoDeSys и генереровании .h файла,

все объявления функции и переменных имеют несколько неправильную форму, например тип int записывается как INT. Понятно дело, компилятор borland не воспринимает такой тип и приходится переписывать все объявления типов. В принципе один раз это сделать несложно, но потом при добавлении функций к библиотеке, .h файл генерируется заново и приходится заново все исправлять.

Можно ли как-то с этим справиться?

 

спасибо

Наверх
_IP_ Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 29 Январь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 293
Свойства публикации Свойства публикации   Ответить, цитируя автора - _IP_ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Февраль 2006 15:21
Первоначально опубликовано kycua

При создании external library в CoDeSys и генереровании .h файла, все объявления функции и переменных имеют несколько неправильную форму, например тип int записывается как INT.Можно ли как-то с этим справиться?

Добрый день!

Конечно, не стоит вносить  такие правки руками! Поручите эту работу препроцессору компилятора С.
Создайте один раз свой .h файл с определениями типов, например:

#define INT int
и т.д.

Включите его в свой проект первым.

Igor Petrov
Наверх
 Ответить Ответить

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz