Просмотр полной версии : Счетный механизм
Задача: В печь укладываются по 1 заготовке, которые передвигаются по печи, и на выходе так же по одной выталкиваются. Заготовок на ложементах в печи должно быть не более 10 штук. После того как заготовка попала на первый ложемент происходит ее передвижение на второй ложемент для загрузки следующей заготовки. Так все десять загружаются. Когда выгрузится 10-я заготовка в печь может быть загружена еще заготовка, на первое место. Так последовательно с разными интервалами загружаются/выгружаются заготовки. Перемещение в печи одновременное порядок и расстояние между заготовками сохраняется. Но возможны пропуски между заготовками (11111011111). Отображение позиций с помощью ряда ламп (10 штук), то есть, где есть заготовка в этой позиции горит лампа.
Как собрать это на ПР200 не соображу? Нужна помощь. Пробовал с помощью сдвигового регистра, в целое, а потом разложить целое на биты - не пошло.
kondor3000
02.09.2025, 16:06
Задача: В печь укладываются по 1 заготовке, которые передвигаются по печи, и на выходе так же по одной выталкиваются. Заготовок на ложементах в печи должно быть не более 10 штук. После того как заготовка попала на первый ложемент происходит ее передвижение на второй ложемент для загрузки следующей заготовки. Так все десять загружаются. Когда выгрузится 10-я заготовка в печь может быть загружена еще заготовка, на первое место. Так последовательно с разными интервалами загружаются/выгружаются заготовки. Перемещение в печи одновременное порядок и расстояние между заготовками сохраняется. Но возможны пропуски между заготовками (11111011111). Отображение позиций с помощью ряда ламп (10 штук), то есть, где есть заготовка в этой позиции горит лампа.
Как собрать это на ПР200 не соображу? Нужна помощь. Пробовал с помощью сдвигового регистра, в целое, а потом разложить целое на биты - не пошло.
Упаковка и распаковка бит из маски, битовые выходы, ваша последовательность, 85544
Маска - число для передачи бит в панель. В одном регистре можно упаковать до 16 бит. Можно и на ST, через точку.
Вариант 1:
85547
function_block FIFO10_
var_input
IN, C : bool; // Наличие заготовки и сигнал сдвига
end_var
var_output
Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10 : bool;
end_var
var
Q : udint; // Стек
rt : SYS.RTRIG; // Фиксатор сдвига
end_var
rt(I:=C); // Фиксируем сдвиг по фронту сигнала C
if rt.Q then
Q := shl(Q, 1); Q.0 := IN; // Сдвиг и фиксация заготовки
end_if
Q1 := Q.0; Q2 := Q.1; Q3 := Q.2; Q4 := Q.3; Q5 := Q.4; Q6 := Q.5; Q7 := Q.6; Q8 := Q.7; Q9 := Q.8; Q10 := Q.9;
end_function_block
С заталкиванием заготовки в печь в 1-у позицию (и перемещение), вроде, разобрался.
Но остается второй вопрос: теперь, когда заготовки прошли 10 позиций(прогрелись), необходимо из 10-й позиции (там два шибера открываются на наружных стенках печи) вытолкнуть заготовку из печи и снова переместить оставшиеся заготовки в сторону 10-й. Задача , вроде, та ж, но как совместить выход с первого и второго процесса (далее на выходы ПР), не пойму?
85575
Вариант 2:
85585
function_block FIFO10_
var_input
PUSH, POP, SH : bool; // Втолнуть, вытолкнуть, сдвинуть очередь
end_var
var_output
Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10 : bool;
end_var
var
Q : udint; // Стек
rtPUSH, rtPOP, rtSH : SYS.RTRIG; // Фиксатор кнопок
end_var
rtPUSH(I:=PUSH); rtPOP(I:=POP); rtSH(I:=SH);
if rtPUSH.Q then Q.0 := TRUE; end_if
if rtPOP.Q then Q.9 := FALSE; end_if
if rtSH.Q then Q := shl(Q, 1); end_if
Q1 := Q.0; Q2 := Q.1; Q3 := Q.2; Q4 := Q.3; Q5 := Q.4; Q6 := Q.5; Q7 := Q.6; Q8 := Q.7; Q9 := Q.8; Q10 := Q.9;
end_function_block
Ну или:
85589
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot