Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 20 из 20

Тема: Язык Си в SP: FUN работает, FB нет

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    вывел из си в КДС размер типа INT - выдал 4 - нужен правильный хидер в котором будет сказано что INT размером в 2 байта (и соотв. остальные типы как надо)

    записал в Си напрямую в адрес *((byte*)inst + 4) = (byte)55; - получил в КДС на выходе LIB_TEST1.out1 == 55 т.е. в библиотеке Си другой размер типов. нужен правильный хидер. +4 потому, что в структуре перед out1 находится 2 in'а т.е. 2*2байта=4байта до начала out1 с точки зрения КДС.

    поискал в INCLUDE в VS6 - там нет других описаний типа INT кроме как в wtypes.h. где же его взять? Пробовал в VS ставить платформу 386 - все равно размер INT 4 байта.

    или вручную указать другие типы данных для структуры в Си чтобы они совпали с размерами КДС?
    Последний раз редактировалось sas7; 09.02.2017 в 10:23.

  2. #2

    По умолчанию

    typedef short INT; и т.д. работает КДС показывает одинаковые значения указателей внутренних элементов. ФБ возвращает значение в out

    в интернетах пишут про заголовочный файл CmpStd.h - он есть в платном тулките и там вроде есть описания типов. Кто нибудь может им поделиться?

  3. #3

    По умолчанию

    да, сделал сам сопоставление типов - все работает.

    про release - вроде все так же как и в debug но вот неработает. есть подозрение может КДС пользуется отладочной информацией чтобы выполнять (находить точку входа) биб-ку и по-этому неможет запустить релиз. а дебаг содержит исходный код.. а этого в том числе и хочется избежать (чтобы без детских паролей было).

    на оф.форуме меня пока не авторизовали - как включат, напишу туда

  4. #4

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    4 байта. И отдельно внутри структуры 2 или 4 байта
    попробовал 4 байта в настройках проекта - незаработало - так же на выходе myout2 = 0

    а что значит (как это делать) отдельно внутри структуры 2 или 4 байта? добавлять ненужные переменные к битам и байтам чтобы нужные оказывались со смещением 2 или 4 байта от начала блока данных функционального блока?

  5. #5

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    фб всегда выровнен под 4 байта. Внутрянка равняется по типу. Размером в 2 байта (int,word,uint..) - по 2 байт, 4 байт(real,dword,time..) - под 4 байта
    Как выглядит прототип си-шной функции реализующей ST-фб ?
    Как идет обращение к полям блока ?
    Прототип на второй картинке из первого сообщения в теме - http://www.owen.ru/forum/attachment....8&d=1486369345 - см. test4.h - он был сгенерирован кодесисом и потом я туда добавил static данные

    Обращение на третей картинке - http://www.owen.ru/forum/attachment....9&d=1486369361 - см. окно кода проекта

  6. #6

    По умолчанию

    вижу одинаковый адрес 20093350. скрин кода и выполнения в приложении
    04_vs6_lib_ptr.PNG 05_csy_ptr_eq.PNG

  7. #7

    По умолчанию

    а вот адрес внутри структуры оказался смещен. мне надо менять выравнивание в структуре на 2? т.е. делать меньше. сейчас видимо у меня выравнивание 4 байта, а в КДС 2 или по размеру типа.
    Вложение 29263

  8. #8

    По умолчанию

    поменял выравнивание на 2. непомогло. очевидно в VS размер типа INT - 4 байта. а где это в VS задается? я инклудил wtypes.h. (http://www.owen.ru/forum/attachment....8&d=1486369345) а какой надо было?

  9. #9

    По умолчанию

    Еще вопрос: Созданная таким образом библиотека работает. Но работает только с OBJ созданным в режиме Debug. Если делать Release КДС компилирует проект, загружает, но при запуске выдает ошибку Unresolved external POUs и перечисляет все функции и ФБ моей библиотеки.

    В интернете пишут надо сохранить LIB файл с типом Internal Library. У меня есть только тип Internal v 2.2. Сохранил LIB internal 2.2 - проект с Release OBJ скомпилировался, загрузился, выполняется, НО ничего из функций и ФБ не возвращается, адрес КДС элемента структуры ФБ равен 0. Функции тоже возвращают нули.

    Что можно сделать чтобы заработало с Release OBJ?

  10. #10

    По умолчанию

    нули internal показывает возможно потому, что исполняет пустой код созданный в проекте библиотеки КДС а не внешний obj. Internal library v.2.3 это видимо просто internal library без версии в списке выбора типа сохранения.

    Итого как запустить release OBJ пока под вопросом

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. язык St
    от жекон в разделе ПЛК1хх
    Ответов: 13
    Последнее сообщение: 12.08.2017, 20:00
  2. язык St
    от freeon в разделе ПЛК1хх
    Ответов: 14
    Последнее сообщение: 14.12.2016, 19:45
  3. Язык LD
    от Руслан2 в разделе ПЛК1хх
    Ответов: 21
    Последнее сообщение: 08.12.2016, 04:48
  4. язык Sfc
    от Евгений Мотренко в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 13.05.2008, 03:34

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •