1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Simatic. Как в FB обратиться к биту в стат. параметре?

PLC, прочие контроллеры, промышленные компьютеры, операторские панели
Ответить

Автор темы
Welder
здесь недавно
здесь недавно
Сообщения: 91
Зарегистрирован: 02 мар 2014, 21:02
Имя: Роберт
Страна: Казань
город/регион: Республика Татарстан
Благодарил (а): 9 раз
Поблагодарили: 11 раз

Simatic. Как в FB обратиться к биту в стат. параметре?

Сообщение Welder »

В FB есть статический параметр (переменная) с типом данных WORD и находится она по адресу 0. Как мне в программе обратиться к биту 0.1?

Решил проблему так: Просто в "н.о. контакте" (В LAD'e) в поле адреса вбил DIX 0.1. Всё прекрасно работает. Но мне кажется, что есть более элегантный способ. Как быть если мне например нужно этот адрес как нибудь назвать? Не очень то удобно использовать абсолютный адрес, а выбирать адрес при объявлении параметров в FB нельзя.

Помогите пожалуйста! Курс Simatica читал, там такого нет + другие курсы по Симатик читал тоже нет (ну есть, используя этот способ :))
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 27 раз
Поблагодарили: 155 раз

Re: Simatic. Как в FB обратиться к биту в стат. параметре?

Сообщение aranea »

если FB на SCL то есть такой способ

Код: Выделить всё

VAR
    OP_dwCmdPLC     : DWORD := 16#0;                     // Operator Commands in PLC format
    OP_abyCmdPLC AT OP_dwCmdPLC : ARRAY [0..3]  OF BYTE; // look at plc command byte-wise
    OP_abCmdPLC  AT OP_dwCmdPLC : ARRAY [0..31] OF BOOL; // look at plc command bit-wise
END_VAR

BEGIN

OP_abCmdPLC[0] := ...;
а так у вас в STAT находится WORD, а обращаетесь к нему по битам
зачем он там? ни входной, ни выходной
сделайте последовательность битов BOOL
если их надо куда-то кучей передать сделайте структуру (на LAD/FBD/SCL)

Код: Выделить всё

VAR
    Data : STRUCT
        bit_00              : BOOL;     // 
        bit_01              : BOOL;     // 
        bit_02              : BOOL;     // 
        bit_03              : BOOL;     // 
        bit_04              : BOOL;     // 
        bit_05              : BOOL;     // 
        bit_06              : BOOL;     // 
        bit_07              : BOOL;     // 
    END_STRUCT;
END_VAR

BEGIN

Data.bit_00 := ...;
Изображение

Автор темы
Welder
здесь недавно
здесь недавно
Сообщения: 91
Зарегистрирован: 02 мар 2014, 21:02
Имя: Роберт
Страна: Казань
город/регион: Республика Татарстан
Благодарил (а): 9 раз
Поблагодарили: 11 раз

Re: Simatic. Как в FB обратиться к биту в стат. параметре?

Сообщение Welder »

Не SCL-ом не понимаю. LAD-ом пользуюсь.
А как структурой пользоваться? Помойму с ней в общем работать нельзя, только с отдельными элементами (как и с массивом). Например у меня есть Сдвиг (SHL_W) и мне нужно считать значения с одного определённого бита в переменной которая сдвинулась - Например в байте со значениями 01001100 сдвинули всё в право и мне нужно знать как изменился 3 бит. До сдвига он был "0" после сдвига "1". Понятно, что байт весь разделится на два (если бы например там было число) но мне это не нужно, нужен только бит и всё. Этот сдвиг работает только с WORD, DWORD и INT. INT мне не нужен, DWORD избыточен.
aranea писал(а): а так у вас в STAT находится WORD, а обращаетесь к нему по битам
зачем он там? ни входной, ни выходной
Это внутренние переменные, нужны только внутри программы. Пока учусь. Можно было в TEMP сделать, но пока не особо понимаю как локальная память работает, поэтому решил прописать в STAT чтоб наверняка. Программа учебная, так что не критично. Тем более в STAT одна переменная уже есть с начальными значениями.
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 27 раз
Поблагодарили: 155 раз

Re: Simatic. Как в FB обратиться к биту в стат. параметре?

Сообщение aranea »

если программа учебная, можете делать что угодно и как угодно =)
но если писать блок управления допустим приводом допустим по profibus, то слово управления содержит комбинацию битов, которую не надо сдвигать, но для наглядности ее можно разложить по битам и словам и формировать команды и задание в явном виде, что очень удобно делать с помощью структуры

выражение OP_abCmdPLC AT OP_dwCmdPLC : ARRAY [0..31] OF BOOL; удобно при упаковке битовых тегов в слово/двойное слово, для экономии кол-ва тегов на скаду допустим

имхо
Изображение

