Да не лимиты режут, а число отображается как больше чем 65535. Вот что у вас происходит Вложение 76949 Отображается младший регистр из 2, так как в Лоджике нет 16 битного WORD (UINT), а только 32 битное UDINT (DWORD)
Вид для печати
Да не лимиты режут, а число отображается как больше чем 65535. Вот что у вас происходит Вложение 76949 Отображается младший регистр из 2, так как в Лоджике нет 16 битного WORD (UINT), а только 32 битное UDINT (DWORD)
Коллеги, я это все понимаю , но
1. На экране переменная должна отображаться правильно - Достоверно
Для этого надо отображать на экране поля всегда в 32 битном виде, тогда все предложенные и вами и мной варианты будут видны корректно.
Зависимости от ширины переменной , не нужно вообще.
2. Лимит поля должен отрабатывать не на отображение , а на событие изменения данных.
3. В идеальном варианте , обработчик программы , должен автоматом обрезать заведомо 16 битное значение до 65535.
И в примере , когда пишем константу 70000 в одиночный регистр либо вообще не давать грузить такой код, либо динамически делать 70000->65535
Тоже самое в примере со счетчиком, который сетевая переменная. Он должен досчитать до 65535 и остановится на этом.
Тогда все везде будет по людски, и никто не ошибется.
Я писал не про вас, а о поведении счетчика "в примере со счетчиком, который сетевая переменная. Он должен досчитать до 65535 и остановится на этом."
По поводу ошибок.
Создавая программы в Лоджике , я должен предусмотреть , как программист, все возможные ситуации которые может создать оператор. Чем более профессиональный программист , тем больше
ситуаций он может просчитать, выставить лимиты, защиты от дурака и блокировки.
Те же правила существуют и для программистов Лоджика, они на своем уровне занимаются тем же. И если суть проблемы ясна, почему бы не сделать лучше?
Зачем отображать в 32 битном виде 16 битную переменную? Хотя, еще раз напишу, скорее всего сетевые переменные в Лоджике остаются 32 битными, но при чтении компилятор отдает только младшие 16 бит.
Лимит поля ограничивает вводимые с экрана значения. При выходе за предел вводимое число не обрезается, просто не происходит запись
Так он и обрезает. То что мы может в сетевую переменную записать 32 бита - забейте на это, потому что при чтении мы получим только младшие 16 бит. Считайте старший разряд мусорным.
Что касается счетчика, то досчитав до 65535, дальше у нас младший разряд обнуляется и начинает считать заново - все как в 16 битной переменной. На старший разряд, опять же, не обращаем внимание
Что касается "динамически делать 70000->65535". Где вы такое преобразование видели? В Codesys, например преобразование dint_to_int отбрасывает старшие 16 битов, и Лоджик делает то же самое. А ограничивать переменную - то ли до 65535, то ли до 100 - это уже забота программиста
Вложение 76953
То что 16 битная переменная ведет себя как 32х - пойдет.....
На экране одно число, а в программе другое - пойдет...
Так и будем пользоваться.