Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 29 из 29

Тема: Упаковать дискретные сигналы для экономии тегов.

  1. #21

    По умолчанию

    Позвольте внести свои 5 копеек относительно ФБ упаковки . Если я правильно понял, то уже поднималось в этой теме: пользователь capzap в сообщении № 8 упомянул о биб-ке oscat и функции BYTE_TO_BITS. Однако BYTE_TO_BITS применима к 8-ми булевым переменным (автору темы для решения задачи необходимо минимум 12). Можно по аналогии забацать ФБ WORD_OF_BIT на ST:
    Исходник:
    Код:
    FUNCTION_BLOCK WORD_OF_BIT
    VAR_INPUT
    	B0: BOOL; 	B1: BOOL;
    	B2: BOOL; 	B3: BOOL;
    	B4: BOOL; 	B5: BOOL;
    	B6: BOOL; 	B7: BOOL;
    	B8: BOOL; 	B9: BOOL;
    	B10: BOOL; B11: BOOL;
    	B12: BOOL; B13: BOOL;
    	B14: BOOL; B15: BOOL;
    END_VAR
    VAR_OUTPUT
    	out: WORD;
    END_VAR
    VAR
    END_VAR
    
    Тело ФБ:
    out:=SHL (SHL  (SHL (SHL (SHL (SHL (SHL (SHL (SHL (SHL (SHL (SHL (SHL (SHL (SHL (BOOL_TO_WORD(B15), 1) OR BOOL_TO_WORD(B14), 1) OR BOOL_TO_WORD(B13), 1) OR BOOL_TO_WORD(B12), 1) OR BOOL_TO_WORD(B11), 1) OR BOOL_TO_WORD(B10), 1) OR BOOL_TO_WORD(B9), 1) OR BOOL_TO_WORD(B8), 1) OR BOOL_TO_WORD(B7), 1) OR BOOL_TO_WORD(B6), 1) OR BOOL_TO_WORD(B5), 1) OR BOOL_TO_WORD(B4), 1) OR BOOL_TO_WORD(B3), 1) OR BOOL_TO_WORD(B2), 1) OR BOOL_TO_WORD(B2), 1) OR BOOL_TO_WORD(B0);

    Дальше в конфигураторе добавить Modbus-slave и переменную 2byte. Адресу этой переменой присвоить имя выхода ФБ, описанного выше.
    Ну либо так же по аналогии для типа DWORD (32 переменных). Использую подобный ФБ в задаче по контролю концевых выключателей задвижек. Если есть неточности, гуру, поправьте.
    Если есть шанс - используй его!

  2. #22
    Пользователь Аватар для _Mikhail
    Регистрация
    25.07.2013
    Адрес
    Ярославль
    Сообщений
    510

    По умолчанию

    Цитата Сообщение от Cool-russian Посмотреть сообщение
    Позвольте внести свои 5 копеек относительно ФБ упаковки . Если я правильно понял, то уже поднималось в этой теме: пользователь capzap в сообщении № 8 упомянул о биб-ке oscat и функции BYTE_TO_BITS. Однако BYTE_TO_BITS применима к 8-ми булевым переменным (автору темы для решения задачи необходимо минимум 12). Можно по аналогии забацать ФБ WORD_OF_BIT на ST:
    Исходник:
    Код:
    FUNCTION_BLOCK WORD_OF_BIT
    VAR_INPUT
        B0: BOOL;     B1: BOOL;
        B2: BOOL;     B3: BOOL;
        B4: BOOL;     B5: BOOL;
        B6: BOOL;     B7: BOOL;
        B8: BOOL;     B9: BOOL;
        B10: BOOL; B11: BOOL;
        B12: BOOL; B13: BOOL;
        B14: BOOL; B15: BOOL;
    END_VAR
    VAR_OUTPUT
        out: WORD;
    END_VAR
    VAR
    END_VAR
    
    Тело ФБ:
    out:=SHL (SHL  (SHL (SHL (SHL (SHL (SHL (SHL (SHL (SHL (SHL (SHL (SHL (SHL (SHL (BOOL_TO_WORD(B15), 1) OR BOOL_TO_WORD(B14), 1) OR BOOL_TO_WORD(B13), 1) OR BOOL_TO_WORD(B12), 1) OR BOOL_TO_WORD(B11), 1) OR BOOL_TO_WORD(B10), 1) OR BOOL_TO_WORD(B9), 1) OR BOOL_TO_WORD(B8), 1) OR BOOL_TO_WORD(B7), 1) OR BOOL_TO_WORD(B6), 1) OR BOOL_TO_WORD(B5), 1) OR BOOL_TO_WORD(B4), 1) OR BOOL_TO_WORD(B3), 1) OR BOOL_TO_WORD(B2), 1) OR BOOL_TO_WORD(B2), 1) OR BOOL_TO_WORD(B0);

    Дальше в конфигураторе добавить Modbus-slave и переменную 2byte. Адресу этой переменой присвоить имя выхода ФБ, описанного выше.
    Ну либо так же по аналогии для типа DWORD (32 переменных). Использую подобный ФБ в задаче по контролю концевых выключателей задвижек. Если есть неточности, гуру, поправьте.
    А зачем так сложно. Ведь можно гораздо проще.
    применительно к Вашему варианту:
    out.0:=B0;
    out.1:=B1;
    out.2:=B2;
    .............
    out.15:=B15;

  3. #23

    По умолчанию

    Цитата Сообщение от _Mikhail Посмотреть сообщение
    А зачем так сложно. Ведь можно гораздо проще.
    применительно к Вашему варианту:
    out.0:=B0;
    out.1:=B1;
    out.2:=B2;
    .............
    out.15:=B15;

    _Mikhail
    , если проект написан на CFC, то алгоритм наглядным получается. Ну и по-битно обращаться к переменной через точку (как Вы указали) вроде можно только в ST (если я конечно не упустил что-то в матчасти ). Ну и это так сказать одно из решений (как по-мне, так удобное).
    Если есть шанс - используй его!

  4. #24
    Пользователь Аватар для _Mikhail
    Регистрация
    25.07.2013
    Адрес
    Ярославль
    Сообщений
    510

    По умолчанию

    Цитата Сообщение от Cool-russian Посмотреть сообщение

    _Mikhail
    , если проект написан на CFC, то алгоритм наглядным получается. Ну и по-битно обращаться к переменной через точку (как Вы указали) вроде можно только в ST (если я конечно не упустил что-то в матчасти ). Ну и это так сказать одно из решений (как по-мне, так удобное).
    В CFC все тоже самое2016-08-01_134400.jpg

  5. #25

    По умолчанию

    вот эт лестницы . Но ФБ или функция уже стала делом привычки . Спасибо за совет, будем осваивать и применять.
    Если есть шанс - используй его!

  6. #26

    По умолчанию

    Так же в Util.lib есть блоки Pack и Unpack.

  7. #27
    Пользователь
    Регистрация
    22.03.2011
    Адрес
    Ивановская обл, Родники
    Сообщений
    145

    По умолчанию

    Тоже самое предлагал в #18, но Им хочется более изощренным методом с выкрутасами, правками, переправками. Ну, хозяин- Барин. Что хочет то и выбирает.
    Паралельно еще одна ветка на эту-же тему. http://www.owen.ru/forum/showthread.php?t=24918

  8. #28
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    8,240

    По умолчанию

    Случайно попалась картинка, для извращений:

    Снимок.PNG
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

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

    По умолчанию

    я просто записывал в теле программы в temp.x биты а в конце цикла (программы) делал temp -> peremennaya_modbus в конфигураторе.
    В начале программы соответственно peremennaya_mobus -> temp и в нужных местах программы использовал temp.x

Страница 3 из 3 ПерваяПервая 123

Похожие темы

  1. Подсчет количества тегов
    от klg в разделе Master SCADA 3
    Ответов: 18
    Последнее сообщение: 24.01.2019, 15:23
  2. События из OPC HDA тегов
    от evg3798 в разделе Master SCADA 3
    Ответов: 5
    Последнее сообщение: 05.06.2014, 13:03
  3. Datarate 2.5+ Проблема с добавлением тегов ОРС-RS232
    от rvint в разделе Другие SCADA системы
    Ответов: 0
    Последнее сообщение: 07.06.2013, 10:19
  4. Ответов: 6
    Последнее сообщение: 13.06.2011, 12:32
  5. МВА и дискретные сигналы
    от SCF в разделе Мх110
    Ответов: 2
    Последнее сообщение: 21.04.2011, 12:46

Ваши права

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