В правой части, Битовые функции, после PutBit и ExtractВложение 81720
Вид для печати
В правой части, Битовые функции, после PutBit и ExtractВложение 81720
Да, я чуть позже увидел. Подскажите а в режиме симуляции, без ИПП не увидеть что на экране будет отображаться?
А только меня смущает, что в журнале мы для даты/время используем две 32-разрядные энергонезависимые переменные? Почему дату/время не хранить в одной переменной в формате UTC, а для вывода на экран уже как угодно преобразовывать?
Я думаю, для меня это сложно. Но я понял, о чём вы. Спасибо
Я сильно извиняюсь, такое впечатление что маньяк орудует, в смысле, максимальное количество экранов и элементов на холсте программы, лично моё мнение!
Вот мой вариант, все аварии просматриваются на одном экране при срабатывании аварий отображается общее их количество(верхняя строка, справа), слева в верхней строке выбирается номер аварии, если аварий больше нуля, чтобы перейти и просмотреть параметры аварии. Параметры аварии отображаются в верхней строке, в центре, это дата-время в формате: месяц, день, час, минута, по два разряда на каждый пункт!
В нижней строке расшифровывается тип аварии(по коду аварии), например авария ГЦН, применил динамический текст, вкратце, всё!
Вложение 81728
Вложение 81726
Вложение 81730
Короче, я примерно так это вижу!
В архиве сохраниться 31 последняя авария. Счётчик до 100 аварий. После просмотра аварий при возврате к нулевому событию(текущему состоянию) счётчик количества аварий сбрасывается.
Смотрите в симуляции, в проекте переход на экран аварии не делал, в смысле использовал вашу заготовку проекта и оставил как было!
Если что, сами переход добавите, вроде, уже делали!
А я тут не понял #_АВ и его назначение.
Если была авария с битом 8, а потом прилетела с битом 6, однако видел мы будем только с битом 8, нет?
Если Вам интересно как работает алгоритм могу пояснить: переменная "№_АВ"(номер, код аварии) при возникновении аварии появляется соответствующее значение номера бита, у товарища будет диапазон 1-12 на один цикл программы, при этом также на один цикл программы переменная "Событие" принимает значение логической "1" и код аварии с временем его возникновения пишется в стек!
Для просмотра аварий у нас имеется переменная "Номер события" При его значении "0" на экране аварий будет отображаться текущая дата-время(про формат уже писал) в центре верхней строки экрана аварий. При возникновении аварий, например кратковременный переход бита 8 в состояние "1", затем кратковременный переход бита "6" в состояние логической "1" - счётчик аварий(верхняя строка справа на экране аварий насчитает общее количество аварий равным 2. Можно сделать сигнализацию при количестве аварий больше "0" чтобы знать что были аварии или(и) сразу переход на экран аварий.
Короче, для просмотра последней аварии редактируем переменную номер события и задаём ей значение "1" - на экране аварий появятся дата-время аварии и её расшифровка(как подпишите), например " Авария ГЦК"!
Для просмотра второй аварии(более давней) редактируете переменную "Номер события" и задаёте ей значение "2", при этом на экране аварий появятся дата-время этой аварии и её расшифровка(как подпишите)!
При возврате переменной "Номер события", после просмотра всех интересующих аварий, значения "0" - счётчик событий(аварий) сбрасывается! Вот добавил сигнализацию наличия аварий и автоматический переход на экран аварий при возникновении аварий:
Вложение 81737
Вложение 81738
Как бы дальнейший алгоритм пофигу. По шагам выполните. Если это битовая маска аварий? ахинея там.
я вводил 4, 8, 4, 8, 12
kondor3000 последовательно вводите, и выполняйте по шагам. на выходе CD 3, 3, 3, вместо 3,2,3
с другими числами особо не проверял, но думаю будет примерно та же картина всегда. Вот попробовал 16, 8, 16, 8 В общем будет лажать там-сям.
еще раз - работает только при условии, что аварии не сбрасываются и не квитируются. Сделайте эмуляцию квитирования по любому биту и получите чушь на выходе.
з.ы. просто глаз резануло и начал тыкать по шагам при условии что аварии могут меняться. Не судите строго мой компьютер :)
Аварии должны идти как минимум через цикл программы, если в одном цикле более одной аварии - будет сбой, я уж не стал "прореживать" в смысле усложнять, как я понял, у товарища они идут не раньше чем через минуту, поэтому счёл что ему "потянет"!
А так если делать "на все случаи жизни" для правильной работы надо чтобы новые аварии поступали не ранее чем через цикл программы, впрочем, нетрудно будет и "проредить" поступающие аварии!
Это ограничения работы стека, для его работы и сдвига данных нужно изменение булевого сигнала, в смысле, если постоянно будет единица на входе сдвига - данные сдвигаться не будут!
Можно конечно использовать мой стек как матрицу памяти(он и так умеет работать), тогда в ячейки можно писать каждый цикл программы(не через цикл, как у стека), но тогда надо ещё счетчик ставить, чтобы адреса ячеек для записи менять! Короче, можно сделать как угодно, в смысле, но если товарищу это подойдёт, не вижу смысла усложнять!
И, я ранее, в одной из тем уже выкладывал макрос разруливания одновременного запуска компрессоров(насосов), он как раз подойдёт!
Вложение 81761
https://owen.ru/forum/showthread.php?t=26216&page=353
ну если будет общий сброс, наверное будет работать. Не проверял. Когда делал на ваших ПЗУ, то делал просто любое изменение с выводом кода аварии вместе со временем. Разбора кода на ПР не делал, биты уже выдергивались в scada.
Если делать на экран ПР, как-то даже не думал, как это сделать. Да и усложнять программу не видел смысла при наличии scada.
Так это вроде не сложно, в смысле, вставить(выдернуть) двух разрядное число в(из) 10-и разрядное(го), посмотрите как я в программе кодом аварии жонглировал!
Там вообще(в принципе) никакого сброса нет, так как он не нужен, данные пишутся в стек, при заполнении стека затираются самые старые, всё, здесь сбрасывать нечего!
Вообще, конечно могут несколько Битов придти одновременно.
Мигает потому, что каждый DC16bit выдает последовательно (с паузой между номерами) номера установленных бит в маске зафиксированных аварий.
Т.е журнал работает правильно даже если в данной временной отметке ОДНОВРЕМЕННО зафиксировано несколько аварий. Они ВСЕ последовательно будут выведены на экране в одной строке, если как и задумано, используется динамический текст
Вот немного подшаманил, теперь вроде должно работать без ограничений, чего скажите, в смысле, свой вариант не приготовили?
Вложение 81762
Один нюанс обнаружил, если срабатывает одновременно более одной аварии, то счётчик событий считает это как одно событие, чтобы все аварии считало обычный счётчик не подходит, наверно придётся ещё и счётчик на свой менять(у меня имеется подходящий на примете), пока будем считать, что так и задумано, так как у ТС вопрос о счётчике аварий не стоял, остальное вроде как фунциклирует!
Вот и счётчик поправил, чтобы считал по-человечьи:
Вложение 81765
Вложение 81764
Сергей0308 свой вариант даже не собирался :). точнее выкладывал его давно, для работы в паре со Scada. Другое не интересует в принципе.
Это я так, посмотрел, удивился, попробовал, не понравилось :)
з.ы. некогда мне, как сапожник без сапог. Сам вон помощи просил для управления тепловым насосом с учетом тока. Так руки не доходят дальше заниматься, работает из под палки :)
Подскажите, как можно сделать, чтобы пароль вводить по одной цифре. Я вроде начал но ОЛ не дает присвоить переменную двум выходам.
А зачем по одной то? Это же кучу лишних движений делать придётся.
А вообще, просто надо отправить собранный пароль на выход, после ввода последней цифры.
Это делается через SEL, управление выходом по сравнению последнего знака пароля с 0. Естественно последний знак должен быть больше 0.
по одной так понимаю по принципу выбора от 0 до 9 с переходом на следующую цифру, а не жать кнопку увеличения числа, чтобы получить от 0000 до 5638
Да, вы правильно поняли
я имел в виду что чтобы ввести пароль скажем 8511, кнопку придется жать очень долго. Проще же по одной цифре набирать
Вот на изменение последней цифры делайте импульс уже для окончательного ввода и проверки, сложив с предыдущими введенными цифрами.
При вводе первых цифр в программе умножайте на 1000, 100 и 10 перед сложением.
Про комбинацию кнопок ALT+стрелки вверх/вниз при вводе значений не слышали?
ALT+стрелки вверх/вниз - переход влево/вправо по разрядам вводимого числа
Вложение 81775
Шли вторые сутки, но нужное число еще не было набрано... :)
Так товарищ наверно пока сам не пострадает от этих паролей не уберёт их раз и навсегда, есть народная пословица: умный учится на чужих ошибках, а дурак на своих!
На одном предприятии где я работал часто "слетали" настройки приборов(ТРМ1 и т.п.), короче, приходим утром, мастер жалуется типа не могли работать на этой установке, хорошо, идём настраиваем и всё начинает работать, что характерно настройки всегда ночью сбиваются, когда нас нет, короче, надоело мне приборы настраивать, решил пароли наставить!
Тогда ещё хуже стало, то провод "перебьётся", то термопара сломается!
Приходим утром, но уже не тут-то было, то настройки настроить - 15 минут и всё готово, а тут ещё полдня будешь лазить по установке чтобы неисправность найти!
Короче, убрал я все пароли, лучше и быстрей настройки восстановить, чем неисправность искать! Как я предполагаю: народ ночь проспит, а под утро, чтобы не заругали, что-нибудь сломает, типа ничего не сделал, потому что установка сломалась, в основном это установки были по упаковке, а мастер видать за всеми не уследит или сам спит, надеюсь, интересная история?
Да уж, просто волосы дыбом встают, это ж надо так умудриться, в смысле, найти проблему где её нет и быть не может, в смысле, код(номер) аварии пишется в архив по фронту её возникновения, в смысле, в другие моменты времени даже смотреть туда абсолютно бессмысленно, это же надо такое придумать шифратор не то выдаёт, наверно сломался!
Сергей0308 унимательнее, Вася, унимательнее :) виновник не шифратор, а XOR, если есть СМЕНА аварийных битов, а не поступление новых без отключения старых.
И как кто-то подметил, проблема еще возникает при поступлении больше 1-ого бита в одном цикле.
а я последнее не смотрел. Это уже к автору хотелки.
Надо смотреть, что в архиве, а не на выходе шифратора!
На выходе шифратора "правильное" значение необходимо только в момент возникновения аварии(по фронту), какое там значение в остальной промежуток времени не имеет ни какого значения и смотреть туда не надо(смысла нет), короче уже повторяюсь!
Я не знаю, может это так сложно понять что "правильное" значение появляется всего на один цикл программы, но этого достаточно, чтобы добавить в архив, вроде кто-то Вам уже подобное писал!
1. я о первоначальной версии, где на входе XOR ничего нет писал, что в случае смены битов аварий (которые могут быть зафиксированы в одном цикле) и будет ошибка. Так же будет ошибкой, как кто-то заметил поступление просто двух битов в маске в одном цикле.
потом вариации не смотрел, потому что побоку... :)
а я не разбирался какой момент важен или какой не важен, я просто следовал битам :) даже скрин привел и пример. Если последовательно менять биты (числа 4 и 8) на выходе мы не получаем в пошаговом исполнении цифры 2, только на первом шаге, если начать с 4-ки. Если же начать с 8-ки, то на выходе шифратора всегда 3. А при попадании в цикле >1 бита на выходе шифратора всегда будет положение старшего бита.
если такого варианта вопрошающему достаточно то ок.
Мдя. Битва с квадратиками.
Получить маску новых битов - 2 строки ST
Выбрать куда-то все новые биты - 1 цикл в 3 строки ST