Позвольте внести свои 5 копеек относительно ФБ упаковки :) . Если я правильно понял, то уже поднималось в этой теме: пользователь capzap в сообщении № 8 упомянул о биб-ке oscat и функции BYTE_TO_BITS. Однако BYTE_TO_BITS применима к 8-ми булевым переменным (автору темы для решения задачи необходимо минимум 12). Можно по аналогии забацать ФБ WORD_OF_BIT на ST:
Тело ФБ:
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 переменных). Использую подобный ФБ в задаче по контролю концевых выключателей задвижек. Если есть неточности, гуру, поправьте.
01.08.2016, 12:35
_Mikhail
Цитата:
Сообщение от Cool-russian
Позвольте внести свои 5 копеек относительно ФБ упаковки :) . Если я правильно понял, то уже поднималось в этой теме: пользователь capzap в сообщении № 8 упомянул о биб-ке oscat и функции BYTE_TO_BITS. Однако BYTE_TO_BITS применима к 8-ми булевым переменным (автору темы для решения задачи необходимо минимум 12). Можно по аналогии забацать ФБ WORD_OF_BIT на ST:
Тело ФБ:
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;
01.08.2016, 13:28
Cool-russian
Цитата:
Сообщение от _Mikhail
А зачем так сложно. Ведь можно гораздо проще.
применительно к Вашему варианту:
out.0:=B0;
out.1:=B1;
out.2:=B2;
.............
out.15:=B15;
_Mikhail, если проект написан на CFC, то алгоритм наглядным получается. Ну и по-битно обращаться к переменной через точку (как Вы указали) вроде можно только в ST (если я конечно не упустил что-то в матчасти :) ). Ну и это так сказать одно из решений (как по-мне, так удобное).
01.08.2016, 13:46
_Mikhail
Вложений: 1
Цитата:
Сообщение от Cool-russian
_Mikhail, если проект написан на CFC, то алгоритм наглядным получается. Ну и по-битно обращаться к переменной через точку (как Вы указали) вроде можно только в ST (если я конечно не упустил что-то в матчасти :) ). Ну и это так сказать одно из решений (как по-мне, так удобное).
вот эт лестницы :) . Но ФБ или функция уже стала делом привычки :) . Спасибо за совет, будем осваивать и применять.
02.08.2016, 12:09
Николаев Андрей
Так же в Util.lib есть блоки Pack и Unpack.
02.08.2016, 23:01
Сергей Мих
Тоже самое предлагал в #18, но Им хочется более изощренным методом с выкрутасами, правками, переправками. Ну, хозяин- Барин. Что хочет то и выбирает.
Паралельно еще одна ветка на эту-же тему. http://www.owen.ru/forum/showthread.php?t=24918
я просто записывал в теле программы в temp.x биты а в конце цикла (программы) делал temp -> peremennaya_modbus в конфигураторе.
В начале программы соответственно peremennaya_mobus -> temp и в нужных местах программы использовал temp.x