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

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

  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
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    там где есть %QX2.3, там же значит должен быть и %QB2, если этот байт именуете, например value, то к третьему разряду можно обращаться как value.3 Надеюсь это не вызывает вопросов, теперь
    на одной находится на %QX2.3 у другой на %QX0.1
    о каком цикле в этом случае может идти речь, если бы были одинаково %QX2.3 %QX0.3 тогда другое дело, ну или выкинуть Вашу идею и создать массив структуры, включающую в себя адрес байта, адрес бита и значение, первые два аргумента константные, а значение меняется в зависимости от ситуации. А дальше все просто, указатель на первый элемент, далее из соответствующего индекса массива смотрим какое смещение в адресе байта структуры, затем кейс из восьми элементов и в зависимости от адреса бита и присваиваем заданное значение

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

    По умолчанию

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

  6. #6
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    наверное здесь что то должно быть http://www.owen.ru/forum/showthread....l=1#post142016

  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
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    Жаль что вы не поняли моего вопроса
    не рассказывайте сказки
    Вложения Вложения

  9. #9
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    А если 63/73й - то как с выходами ? )))
    не понял подкола, ну буду умножать i на четыре и вместо просто присвоения буля прогоню через SEL с 0 и 1000, в чем сложность то

  10. #10
    Banned
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    а в структуру вносить ещё один описатель, 63/не 63 ?
    а зачем там вообще структура о которой я говорил? Просто цикл, просто смещение на четыре байта, т.к. реалы у нас четырехбайтные и просто присвоение что там используется вместо буля

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

Похожие темы

  1. Ответов: 6
    Последнее сообщение: 12.03.2015, 15:00
  2. СПК207, запись данных на флеш-карту или SD-карту памяти
    от ОАО"Органика" в разделе СПК2xx (архив)
    Ответов: 4
    Последнее сообщение: 03.02.2013, 18:23
  3. опрос входов и выходов
    от soi в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 15.03.2011, 17:55
  4. упаковка входов/выходов
    от Old_Lucky в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 26.04.2010, 15:06
  5. Модули входов-выходов
    от Labean & K* в разделе Подбор Оборудования
    Ответов: 15
    Последнее сообщение: 28.07.2009, 19:00

Ваши права

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