Да не лимиты режут, а число отображается как больше чем 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х - пойдет.....
На экране одно число, а в программе другое - пойдет...
Так и будем пользоваться.
Вы же написали что чем больше опыта тем больше программисты могут предусмотреть. возможно на экране будет лучше смотреться обычная переменная, а не сетевая. А сетевые пусть занимаются своим главным предназначением, передают данные по сети, для 32хразрядного значения их нужно будет две
Да уже все исказили, за время этой дискуссии. Мне эти 32 бита и не нужно было ни разу. Я про это вообще не спрашивал.
Суть в том , что при онлайн отладке в программе я вижу в переменной одно число, а на экран выводится другое. Переменная одна и та же. Где то надо навести порядок.
Повторяю, наведите у себя, отображайте на экране не сетевую переменную. Потому что если сетевую расширить до 32 разряда, на другом конце сети все равно придет регистр, получится у Вас в устройстве все красиво, а на другом, которое может программировать другой человек, будут такие же непонятки , отладка сложнее
Я же вам только что написал , что мне и не надо было никаких переменных в 32 разряда!!!
У меня изначально все переменные размером в регистр , а лоджик их отрабатывает как 32.
https://owen.ru/forum/showthread.php...l=1#post440596
переменная на картинке сетевая в один регистр =16 бит
тут не важно кто, а как. Кто читает документацию тот знает об особенностях Вложение 76956
Я все эти особенности знаю и понимаю.
Вы так и не поняли суть моего замечания в начале всей беседы.
Еще раз:
при онлайн отладке сетевая переменная в программе может отрабатывать значения до ширины 32 бита, при этом эта же переменная на экране ПР отображается урезанной до ширины 16 бит.
Может возникнуть ситуация когда программа внутри работает по одним значениям, а пользователь видит другие значения( из младшего слова от 32 бит)
Мой запрос простой:
сделать хотя бы разрядность отображения поля всегда в 32 бита. Это будет универсально и всегда отработает корректно на всех переменных и сетевых и обычных.
так как это совмещается, если программист знает особенности и позволяет пользователю видеть не то что нужно? Вас кто то за руку держит и не дает добавить внутреннюю переменную для отображения на экране
как у Вас всё просто, Вы просчитали какие проблемы могут быть из-за этого или Ваша задача только генерировать вопросики а остальные пусть работают пока солнце высоко
На данный момент это программисты лоджик позволили мне как пользователю видеть не то что нужно.
Я понимаю что происходит , но хотел сгладить данный момент, с пользой для всех
Да просчитал. Проблема есть сейчас, а если подправить то будет лучше.
ну как лучше, в каком месте Вы хотите что оставалось 32-разрядное значение Вложение 76961
Если считаете что значение перед входом в сетевую переменную это и есть сама сетевая переменная то это не так, в панель и в сеть уйдет действительное значение переменной после неявного преобразования, на скрине правая часть
Я про то что лимит на ввод не должен влиять на лимит отображения поля.
Поле всегда могло бы показать и 16 и 32 бита.
Вложение 76962
Если я правильно понимаю , процессор ПРки 32 битный, из-за этого одна переменная в любом случае занимает 32 бита.
Именно поэтому и возникает коллизия с отображением. Мы складываем 16х регистр в 32х переменную.
Я думаю что и для экранного поля исходно используется также переменная в 32 бита. Поэтому экономии никакой не будет.
Наоборот программа упростится:)
тогда по Вашей логике поле уже 32разрядное и отображется всё равно не больше 65535. Вам придется признать что переменная сетевого интерфейса привязана к регистру протокола модбас а не к разрядности процессора. Не нравится, вместо плк берите МК и творите что душе угодно
ЗЫ хотя можно и в ОЛ придумывать разные штуки, как на видео, было бы воображение и/или память
Совершенно верно. Надо это лимит и убрать, чтобы максималка была всегда
Это вам надо признать , что разрядность сетевой переменной , привязана к разрядности процессора 32х. И в программе она спокойно принимает значения более 65535.
Мне ПР нравится, хочу им пользоваться и творить на нем!
Вложение 76966
Счетчик выдает результат в переменную которая привязана к стандартному регистру одинарному.
https://owen.ru/forum/showthread.php...l=1#post440674 этот пост Вы проигнорировали, скрин и после описание, ну ок
День добрый, хотел бы задать вопрос, при попытке юстировать аналоговый вход ПР200 отправила такой код ошибки. Кто-то сталкивался с такой ошибкой? Если да, то подскажите что можно сделать для устранения ошибки. Заранее спасибоВложение 77063
Попробуйте юстировку на других сопротивлениях. скорее всего получается слишком большой коэффициент коррекции.
После появления функционала изображений на экране ПР205 возникло несколько вопросов.
1. Все изображения bmp можно оптимизировать по размерам без потери качества при помощи пакета FileOptimizer. Соотношение размеров при этом 30 кБайт исходного bmp к 2,5 кБайт сжатого оптимизированного. Есть ли смысл перед загрузкой в проект сжимать изображение или внутри оно будет храниться в собственном формате и в итоге сжатие не повлияет на размеры проекта и на другие характеристики вывода (скорость) и заполненности памяти ОЗУ визуализации?
2. Ещё не скачал и не попробовал новую версию OwenLogic - поэтому вопрос - будет ли OwenLogic воспринимать эти оптимизированные файлы (знаю, что не все панели оператора могут их воспринять)?
Не пробовал новую версию, т.к. сейчас завершаю работу над проектом и боюсь ошибок от нововведений, поэтому пользуюсь устойчиво хорошей предпоследней версией, но скоро конечно же обновлюсь.
Получается, что всё хранится в собственном формате (возможно, совпадающем с существующим), который не использует сжатие.
Т.е. предварительная оптимизация файла бесполезна...
Думаю, это несколько избыточно...
Разве, что возможный поиск ошибки при помощи онлайн отладки вынуждает.
Согласен, справедливо.
Но, может, кто-то уже придумал другой способ или систему правил снижения объёмов памяти на элемент, чтобы отодвинуть неизбежную перспективу ограничения по памяти самого нагруженного экрана. Смысл то и неуспешного предложения оптимизации изображения в этом.
Конечно, эксперимент с заменой на мнемосхеме первого экрана десятка линий и нескольких квадратов/кругов на изображение обязательно проведу и посмотрю на поведение ОЗУ (сейчас около 88%).
Экспорт переменных в cvs файл есть , а ИМПОРТ из него не нашёл , подскажите где искать ! ОЛ - Версия 2.7.350.0
Пока нигдее. Импорт не сделали.
Когда снята галочка "энергонезависимость" в переменной то в отладчике не выводиться её реальное значение , а отображается 0 серым. может поправите или я не так что-то делаю ?
Вложение 77339
ОЛ Версия 2.7.350.0