Хорошо что не написали что в ОЛ плюс это минус, а минус это плюс, смысл какой?
Если что-то назвали чёрным, оно должно быть чёрным, иначе понятия попутаются чёрного и белого!
официальный тип данных в ОЛ - целочисленный, алиас в скобках можно посмотреть опять же в вики https://ru.wikipedia.org/wiki/%D0%A6...D%D1%8B%D1%85), про наличие знака упоминается с третьего абзаца, так что не ищите смысла где его нет
Про INT vs UINT действительно сомнительная штука. Даже то, что оно задокументировано не делает чести.
Если в ОЛ D-триггерах вам не нравится, что "железные D-триггеры всегда дают задержку, а ОЛ-Д-триггер срабатывает сразу", то так и пишите.
Вы же пишете, что "вот такая, мол, схема неправильно работает". Из этого тяжело понять, что имелось ввиду "сам по себе ФБ Д-триггера в ОЛ не соответствует обычному пониманию".
Вы опять меня не правильно поняли, мне всё нравится в ОЛ и что бы там не написали всё равно найдём ему правильное имя и разберёмся как оно работает, это наоборот добавляет какую-то изюминку! Но другому, кто не знаком с ОЛ, а знает как работает Д-триггер и другие привычные понятия придётся потратить гораздо больше времени на постижение азов ОЛ из-за таких "особенностей", это даже по вопросам видно!
В любом случае нужно потратить время на изучение ОЛ или прочтение темы форума,где это было сказано .Задержки нужны не только в д-триггерах ,но и стеках на сел ,везде где есть смена информации с привязкой ко времени одновременно в нескольких разрядах или регистрах .Нужно разделить по времени старое и новое значение (разнести по разным циклам) ,пока небыло линий задержки я ставил тон между разрядами, имитируя железо .
Сам принцип работы ПР подразумевает ,что все вычисления (действия) производятся в течении ОДНОГО цикла ПР. Ну нельзя же сделать изменения дважды в одном цикле .Даже генератор (инвертор с обратной связью) формирует 1 в течении одного цикла ,а потом 0 в следующем цикле .
Речь совсем не об этом, я во внутренности триггеров не лез, да и не важно как они устроены внутри, а как они работают! Вы же не смотрите как устроен например элемент 2И, Вам достаточно знать как он работает!
А так да там существует задержка распространения сигнала и например асинхронные счётчики дают "хвосты"(промежуточные состояния), поэтому и придумали синхронные счётчики, тоесть обвесили счётчик дополнительной логикой, зато сигнал на выходе всех разрядов появляется одновременно!
надо справочник по микросхемам найти и посмотреть, наверняка там есть задержки, так как d-trigger собран на элементарной базе и задержки там есть, ибо там транзисторы и прочее...
Вы по-русски скажите: через какое количество циклов ПР на выходе AND должен появляться ответ?
По-просту говоря, подали сигнал на оба входа AND, и вопрос в том, через какое количество тактов должен получиться результат на выходе?
А должна ли связь между блоками вносить задержку? Скажем, чем длиннее связь, тем дольше "идёт сигнал".
А через какое количество циклов ПР должно стабилизироваться значение на выходе SEL?
А через какое количество циклов ПР должно стабилизироваться значение на выходе RTRIG?
А через какое количество циклов ПР должно стабилизироваться значение на выходе DTRIG?
В любом железе есть задержки .Они в основном играют отрицательную роль в схемотехнике (Гонки) и как следствие "волосы" на выходе (очень короткие импульсы) .НО в регистрах на D-триггерах они полезны и дают возможность построения регистров сдвига ,тоесть играют положительную роль .Ибо каждый разряд сначала переписывает старые значения со входа D ,а уж потом,с задержкой на выход выдает новые значения ...Все логические элементы в одном цикле делают одно обновление - считывание входов ,операция ,выдача на выход ...и так по всем элементам в одном цикле от выхода ко входу
И обычно люди стараются повысить быстродействие устройств(счётчиков), а не задержки ввести!
Сергей0308 отличия микросхем от любого ПР(ПЛК) заключается в том, что части микросхем работают параллельно всегда.
Например микросхема с 4-мя ИЛИ, каждый элемент ИЛИ работает параллельно друг другу. В ПР(ПЛК) такого НИКОГДА не будет, пока в них стоит один процессор.
Я как-то делал какой-то trigger на Logo!, который по схемотехнике состоит из И, ИЛИ, НЕ, но в чистом виде как в справочнике получил шиш с маслом, пока не начал добавлять задержки....
Так что просто примите это как данность работы ПР(ПЛК), тут каждый элементик работает четко последовательно, даже код внутри D-trigger и любого другого элемента.
Ну почему. Принципиально возможно написать программу, однозначно обрабатывающую любые логические схемы из кучи элементов. Если их обработку вести по принципу работы самого ПР. Когда в начале цикла запоминаются все значения на входах элементов, потом расчитываются все состояния выходов исходя только из логики работы элемента, а в конце цикла записывается всё что насчитали на выходы.
Эквивалентно тому, что все внутренние связи заменить на "линии задержки" :)
Но действительно правильной "параллельной" работы всёравно не получится. :)
так я и написал, что замены микросхемам программно никогда не дождешься. Конечные выходы не самое главное бывает в программе.
Задумайтесь над тем, что является "принципом работы самого ПР".
Что туда создатели заложили, так оно и работает.
Сделать так, чтобы блок AND в ПР задерживал сигнал "на пол-такта", а блок DTRIG задерживал сигнал "на 2 такта" вообще никаких сложностей нет.
Сделать так, чтобы несколько блоков AND работали "одновременно" -- тоже никаких сложностей.
Можно сделать и так, чтобы от длины линии на схеме зависела задержка прохождения сигнала.
Будет ли это "прямо как реальная микросхема"? Вполне.
Но нужен ли реальным потребителям такой режим работы ОЛ-ПР?
Да никому такой режим не нужен, т.к. схемы будет составлять очень сложно. Придётся думать не только над самой схемой, но и придётся считать-учитывать задержки прохождения сигналов.
Для любителей эмуляции железа есть Verilog. Зачем превращать ОЛ в Verilog?
Я же написал как работает ПР.
Прочитал все входы, обработал по программе, записал результат на выходы. И снова по кругу.
Если составлять схемы из ПР как ФБ, то получится как будто все они соединены "линиями задержки"
Поставьте между входом и выходом ПР инвертор, и соедините их проводом.
Получится "генератор" с частотой, равной половинной частоте цикла.
"Железный" инвертор из любой цтфровой мс, с соединённым входом и выходом - полный аналог аналогового повторителя. Не будет он ничего генерировать - будет работать в режиме "усилителя" с коэффициентом усиления по напряжению 1(зато с огромным входным сопротивлением). Чтобы заставить его что-то генерировать, придётся ставить rc, lc и тому подобные "линии задержки", а точнее - фазосдвигающие цепочки.
Владимир Ситников вы когда нибудь настраивали компьютеры при помощи осцилографа ? знакомы с таким названием как ZX Spectrum ?
Просто так проще объяснить, когда у вас на выход попадают конечные сигналы а так же сигналы из середины схемы.
еще раз - НИКОГДА программа, работающая на одном процессоре не сможет выполнить эмуляцию работы микросхем сложного устройства.
На это способны только многопоточные чипсеты. Простой пример - синхронизация работы электронного зажигания в автомобиле с большими оборотами двигателя.
Вы просто не сможете это повторить на ПЛК с одним процессором. Даже если туда Intel воткнете...
Какие слова, какой типаж..
Вот именно эмуляцию можно на раз сделать, и проблем с этим никаких нет.
Иными словами, результат эмуляции будет повторять то, что вычисляют эти микросхемы.
Да, может оказаться, что "эмулятор" будет работать медленнее, чем реальное железо (ну, исходная схема выполняет вычисление за секунду, а эмулятору на это нужна минута), но именно сделать эмуляцию проблем вообще нет.
Не пойму каким образом связано электронное зажигание и невозможность это повторить на ПЛК с одним процессором.
ПЛК110М02 может реагировать на импульсы порядка 20 наносекунд. Неужели этого мало для какого-то "электронного зажигания"?
Ещё раз повторюсь, есть же сложившиеся понятия, как работает Д-триггер, ну придумали вы что-то похожее, работающее не совсем так, если у животных 4 ноги(лапы) это не значит, что их надо одинаково называть, короче можно назвать как-то иначе, например ДМ-триггер, подчёркивая эти различия в работе, если пользоваться их логикой, так одного слова достаточно в любом языке, что вводит некоторую путаницу на первых порах, капзап, похоже правильно сказал, что не надо искать смысла там где его нет, ну и зачем городить бессмыслицу???
Ну так, у Вас же претензии к D-триггеру. Хотя, он сам (триггер) работает как надо. :)
Не как мифический "DM", а как железный D.
А вот, чтобы из нескольких D составить регистр сдвига, тут уже Вам нужно знать разницу между "параллельной" работой "железных" триггерОВ, и их работой в среде ОЛ.
Если бы можно было задать нужный порядок расчёта элементов, то и линия задержки бы не понадобилась. Считай цепочку "с хвоста" (по входам D и С) - и всё.
А потом вторым проходом "с головы" по остальным входам (R и S).
Вот проверьте сами, мне смысла нет обманывать, сам столкнулся много лет назад и другие сталкивались, вопросы писали:
Вложение 32369
Вложение 32371
Как говорится, почувствуйте разницу!
Да причём тут "веришь - не веришь". Я не то что верю, я знаю, что верхняя часть работать не будет.
На входы С сигнал поступает одновременно, а триггеры считаются в порядке "от входа к выходу". То же самое, как если бы сигнал С пришёл вначале на 1 каскад, потом на второй, потом на 3й....
Можно было бы задать порядок расчёта триггеров (хотябы в порядке нумерации расчёт бы шёл), линии задержки не понадобились бы.
И?
Какие претензии к D-триггеру?
Триггер работает так же, как и описан D-триггер в Wikipedia.
Если вы пытались построить регистр сдвига на DTRIG и не учли, что все блоки в ОЛ выполняются "мгновенно, без задержек", то это ваши проблемы.
И не нужно насиловать программистов утверждениями "в ОЛ неправильные триггеры".
Всё в ОЛ правильно.
Точно так же можно собрать цепочку из AND-AND-AND-AND блоков и потом спрашивать: "а почему они сразу все вычисляются, хотя в железе последовательно"
Да, в случае с "беззнаковыми целыми" косяк. Но в DTRIG всё норм. Как описано, так работает, а описано так же, как в Wikipedia.
В том-то и проблема, что господин Ситников критиковал, что я мол без разбору везде где можно линии задержки втыкаю, и что если регистр не закольцовывать всё будет адекватно работать без линий задержки, во всяком случае, я его так понял, может и ошибся!
В реальном железе для создания регистра сдвига соединяют выход Д-триггера с D входом последующего непосредственно, без всяких устройств задержки сигнала
"Именно со следующим и в ОЛ можно соединить простой связью.
Но в вашей схеме есть как минимум 1 цикл, и тут ОЛ резонно требует линию задержки.
То, что вы её воткнули между D-триггерами это лишь ваш выбор. Можно было (и, скорее всего, логичнее было бы) и после них
Можете простой пример сделать на одном-двух-трёх Д-триггерах, на котором было бы видно, что "ОЛ работает не так"?
По-моему, ваш пример с цепочкой Д-триггеров лишь подтверждает то, что ОЛ работает верно (требует задержку), а вы не понимаете смысл этой самой задержки и ставите её куда попало. "
Хорошо что теперь другое говорит!
Вот как раз наоборот. В железе они работают параллельно, а в ОЛ цепочка "от входа к выходу" считается ПОСЛЕДОВАТЕЛЬНО.
В случае д-триггеров, соединённых последовательно, это означает ЗАДЕРЖКУ расчёта каждого следующего на время расчёта предыдущих. В самом цикле расчёта задержка, обусловленная последовательным расчётом, которой нет и не может быть в железе.
В ОЛ как минимум не учтено, что сам ОЛ может приводить к ситуациям, когда сигнал на д входе и на с входе изменяется ОДНОВРЕМЕННО, что и в железе привело бы к неоднозначной работе триггера.
Решить эту проблему можно не только линией задержки, но и доработав триггер, "привинтив" ему статическое свойство "приоритет входа". Т.е, какой вход обрабатывать первым в случае одновременного изменения уровней на входах.
Но и с линией задержки работает.
Да, действительно писал такие слова:
Да, в словах "ставите куда попало" переборщил.
Да, действительно, если нужен "регистр сдвига из Д-триггеров", то нужны промежуточные линии задержки между DTRIG'ами.
Тем не менее, поведение ОЛ верное и предсказуемое, а все слова "Д-триггер в ОЛ работает неправильно" безосновательны.
А так нормально?
Вложение 32372
Владимир Ситников бесполезно что-то объяснять человеку, который вместо паяльника с осцилой сразу лезет в Вики.....
На счет М02, сделайте зажигание на нем для своего авто и запишите видео, тогда разговор будет предметным.
Еще пример, вертикальную и горизонтальную развертки для видеосигнала повторите на ПЛК, если у вас вдруг авто нет.