Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 17

Тема: Не явное обращение к переменным

  1. #1

    Lightbulb Не явное обращение к переменным

    Доброго времени суток!
    Помогите, пожалуйста разобраться с такой ситуацией:

    Предположим:
    1) есть несколько переменных А1,А2,А3, содержащие некоторые значения;
    2) Есть переменная того же типа, которой необходимо присвоить значение одной из этих переменных;
    3) Есть строковая переменная В, которая содержит название переменной, от которой необходимо получить значение

    Пробую делать так:

    PROGRAM TestVar
    VAR
    A:WORD;
    A1:WORD;
    A2:WORD;
    A3:WORD;
    B:STRING(20);
    pw:POINTER TO WORD;
    END_VAR


    ---------- Сама программа ---------------

    A:=0;

    A1:=111;
    A2:=222;
    A3:=333;

    B:='A1';

    pw:=ADR( ПреобразоватьСодержимое(В) ); (* ТУТ ЯВНО ОШИБКА, но как написать правильно ??? *)

    A:=pw^;

    Как правильно реализовать?
    Последний раз редактировалось Igor_Efremenko; 27.02.2018 в 11:31.

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

    По умолчанию

    Код:
    IF B='A1' THEN
    pw:=ADR(A1);
    ELSIF B='A2' THEN
    pw:=ADR(A2);
    ELSIF B='A3' THEN
    pw:=ADR(A3);
    END_IF;
    так попробуйте
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  3. #3

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Код:
    IF B='A1' THEN
    pw:=ADR(A1);
    ELSIF B='A2' THEN
    pw:=ADR(A2);
    ELSIF B='A3' THEN
    pw:=ADR(A3);
    END_IF;
    так попробуйте
    Проблема в том, что я не могу знать чему именно будет равно, а переменных типа А1,А2..... - предположительно будет порядка 30000

    PS Программа будет получать данные о том, из какой именно надо будет прочитать значение переменной

  4. #4
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    1,135

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Код:
    IF B='A1' THEN
    pw:=ADR(A1);
    ELSIF B='A2' THEN
    pw:=ADR(A2);
    ELSIF B='A3' THEN
    pw:=ADR(A3);
    END_IF;
    так попробуйте
    а зачем тогда указатель использовать?

  5. #5

    По умолчанию

    ...а какие варианты, если не использовать перечисление полного списка?

  6. #6
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    1,135

    По умолчанию

    Цитата Сообщение от Igor_Efremenko Посмотреть сообщение
    Проблема в том, что я не могу знать чему именно будет равно, а переменных типа А1,А2..... - предположительно будет порядка 30000

    PS Программа будет получать данные о том, из какой именно надо будет прочитать значение переменной
    А что Вы вообще хотите реализовать? Если, типа работа с рецептами, то где-то здесь была темка по этому поводу

  7. #7

    По умолчанию

    Суть следующая:
    Имеется огромное количество запорной арматуры(кранов) и пользователь динамически может формировать некоторую последовательность из этих кранов
    ... может быть порядка 2-50 кранов из общего числа (30000)
    Задача: проанализировать состояние этих кранов (т.е. имеется 30000 УникПеременных.state; оператор указывает какие именно УникПеременных нужно анализировать сегодня)
    В итоге наполняется вот такая структура:
    Безымянный.jpg

    Вопрос: Как теперь зная имя переменной обратиться к её значению STATE (например ZDV0116.STATE, которая описана отдельно) ?

    PS Можно просто завести переменную ZDV0116:WORD; (не принципиально).... как к ней обратиться, зная её имя?

  8. #8

    По умолчанию

    Можно-ли получить указатель например таким образом:
    pw:=ADR('A1');
    ....указатель на ячейку памяти, где хранится значение переменной А1 ?

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

    По умолчанию

    нет в языках МЭК такого понятия как eval
    Указатель возвращает адрес области памяти, где храниться значение объекта, ни о каких именах переменных он не знает. С указателем можно только узнать адрес начального объекта и смещать на размер байт, согласно типа данных этого/их объекта/ов
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  10. #10

    По умолчанию

    Может как-то можно эту проблему решить другим способом, без указателей?

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

Похожие темы

  1. Ответов: 4
    Последнее сообщение: 08.05.2014, 07:10
  2. Ответов: 2
    Последнее сообщение: 27.04.2013, 17:57
  3. HD-2544.VA-управление переменным резистором
    от Ефим в разделе Твердотельное реле
    Ответов: 5
    Последнее сообщение: 22.04.2013, 07:12
  4. Ответов: 3
    Последнее сообщение: 12.04.2012, 10:31

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

Ваши права

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