Автор темы
Welder
здесь недавно
здесь недавно
Сообщения: 91
Зарегистрирован: 02 мар 2014, 21:02
Имя: Роберт
Страна: Казань
город/регион: Республика Татарстан
Благодарил (а): 9 раз
Поблагодарили: 11 раз

Re: Simatic. Как в FB обратиться к биту в стат. параметре?

Сообщение Welder »

Я понимаю, что удобно пользоваться структурой/массивом. Но как это сделать LAD/FBD? Учитывая, что полностью ей пользоваться нельзя, только отдельными элементами.

Например есть массив из 8 битов, как его сдвинуть в LAD/FBD? Не как :) Можно только к отдельным элементам обращаться, а в общем нельзя. Тоже самое и со структурой.
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 27 раз
Поблагодарили: 155 раз

Re: Simatic. Как в FB обратиться к биту в стат. параметре?

Сообщение aranea »

сделайте BLKMOV структуры в TEMP переменную типа WORD, сдвигайте его куда хотите, потом BLKMOV обратно в структуру

опишите задачу
Изображение

Автор темы
Welder
здесь недавно
здесь недавно
Сообщения: 91
Зарегистрирован: 02 мар 2014, 21:02
Имя: Роберт
Страна: Казань
город/регион: Республика Татарстан
Благодарил (а): 9 раз
Поблагодарили: 11 раз

Re: Simatic. Как в FB обратиться к биту в стат. параметре?

Сообщение Welder »

Вообщем есть учебное оборудование с конвейером, у конвейера рядом есть скат куда падают детали. На скат детали падают с помощью механизма на пневмоцилиндре - на него просто нужно подать дискретный сигнал и он выдвинется. В начале ската есть набор датчиков - два оптических датчика: 1) определяет просто наличек детали 2) определяет красную деталь; и есть ещё один индуктивный датчик - определяет металлические детали. Все датчики выдают дискретные сигналы. Детали подаются по одному. Всего три вида деталей - красные, чёрные и металлические. Детали нужны поместить в определённом порядке на скат например:
1) Чёрная.
2) Красная.
3) Чёрная.
4) Металлическая.
Я написал универсальный блок для таких задач. Программу FB1 прикладываю. Она закоментина и в ней всё более или менее понятно. Работа заключается в следующим: Есть определённый байт "ключ" в котором написано какие детали каким номером должны быть, но тут ограничение можно описать только для детали одного цвета (хотя это даже плюс, программа более универсальна). Например байт "ключ" для красной детали 0100 0000 т.е. красная деталь должна быть на втором месте (естественно количество деталей на скаты мы считаем). Чтоб как то этот "ключ" использовать ввёл "шагающий" байт который всегда имеет вид 1000 0000. В начале этот байт сдвигает вправо свою единицу на количество деталей на скате. Затем этот сдвинутый "шагающий байт" поразрядный сравнивается с "ключом" и записывается в байт "результата". Этот байт "результата" смещается [/b]влево[/b] на количество деталей на скате - результат работы программы (подходит/не подходит) хранится в первом бите "результата" и используется для управления пневмоцилиндра.(подать деталь или нет)
Единственное тут нужно вбить "ключи" для трёх видов деталей + количество деталей на скате в WORD (сделал для универсальности). Ну это просто, учитывая, что на скат помещаются всего 5 деталей, вбиваем их в какой нибудь DB и всё. Потом вызываем блоки FB при появлении определённой деталей. Из блока выводится результат в BOOL (подходит или нет) который можно использовать как угодно.

Как по мне. Здесь проще просто некуда.

Кстати вот тут-то и проблема с байтом "результата". Как отдельно использовать его первый бит?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 27 раз
Поблагодарили: 155 раз

Re: Simatic. Как в FB обратиться к биту в стат. параметре?

Сообщение aranea »

решений может быть много, я бы сходу сделал массив INT
1-красный
2-черный
3-металл
порядок деталей задавался бы заполнением этого массива: 2, 1, 2, 3
потом счетчик деталей=индексу массива - проверка равенства = скат

как обращаться к биту я уже описывал, тоже много способов
за DIX 0.1 вас никто не ругал же?
Изображение

Автор темы
Welder
здесь недавно
здесь недавно
Сообщения: 91
Зарегистрирован: 02 мар 2014, 21:02
Имя: Роберт
Страна: Казань
город/регион: Республика Татарстан
Благодарил (а): 9 раз
Поблагодарили: 11 раз

Re: Simatic. Как в FB обратиться к биту в стат. параметре?

Сообщение Welder »

Много способов в SCL (я так и не понял ваш пример, учить SCL нужно), а LAD/FBD?

Пока не кому не показывал :) Я сам понимаю, что так делать лучше не стоит. Но программа работает безошибочно - уже много раз тестировал. Она будет работать без ошибок т.к. в DI-регистре всегда открыт один блок данных.
Ответить

Вернуться в «Средний уровень автоматизации (управляющий)»