Последний раз редактировалось kondor3000; 14.10.2021 в 19:08.
petera, kondor3000, большое спасибо! Смогу добраться до проекта и попробовать не ранее, чем послезавтра.
... а сейчас пока напишу немного по теме, по памяти.
petera, я поставил эту галку в числе самых первых изменений в настройках в процессе своих опытов, и она стоит до сих пор. Где-то читал тут на форуме, что это как раз влияет на корректность отображения данных, и не только. Сейчас уже точно не вспомню, на что конкретно это влияло у меня, но помню, что стало лучше.)
Правда, у меня этот пункт называется немного по-другому, но это не важно, наверно, и зависит, как я понял, от версии конфигуратора.
Да, и эти настройки я тоже перепробовал. Остановился на обеих установленных галках, как наиболее оптимальном варианте.
При настройках по умолчанию был такой эффект: постепенно нагружал датчик, смотрел в онлайн-отладке ОЛ на содержимое соответствующей сетевой переменной с весов и видел там число, плавно увеличивающееся от (примерно) 2,7Е-35 до 3,5+Е37. И по достижении определённого усилия (около условных 12 кг на дисплее весового терминала. "Условных" - потому что откалибрована эта весовая система сейчас пока совершенно от балды, на условные 15 кг максимального веса) содержимое сетевой переменной обнулялось (появлялся "0") и, при дальнейшем увеличении нагрузки на весовой датчик, начинало расти по новой, от 2,7Е-35 до сигнала перегруза с терминала, т.е., циклично. Полагаю, что, если откалибровать систему на больший вес, чтобы не было сигнала перегруза, то эти циклы повторялись бы снова и снова, как раз из-за неправильного порядка следования старших/младших регистров/байт.
Все остальные варианты снятия/установки этих галок, кроме установок по умолчанию, обеспечивали линейность изменения сигнала по всему диапазону. Менялся только показатель степени.
На данный момент пользуюсь макросом SCALE из Менеджера компонентов ОЛ. Очень удобная штука. Позволяет конвертировать любой диапазон FLOATов в любой диапазон FLOATов же. И в онлайн-отладке я вижу, как он работает, т.е., чётко переводит данные с сетевой переменной весов (от 3,59Е-43 до 5,7Е-41) в число от 0 до 15 на своём выходе (в соответствии с его настройками и максимальным весом терминала), и это число через сетевую переменную уходит в панель на "цифровой дисплей". НО! Проблема в том, что показания на "цифровом дисплее" не соответствуют показаниям в сетевой переменной.
Более того - я могу в онлайн-отладке записать в эту сетевую переменную любое значение.
Пишу 0 - на "цифровом дисплее" панели тоже 0. Пишу 1 - на "цифровом дисплее" что-то типа 758439057 или 3,9Е+19 (при соответствующих настройках формата отображения DEC или FLOAT), например. Пишу 2 - на "цифровом дисплее" что-то типа 3584947822 или , например, 2,4Е-12...
Этого как раз добился. Линейно изменяется от - от 3,59Е-43 до 5,7Е-41 перед появлением сигнала перегруза. Завтра буду рыть в сторону настройки "цифрового дисплея" по Вашим советам и по образцу. Если у Вас работает, то и у меня должно заработать. Но мне кажется, я перепробовал ВСЕ настройки, какие только можно...
kondor3000, будут взвешиваться грузы массой 300-500 кг. Точность даже +- 1 кг (0,2-0,3%) устроила бы. А уж если было бы
то вообще, просто шикарно...
При настройках по умолчанию был такой эффект: постепенно нагружал датчик, смотрел в онлайн-отладке ОЛ на содержимое соответствующей сетевой переменной с весов и видел там число, плавно увеличивающееся от (примерно) 2,7Е-35 до 3,5+Е37. И по достижении определённого усилия (около условных 12 кг на дисплее весового терминала. "Условных" - потому что откалибрована эта весовая система сейчас пока совершенно от балды, на условные 15 кг максимального веса) содержимое сетевой переменной обнулялось (появлялся "0") и, при дальнейшем увеличении нагрузки на весовой датчик, начинало расти по новой, от 2,7Е-35 до сигнала перегруза с терминала, т.е., циклично. Полагаю, что, если откалибровать систему на больший вес, чтобы не было сигнала перегруза, то эти циклы повторялись бы снова и снова, как раз из-за неправильного порядка следования старших/младших регистров/байт.2,7Е-35 до 3,5+Е37 ???На данный момент пользуюсь макросом SCALE из Менеджера компонентов ОЛ. Очень удобная штука. Позволяет конвертировать любой диапазон FLOATов в любой диапазон FLOATов же. И в онлайн-отладке я вижу, как он работает, т.е., чётко переводит данные с сетевой переменной весов (от 3,59Е-43 до 5,7Е-41) в число от 0 до 15 на своём выходе (в соответствии с его настройками и максимальным весом терминала),
Я просто обалдел от таких чисел
И решил почитать руководство на терминал..
Однако, с чего Вы взяли, что вес у вас в формате с плавающей точкой?
Захват-01.png
Русскими буквами написано
Т.е. это формат DINT - целое со знакомТекущее значение веса (4 бита, включая символы знака, высший бит спереди)
и судя по всему - 19 регистр,
Захват-02.png
с фиксированной точкой
Так, что использование SCALE из Менеджера компонентов ОЛ для перевода с сетевой переменной весов (от 3,59Е-43 до 5,7Е-41) в число от 0 до 15
это чистый мазохизм.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Весь смысл в том, что вам надо расставить байты в правильной последовательности Float, для получения веса как на терминале, без всяких +-37 степени, если не получается правильно вывести вес в ПР, может получится правильно расставить байты в Панели. Проблема в том, что каждая передача по модбасу, опять переворачивает байты. Поэтому, может получится вывести правильный вес в самой панели. Пробуйте последовательно, убирать или ставить все возможные галки по одной. Опять же в ПЛК всё можно было бы сделать без проблем. Но пробуйте.
А вообще в вашем случае, лучше было сделать ПР мастером, что бы работали и галки в OWL.
Ну вот petera оказывается выяснил, что у вас там не Float вовсе, а вы сами себе проблему создали)))
Последний раз редактировалось kondor3000; 15.10.2021 в 22:31.
С точки зрения DINT, число 3,59Е-43 Очень похоже на ноль http://www.binaryconvert.com/result_...57069045052051SCALE из Менеджера компонентов ОЛ. Очень удобная штука. Позволяет конвертировать любой диапазон FLOATов в любой диапазон FLOATов же. И в онлайн-отладке я вижу, как он работает, т.е., чётко переводит данные с сетевой переменной весов (от 3,59Е-43 до 5,7Е-41) в число от 0 до 15 на своём выходе (в соответствии с его настройками и максимальным весом терминала),
Захват-03.png
или близко к нулю
здесь 4 HEX цифры 00 00 01 00, если предположить, что порядок байт другой то может быть и такой вариант прочтения 00 00 00 01
значение 5,7Е-41 трактовать пока нет смысла, "потому что откалибрована эта весовая система сейчас пока совершенно от балды, на условные 15 кг максимального веса"
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
petera, получается надо просто считать вес не флоатом, а целочисленной переменной и перевести её в DINT и выкинуть все скалеры. Целочисленная считается без переворота байт. А из 19 регистра считать смещение точки. Так?
Я плохо знаю как в Лоджике считываются целочисленные из 2 регистров. Вроде по описанию целочисленные это DWORD.
Последний раз редактировалось kondor3000; 15.10.2021 в 23:13.
Последний раз редактировалось petera; 15.10.2021 в 23:22.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Я вот это
Хоть убей, воспроизвести не могу...Более того - я могу в онлайн-отладке записать в эту сетевую переменную любое значение.
Пишу 0 - на "цифровом дисплее" панели тоже 0. Пишу 1 - на "цифровом дисплее" что-то типа 758439057 или 3,9Е+19 (при соответствующих настройках формата отображения DEC или FLOAT), например. Пишу 2 - на "цифровом дисплее" что-то типа 3584947822 или , например, 2,4Е-12...
Скрытый текст:
Еще раз адреса и в ПР и в панели должны быть четными и одинаковыми, без смещения, например, в ПР - 522, в панели 4х522 DWord
Ваш пример - В студию!
Последний раз редактировалось petera; 16.10.2021 в 00:48.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Чьорд побьери!(С)
Каналья!!(С)
Тысяча чертей!!!(С)
Всё заработало...
Теперь по порядку.
petera, я сразу оговорился, что воспроизвожу процесс по памяти
поэтому, наверно, не стоило Вам воспринимать эти числа буквально. Смысл упоминания мной этих чисел был лишь в том, чтобы показать, что индикация на дисплее сильно не соответствует содержимому переменной и при его изменении индикация изменяется совершенно хаотично. Что, теперь вижу, при кривых настройках, конечно же, неудивительно. И аналогичную ситуацию с десятичным форматом отображения в виде многозначного числа можно наблюдать на Вашем видео на левом верхнем дисплее.
А вот что касается отображения чисел в формате чисел с плавающей запятой, то тут, похоже, память меня совсем подвела.
Мне тоже не удалось воспроизвести описанную мной же ситуацию. К своему стыду, даже не знаю, откуда я это взял. Скорее всего, когда пробовал различные варианты, то наблюдал на цифровом дисплее такие числа, но при воздействии на тензодатчик, а не при принудительной записи значения в переменную. И что-то такое отложилось в памяти в виде каши. И перед написанием своего сообщения я ещё раз проверил проблему с отображением чисел в DECe, но не проверил в FLOATe, ибо уже не осталось моральных сил поменять настройку. Моя ошибка. И, вообще, моя ошибка в том, что нужно было пробовать все настройки по порядку, записывая, что сделал, а не так, как это делал я...
petera, приношу свои извинения за то, что ввёл Вас в заблуждение.
В итоге, сегодня с утра выяснилось (утро вечера мудренее), что я остановился всего лишь в шаге от победы, т.к., нужно было поменять в настройках отображения цифрового дисплея DEC на FLOAT, и всё стало отображаться корректно. Ума не приложу, как так получилось, что я это пропустил. Я был в полнейшей уверенности, что перепробовал все настройки и в панели, и в ПР-ке...
Дальше...
До сегодняшнего дня был уверен, что данные, занимающие 2 ячейки подряд, являются FLOATами, и никак иначе...
Для меня, при данном моём уровне познаний в сетях, протоколах и интерфейсах эта информация не совсем понятна. А вернее, совсем не понятна... Как запихать "текущее значение веса", да ещё "включая символы знака", всего в 4 бита (может, байта? опечатка?).
А о существовании на свете этого формата я впервые узнал только пару дней назад:
Поискал в мануале и справке от ОЛ, не нашёл. Только вскользь упоминается о том, что целочисленная переменная может занимать 2 регистра. Но мне от этой информации раньше было ни холодно, ни жарко, и как она может пригодиться мне на практике, я не знал. Теперь узнал..
Так и есть. Оно появляется сразу же, как только я начинаю воздействовать на датчик. Если он просто лежит на столе, то дисплей терминала показывает "-OFL" (недогрузка)
Вот эта информация всё расставила на свои места. Сделал в настройках этой переменной количество регистров 2, поменял на целочисленную, и вот оно - счастье. Теперь и данные с весов стали адекватные. При установленных обеих галках в настройках в ПР-ке "старшим регистром вперёд" и "старшим байтом вперёд" (как самые оптимальные) данные в переменной стали изменяться от 0 до (примерно) 40000 перед сигналом перегруза.
Догадываюсь, но всё равно спрошу: это из-за низкой точности при обработке такой маленькой величины?
А вообще, была надежда, что у меня просто не хватает здоровья создать голыми руками достаточное воздействие на датчик, который рассчитан на 1 тонну. И в реальных условиях, когда на весы поместили бы груз в несколько сотен кг, то эта величина стала бы побольше. И обработка такого диапазона уже была бы точнее...
kondor3000, мне бы дай бог, с этим разобраться))
До ПЛК пока не дорос, да и до кодесиса тоже. Хотя, не исключаю, что когда-нибудь и замахнусь.
Тогда ждите новых вопросов.
Так она и так мастер по отношению к терминалу (слейв к панели). И галки работают...
+100500...
petera, kondor3000, спасибо вам огромнейшее за помощь и поддержку!!! Не знаю, что бы я без вас делал...