Страница 38 из 58 ПерваяПервая ... 28363738394048 ... ПоследняяПоследняя
Показано с 371 по 380 из 579

Тема: Создать функцию на ST

  1. #371

    По умолчанию

    Константы точно не поддерживаются.
    Похоже, что есть ограничение на размер памяти для локальных переменных.
    Последний раз редактировалось EFrol; 09.09.2022 в 18:20.

  2. #372

    По умолчанию

    Спасибо.

    В справке есть следующий текст:
    ПРИМЕЧАНИЕ
    При записи выражений допустимо использовать переменные (локальные и глобальные) и константы.


    что в этом случае подразумевается под глобальными переменными? VAR_GLOBAL как ключевое слово не распознается

  3. #373
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    Функция не имеет памяти, поэтому инициализированая переменная неким значением это и есть константа, если её не записывать
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  4. #374

    По умолчанию

    спасибо за ответ.
    к сожалению, переменная даже если ее не записывать не превратиться в константу. Так как все равно будет размещена в стеке.
    Глобальные константы в стек не помещаются (по крайней мере обычно не помещаются), соответственно их использование могло бы помочь обойти проблему с ограниченным размером стека.

  5. #375

    По умолчанию

    Добрый день,

    Приведенный ниже код почему то возвращает 0 или 1 в зависимости от значения inputVariable
    Если убрать оба exit; то возвращает как ожидается - 55 всегда
    Такое ощущение что exit; неправильно работает внутри case of
    может кто сталкивался?
    версия 1.23.301.0

    Код:
    function function1: udint; 
        var_input 
            inputVariable : bool; 
        end_var
        var 
            localVariable : udint := 0; 
        end_var
        repeat
    
            case bool_to_udint(inputVariable) of
            0:
              localVariable := 55;
              exit;
            1:
              localVariable := 55;
              exit;          
          end_case
        until true
        end_repeat
        
        function1 := localVariable;
        
    end_function

  6. #376

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Этот код сам по себе не логичен, зачем здесь бесконечный цикл? Не удивительно что компилятор работает не корректно
    Я собственно про некорректность работы компилятора и пишу.
    Если компилятор код скомпилировал, то он должен работать в соответствии с документацией. Если не может скомпилировать - должен выдать ошибку.
    Здесь налицо непредсказуемое поведение которое кому-нибудь точно потратит много времени
    Я понимаю что у нас тут не gcc и никто ничего не вылизывал годами. Нашел ошибку, поделился с сообществом и разработчиками.
    Пример написан для демонстрации неправильной работы компилятора, чтобы не утруждать Вас чтением 200+ строк кода.
    Про логичность я кажется ничего не спрашивал.

  7. #377

    По умолчанию

    Цитата Сообщение от Andrey G Посмотреть сообщение
    Я собственно про некорректность работы компилятора и пишу.
    Если компилятор код скомпилировал, то он должен работать в соответствии с документацией. Если не может скомпилировать - должен выдать ошибку.
    Здесь налицо непредсказуемое поведение которое кому-нибудь точно потратит много времени
    Я понимаю что у нас тут не gcc и никто ничего не вылизывал годами. Нашел ошибку, поделился с сообществом и разработчиками.
    Пример написан для демонстрации неправильной работы компилятора, чтобы не утруждать Вас чтением 200+ строк кода.
    Про логичность я кажется ничего не спрашивал.
    Приложите, пожалуйста, проект здесь или если будет удобнее можете направить на почту.
    Менеджер по продукту | Owen Logic
    email: soft@owen.ru

  8. #378

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    ну тут вобщем то не к exit больше вопросов, а к самому репиту, любое его использование не дает правильный результат, я например добился того что если ни чего после репита не стоит, то функция возвращает ноль, если есть некая строчка, то единицу
    Спасибо, это полезная информация.
    Бесконечный репит использую для переключения нескольких состояний автомата за один скан, попробую по-другому сделать раз репит ненадежно работает

  9. #379

    По умолчанию

    Цитата Сообщение от Andrey G Посмотреть сообщение
    Бесконечный репит использую для переключения нескольких состояний автомата за один скан, попробую по-другому сделать раз репит ненадежно работает
    Не надо так! Надо переключать всё за один цикл программы ПРки, а не цикл в цикле.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  10. #380

    По умолчанию

    Так автомат внутри ST функции. В чем может быть проблема? (кроме полного отсутствия отладки)

Страница 38 из 58 ПерваяПервая ... 28363738394048 ... ПоследняяПоследняя

Похожие темы

  1. Ответов: 14
    Последнее сообщение: 01.07.2023, 21:30
  2. Ответов: 6
    Последнее сообщение: 22.12.2021, 10:50
  3. Ответов: 3
    Последнее сообщение: 13.09.2021, 13:31
  4. ПЛК160. Чем заменить функцию записи 0x05?
    от FallenDAY в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 26.08.2017, 13:19
  5. Как написать собственную функцию wait()
    от PavelKazakov в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 23.07.2009, 12:37

Метки этой темы

Ваши права

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