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

Тема: Как сделать карту входов выходов в массиве.

  1. #1
    Пользователь Аватар для Serhioromano
    Регистрация
    15.09.2015
    Адрес
    Бишкек
    Сообщений
    265

    По умолчанию Как сделать карту входов выходов в массиве.

    Допустим у меня куча входов и выходов как на плк так и на модуля. Они обслуживают установки однотипные. Каждая установка занимает 2 входа и 2 выхода. Я хочу создать массив этих установок и обрабатывать их в массиве. Первое я создаю структуру.

    Код:
    TYPE SR_ZONE :
    STRUCT
    	xStart: POINTER TO BOOL;
    	xReset: POINTER TO BOOL;
    	xTempr: POINTER TO WORD;
    	xPV: POINTER TO WORD;
    END_STRUCT
    END_TYPE
    Теперь я объявляю глобальную переменную

    Код:
    VAR_GLOBAL
        glbZones: ARRAY[1..10] OF SR_ZONE; 
    END_VAR
    Уже в коде я могу просто сделать код в цикле.

    Код:
    VAR
        i: INT;
    END_VAR
    
    FOR i := 1 TO 10 DO
        IF (glbZones[i].xTempr^ < glbZones[i].xPV^) THEN
            glbZones[i].Start := TRUE;
        END_IF;
    END_FOR
    Все написано от руки, это не реальный код, а что бы продемонстрировать идею. Так вот что бы это работало, в начале программы на первом запуске нужно сделать карту или привязать значения к входам и выходам. Это получается хорошо с не булевыми переменными.

    Код:
    glbZones[1].xTempr:= ADR(wTemperZone1);
    glbZones[1].xPV:= ADR(wTemperZone1);
    glbZones[2].xTempr:= ADR(wTemperZone1);
    glbZones[2].xPV:= ADR(wTemperZone1);
    Но как назначить переменную типа BOOL что бы потом можно было сделать glbZones[i].Start := TRUE; и выходу назначалось значение?

  2. #2
    Пользователь Аватар для Serhioromano
    Регистрация
    15.09.2015
    Адрес
    Бишкек
    Сообщений
    265

    По умолчанию

    Ну как это сделать? У меня на модулях где WORD и там побитно а где каждый вход выход это отдельная переменная. Можно пример кода? Я не совсем пойму. Моя идея в том что после привязки я работаю унифицированно с одним массивом одинаково обращаясь к переменным. А если обращаться на прямую они же разные, не получиться это сделать в цикле.

  3. #3
    Пользователь Аватар для Serhioromano
    Регистрация
    15.09.2015
    Адрес
    Бишкек
    Сообщений
    265

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    а записи вроде xStart: POINTER TO BOOL; больше ни кому не показывайте
    Я не идиот, понятное дело что это не работает. Это просто я отобразил что бы можно было понять мою идею.

    И все же ваше решение не совсем мне понятно. Допустим у меня 2 установки. Включение нагрева на каждой, на одной находится на %QX2.3 у другой на %QX0.1. Как мне в цикле к ним обратиться? Мне нужен способ сформировать имя переменной динамически. Этого нельзя. Значит использовать массив. Но как к элементу массива привязать выход ПЛК?

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

    По умолчанию

    там где есть %QX2.3, там же значит должен быть и %QB2, если этот байт именуете, например value, то к третьему разряду можно обращаться как value.3 Надеюсь это не вызывает вопросов, теперь
    на одной находится на %QX2.3 у другой на %QX0.1
    о каком цикле в этом случае может идти речь, если бы были одинаково %QX2.3 %QX0.3 тогда другое дело, ну или выкинуть Вашу идею и создать массив структуры, включающую в себя адрес байта, адрес бита и значение, первые два аргумента константные, а значение меняется в зависимости от ситуации. А дальше все просто, указатель на первый элемент, далее из соответствующего индекса массива смотрим какое смещение в адресе байта структуры, затем кейс из восьми элементов и в зависимости от адреса бита и присваиваем заданное значение
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  5. #5
    Пользователь Аватар для Serhioromano
    Регистрация
    15.09.2015
    Адрес
    Бишкек
    Сообщений
    265

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    ну или выкинуть Вашу идею и создать массив структуры, включающую в себя адрес байта, адрес бита и значение...
    Ну если посмотрите мой пост, это и есть моя идея. У меня есть структура устройства, я создаю массив, делаю привязку. Допустим у меня есть адрес байта и бита, как я получу его значение? Можно пример кода?

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

    По умолчанию

    наверное здесь что то должно быть http://www.owen.ru/forum/showthread....l=1#post142016
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  7. #7
    Пользователь Аватар для Serhioromano
    Регистрация
    15.09.2015
    Адрес
    Бишкек
    Сообщений
    265

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    наверное здесь что то должно быть http://www.owen.ru/forum/showthread....l=1#post142016
    Жаль что вы не поняли моего вопроса, потому что я чувствую что как раз вы бы могли помочь. Но я не знаю как объяснить. Я знаю что можно через точку получить доступ биту. Вопрос как сделать динамическое имя переменной. Для примера РНР

    Код:
    $MyVar = 10;
    $var = "MyVar";
    echo ${$var};
    Тоже самое тут. Например у меня есть переменные Zone1, Zone2 и в цикле я хочу использовать i для составления имени

    Код:
    for (i = 0; i < 2; i++) {
         echo ${"Zone".$i}
    }
    Подобная техника в ST не возможна. По этому нужно использовать массив и тогда i будет просто иметь доступ к массиву. Если это не биты то я могу элементы массива заранее привязать к ячейкам памяти через указатели, и работать одинаково с массивом, но разные переменные разных входов выходов будут использоваться. Но когда речь заходит о битах входов и выходов не понятно как это реализовать. Через указатель ADR не получается. Ну допустим я знаю что в этом элементе массива мой бит хранится в AdrOfBit := '%QB0' в бите NumOfBit := 3. Как мне получить значение бита из этих 2х переменных?

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

    По умолчанию

    Жаль что вы не поняли моего вопроса
    не рассказывайте сказки
    Вложения Вложения
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

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

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    А если 63/73й - то как с выходами ? )))
    не понял подкола, ну буду умножать i на четыре и вместо просто присвоения буля прогоню через SEL с 0 и 1000, в чем сложность то
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

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

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    а в структуру вносить ещё один описатель, 63/не 63 ?
    а зачем там вообще структура о которой я говорил? Просто цикл, просто смещение на четыре байта, т.к. реалы у нас четырехбайтные и просто присвоение что там используется вместо буля
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

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

Похожие темы

  1. Ответов: 6
    Последнее сообщение: 12.03.2015, 15:00
  2. Ответов: 4
    Последнее сообщение: 03.02.2013, 19:23
  3. опрос входов и выходов
    от soi в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 15.03.2011, 17:55
  4. упаковка входов/выходов
    от Old_Lucky в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 26.04.2010, 16:06
  5. Модули входов-выходов
    от Labean & K* в разделе Подбор Оборудования
    Ответов: 15
    Последнее сообщение: 28.07.2009, 20:00

Ваши права

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