Модераторы: ama_kid
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выравнивание параметров FB в CoDeSys 2.3, передача параметров во внешнюю функцию 
:(
    Опции темы
ama_kid
Дата 29.5.2015, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 1
Всего: 95



Добрый день.

На форуме 3S мой аккаунт никак не могут подтвердить board-администраторы, а вопрос хотелось бы решить не методом костыля (как сейчас я сделал).
Хотелось бы проконсультироваться с гуру CoDeSys 2.3, если они сюда заглядывают, т.к. в такие дебри еще не влезал. 
Пишу внешнюю библиотеку на Visual C++, объявил функциональный блок:
user posted image
При этом автоматически генерируется h-файл соответствующего блока для реализации с соответствующими объявлениями:
user posted image
Прошу обратить внимание на параметры F_Local1 (типа BOOL) и F_Reserv, о них пойдет разговор по сути.
Итак, ситуация изначально следующая: параметра F_Reserv нет вообще (это есть "костыль"), есть только F_Local1 типа BOOL и остальные UDINT. При этом структура LIB_FUNCtyp имеет разный размер на стороне памяти ПЛК (в моем случае SP PLCWinNT v2.4) и в скомпилированном коде obj-файла. Sizeof(LIB_FUNCtyp) внутри C-кода имеет значение 24 (что, в общем-то правильно, учитывая 4-байтное выравнивание, выставленное в настройках), а на стороне ПЛК опытным путем было установлено, что она имеет размер в 21 байт, т.е. за первым параметром F_Local1 идет сразу второй F_Local2 без какого-либо выравнивания. Соответственно, всё чтение-запись в параметры FB идёт лесом, перепутывая байты и работая с неверными значениями. 
Поэтому мой костыль выглядит следующим образом: строка "F_Reserv    : ARRAY[1..3] OF BOOL;" в библиотеке CoDeSys вставляется, но в сгенерированном h-файле строка "BOOL F_RESERV[3];" комментируется. После этого все отрабатывает корректно.
В настройках Target'а не нашел вообще возможности выставлять выравнивание структур. Возможно, где-то в настройках какого-нибудь реального контроллера такая настройка и будет, но конкретно для SoftPLC её нет.
Может я не там ищу? Как мне избавиться от необходимости декларировать костыль?


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | SCADA-системы и контроллеры стандарта IEC (МЭК) | Следующая тема »


 




[ Время генерации скрипта: 0.1059 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.