Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 24

Тема: Перегрузка функций в CODESYS

  1. #1

    По умолчанию Перегрузка функций в CODESYS

    Пока не имею возможности создать тему в разделе "ПЛК (среда программирования CODESYS V3.5)" поэтому задам вопрос здесь.
    Есть в компиляторе на ST возможность перегрузки функций ( а еще лучше шаблоны). В онлайн справке ничего по этой теме не нашел. Но возникла необходимость
    Если кто чего знает по теме - отзовитесь
    Заранее признателен

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,134

    По умолчанию

    Цитата Сообщение от RomeoVar Посмотреть сообщение
    Пока не имею возможности создать тему в разделе "ПЛК (среда программирования CODESYS V3.5)" поэтому задам вопрос здесь.
    Есть в компиляторе на ST возможность перегрузки функций ( а еще лучше шаблоны). В онлайн справке ничего по этой теме не нашел. Но возникла необходимость
    Если кто чего знает по теме - отзовитесь
    Заранее признателен
    Опишите задачу, которую вы пытаетесь решить.

  3. #3

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Опишите задачу, которую вы пытаетесь решить.
    Инициализация структур. Есть три массива - INT, WORD, FLOAT. Данные из этих массивов сохраняются в 3 отдельных файла. Реализовал один (пока) FB которому передаю имя файла, ссылку на массив и размер массива.
    Соответственно в первом случае в FB для ссылки на массив я объявлю входную переменную:
    Код:
    VAR_INPUT
        pInt: POINTER TO INT;
    END_VAR
    во втором:
    Код:
    VAR_INPUT
        pInt: POINTER TO WORD;
    END_VAR
    и в последнем
    Код:
    VAR_INPUT
        pInt: POINTER TO FLOAT;
    END_VAR
    СОответственно мне нужно реализовать 3 FB с разными именами SAVE_INT(FB), SAVE_WORD(FB), SAVE_FLOAT(FB)

    А с перегрузкой функции я бы мог реализовать 3 FB с одинаковыми именами (например - SAVE(FB)).

    А с шаблонами я бы вообще запилил один FB. Но это так...

    Если бы можно было объявить POINTER без квалификатора - проблема была-бы решена. Но этого сделать (по-моему) нельзя.
    ВОт и возник у меня вопрос.

  4. #4

  5. #5

    По умолчанию

    Это только для встроенных типов данных (как я понял)? Если я реализовал собственную структуру - я уже не могу использовать ANY?

  6. #6
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,134

    По умолчанию

    Цитата Сообщение от RomeoVar Посмотреть сообщение
    Это только для встроенных типов данных (как я понял)? Если я реализовал собственную структуру - я уже не могу использовать ANY?
    Не можете.
    Но можно сделать функцию с сигнатурой типа (pstStructData, szStructData, eStructData) - соответственно, (указатель на экземпляр нужной структуры, размер структуры в байтах, тип структуры).

    указатель на экземпляр нужной структуры - POINTER TO BYTE
    Под указатель можно подложить что угодно.

  7. #7

    По умолчанию

    А вот интересно как реализован например блок
    fbFileRead(xExecute:=TRUE, hFile:=hFile, pBuffer:=ADR(MConfigTmp), szBuffer:=SIZEOF(MConfigTmp));
    До меня дошло я же ему передаю тупо любой указатель?
    Read (FB; Prefix filrd)

    FUNCTION_BLOCK Read EXTENDS CBM.ETrigToA


    This function block reads the file, which was previously opened via ”FILE.Open”. If less characters can be read than specified in ”szBuffer”, the function block returns an active ”xDone” and indicates the current number of characters in ”szSize”. The size of the target memory structure for the bytes to be read and the number of bytes to be read will not be checked.

    If the stability of the pointer on the data structures and their contents cannot be guaranteed in case of an online change, an online change must be avoided.
    InOut:






    Scope

    Name

    Type

    Comment


    Input hFile CAA.HANDLE File handle
    pBuffer CAA.PVOID Target address for the first byte to be read; can be retrieved via operator ADR
    szBuffer CAA.SIZE Maximum number of bytes to be read; can be retrieved via operator sizeof
    Output eError ERROR Local library error ID (0: no error; 5101: time out)
    szSize CAA.SIZE Current number of successfully read bytes; this value is already valid before xDone has been set

    Вот выдержка. Тут используется встроенный тип данных CAA.PVOID. Это мне должно подойти
    Попробую так
    Код:
    FUNCTION_BLOCK InitCfgCheck
    VAR_INPUT
    	sFileName	: STRING;
    	pBuffer		: FILE.CAA.PVOID;
    	szBuffer	: FILE.CAA.SIZE;
    	
    END_VAR
    VAR_OUTPUT
    Последний раз редактировалось RomeoVar; 12.07.2021 в 19:47.

  8. #8
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,134

    По умолчанию

    Цитата Сообщение от RomeoVar Посмотреть сообщение
    А вот интересно как реализован например блок
    fbFileRead(xExecute:=TRUE, hFile:=hFile, pBuffer:=ADR(MConfigTmp), szBuffer:=SIZEOF(MConfigTmp));
    До меня дошло я же ему передаю тупо любой указатель?
    Повторю - под указатель можно подложить что угодно.*
    И это не особенность этого блока, это везде так будет работать.

    * - за редким исключением (например, нельзя подложить константу)

  9. #9

    По умолчанию

    Ладно. Исхитрился. Добавил проверок, но втолкнул все в один FB все-таки проще.

  10. #10

    По умолчанию

    Ничего пока не получилось.
    А работает в CODESYS динамическое выделение памяти?
    Я нашел библиотеку CMM (Codesys Memory Manager) Только там справка никакая.
    Всего один FB - LinearMemoryManager и много методов. В частности есть Alloc, Free. И (как будто) конструктор - FB_Init
    Только при попытке использования этого FB компилятор мне выдает "не найдено подходящего конструктора FB_Init для данного функционального блока"
    А что я сделал не правильно я так и не понял. Поэтому от выделения динамической памяти я пока отказался
    Но все-же - может кто скажет вообще можно работать с динамической памятью из CODESYS и как.
    СОвсем на просторах интернета ничего не нашел

Страница 1 из 3 123 ПоследняяПоследняя

Похожие темы

  1. Ответов: 38
    Последнее сообщение: 23.06.2017, 07:42
  2. Коды функций Modbus-RTU
    от Newcomer в разделе ПЛК1хх
    Ответов: 15
    Последнее сообщение: 10.11.2015, 10:02
  3. Ответов: 4
    Последнее сообщение: 14.07.2015, 22:17
  4. Переменные в отладке функций.
    от Edik_Ponomarenko в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 30.12.2011, 11:01
  5. Ответов: 3
    Последнее сообщение: 26.01.2010, 21:01

Ваши права

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