Да не лимиты режут, а число отображается как больше чем 65535. Вот что у вас происходит 1 Отображения числа.jpg Отображается младший регистр из 2, так как в Лоджике нет 16 битного WORD (UINT), а только 32 битное UDINT (DWORD)
Да не лимиты режут, а число отображается как больше чем 65535. Вот что у вас происходит 1 Отображения числа.jpg Отображается младший регистр из 2, так как в Лоджике нет 16 битного WORD (UINT), а только 32 битное UDINT (DWORD)
Последний раз редактировалось kondor3000; 30.06.2024 в 12:46.
Коллеги, я это все понимаю , но
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 - это уже забота программиста
Последний раз редактировалось Dimensy; 30.06.2024 в 15:16.
3000.PNG
То что 16 битная переменная ведет себя как 32х - пойдет.....
На экране одно число, а в программе другое - пойдет...
Так и будем пользоваться.
Последний раз редактировалось Asu$Nick; 30.06.2024 в 17:34.