Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
С уважением, Ревака Юрий.
Инженер группы технической поддержки компании "ОВЕН"
e-mail: yu.revaka@owen.ru
Шаблон описания ошибки ПР или OL http://ftp-ow.owen.ru/softupdate/OWE...s/Shablon.docx
Видео уроки по ПР200 и OWEN Logic http://edu.owen.ru/series/pr200_rev/
Другие видеоролики по тематике ПР https://www.youtube.com/channel/UCj4...H5H3d_t6iDlQOQ
А в чем проблема?
Если результат арифметической операции в ПР получается отрицательным, то он будет представлен в ПР в дополнительном коде безо всяких макросов.
И если послать из ПР это результат по сети, то получатель увидит это число как отрицательное.
Захват-1.png
Захват-2.png
4294967295 = FFF FFF (Hex)
После "обрезания" в 16 битовой сетевой переменной РЕЗУЛЬТАТ останется FFFF(65535), это -1 в дополнительном коде для int16
Последний раз редактировалось petera; 02.02.2018 в 12:35.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Обрезание до 16 бит в сетевой переменной, не превращает DINT в INT, знак минус находится в 31 и 15 битах, соответственно, если считать с "0" и он обрежется!
Кроме того в ПР200 бывает это выводят на экран, да и в симуляторе проверять - мозги забивать лабудой, на мой взгляд, лучше флоат в инт преобразовать, что я и сделал несколько лет назад!
http://www.owen.ru/forum/showthread.php?t=13106&page=3
Конечно Ваше право убеждать мозг, что это не "4 миллиарда", а "минус"!
Последний раз редактировалось Сергей0308; 02.02.2018 в 22:29.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Для 32 битных отрицательных чисел в дополнительном коде от -32768 до -1 ВСЕ биты от 31 до 15 всегда в "1".
Значит, если значения DINT находятся в области допустимых чисел для INT16 ( от -32768 до 32767), то "обрезание" всегда будет корректным. Включая и 0 естественно.
"-32768" в ОЛ это 4294934528 == FFFF 8000 (знак минус в 31 бите), после обрезания в INT16 будет 8000 (знак минус в 15 бите)
0 == 0
32767 == 0000 7FFF, после обрезания таким и останется 7FFF
Последний раз редактировалось petera; 02.02.2018 в 15:59.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Доброй ночи,помогите пожалуйста разобраться!не работает макрос "Преобразование int16 в float (INT16)" и функция чтение бита (EXTRACT),скриншот-Проблема с INT16.jpg
Хватит дурью маяться, Вы каждый элемент из ОЛ будете проверять? Всё там прекрасно работает, просто для начала придумайте какую-нибудь имеющую смысл программу, всё!
Если хотите проверить макрос, можно его открыть для редактирования и проверить в симуляторе, даже без имеющей смысл программы!
Последний раз редактировалось Сергей0308; 10.03.2020 в 03:45.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Спасибо за ответ.