Segnetics

Вернуться   Segnetics > Форум Segnetics > Вопросы о программировании

Вопросы о программировании Вопросы, касающиеся программирования на FBD

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2023, 11:07   #1
DmitryT
Новичок
 
Регистрация: Feb 2023
Сообщения: 8
Благодарил(а): 2 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию перевод знакового целого в беззнаковое

Добрый день! Столкнулся с в вопросом как в программе SMLogix сделать из знакового real в беззнаковое int. Сначала reail-int, int-abs, потом не нашел как. Подскажите, пжл.
DmitryT вне форума   Ответить с цитированием
Старый 17.02.2023, 11:12   #2
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 157
Благодарил(а): 240 раз(а)
Поблагодарили: 165 раз(а) в 157 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Цитата:
Сообщение от DmitryT Посмотреть сообщение
Добрый день! Столкнулся с в вопросом как в программе SMLogix сделать из знакового real в беззнаковое int. Сначала reail-int, int-abs, потом не нашел как. Подскажите, пжл.
а со знаком что делать собираетесь, просто отбрасывать? тогда так

ABS(real) --- real->int
но на выходе будет не совсем uint, а половина обычного int
если нужен честный uint на все 16бит, то придётся всё делать через лонг, но выходе будет лонг. так пойдёт?


__________________
C уважением, LordN
LordN сейчас на форуме   Ответить с цитированием
Благодарность от:
Старый 17.02.2023, 11:15   #3
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Цитата:
Сообщение от LordN Посмотреть сообщение
если нужен честный uint на все 16бит, то придётся всё делать через лонг, но выходе будет лонг. так пойдёт?
На самом деле, если выводить в модбас, то в младшем регистре лонга будет честный uint. Т.е. не читать старший регистр и всё.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Благодарность от:
Старый 17.02.2023, 11:52   #4
DmitryT
Новичок
 
Регистрация: Feb 2023
Сообщения: 8
Благодарил(а): 2 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Да, вывод на Modbus потом есть. Т.е., ABS(real) --- real->int будет достаточно?
DmitryT вне форума   Ответить с цитированием
Старый 17.02.2023, 11:57   #5
ATS
Senior Member
 
Регистрация: Aug 2013
Сообщения: 3 784
Благодарил(а): 12 раз(а)
Поблагодарили: 194 раз(а) в 190 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Цитата:
Сообщение от DmitryT Посмотреть сообщение
Т.е., ABS(real) --- real->int будет достаточно?
Ну real 123456,7 правильно в int запихнуть не получится никак.

Поэтому long будет лучше. А домножив real на соточку можно и дробную часть в лонге при передаче не совсем потерять.

Вопрос нужно ли это делать на стороне контроллера.


__________________
Не являюсь сотрудником Segnetics !!!

Последний раз редактировалось ATS, 17.02.2023 в 12:08
ATS вне форума   Ответить с цитированием
Старый 17.02.2023, 11:58   #6
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Цитата:
Сообщение от DmitryT Посмотреть сообщение
Да, вывод на Modbus потом есть. Т.е., ABS(real) --- real->int будет достаточно?
ABS не нужен, т.к. данные изначально должны быть в беззнаковой форме и правильной разрядности. Просто real->long и считывать младший регистр.

Ну либо у вас всё же несколько иная задача, которую вы пытаетесь решить вот таким вот странным способом.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 17.02.2023, 12:03   #7
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 157
Благодарил(а): 240 раз(а)
Поблагодарили: 165 раз(а) в 157 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

если модбас и цель не сыканомить два байта, то и отправлять как есть, реал.


__________________
C уважением, LordN
LordN сейчас на форуме   Ответить с цитированием
Старый 17.02.2023, 12:27   #8
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Цитата:
Сообщение от LordN Посмотреть сообщение
если модбас и цель не сыканомить два байта, то и отправлять как есть, реал.
У меня подозрение, что на той стороне какой-то девайс, работающий жёстко в парадигме модбаса, т.е. читающий регистры именно как регистры (16-разрядное число). А человек по наивности думает, что простой перевод из real в uint как-то поможет в деле правильной передачи температуры.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 17.02.2023, 12:39   #9
DmitryT
Новичок
 
Регистрация: Feb 2023
Сообщения: 8
Благодарил(а): 2 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Цитата:
Сообщение от Arsie Посмотреть сообщение
ABS не нужен, т.к. данные изначально должны быть в беззнаковой форме и правильной разрядности. Просто real->long и считывать младший регистр.

Ну либо у вас всё же несколько иная задача, которую вы пытаетесь решить вот таким вот странным способом.
Задача вывести показания влажности с Puxel на Z031. А влажность на Z031 должна выводиться как uint.
DmitryT вне форума   Ответить с цитированием
Старый 17.02.2023, 12:45   #10
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Цитата:
Сообщение от DmitryT Посмотреть сообщение
Задача вывести показания влажности с Puxel на Z031. А влажность на Z031 должна выводиться как uint.
А, ну тогда это рабочий способ. Тот, что я описал. Можно предварительно использовать блок MINMAX, ограничив real диапазоном 0..100. Типа, соломку подстелить.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Старый 17.02.2023, 13:07   #11
LordN
Senior Member
 
Регистрация: Dec 2007
Адрес: Томск
Сообщения: 4 157
Благодарил(а): 240 раз(а)
Поблагодарили: 165 раз(а) в 157 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Цитата:
Сообщение от Arsie Посмотреть сообщение
А, ну тогда это рабочий способ. Тот, что я описал. Можно предварительно использовать блок MINMAX, ограничив real диапазоном 0..100. Типа, соломку подстелить.
там косяк с биг-ендиан и прочим шиворот-навыротом может случиться. хотя хз..


лучше сразу потренироваться на крысах или прицепить макрос перепаковщик


__________________
C уважением, LordN
LordN сейчас на форуме   Ответить с цитированием
Старый 17.02.2023, 13:38   #12
ATS
Senior Member
 
Регистрация: Aug 2013
Сообщения: 3 784
Благодарил(а): 12 раз(а)
Поблагодарили: 194 раз(а) в 190 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Цитата:
Сообщение от DmitryT Посмотреть сообщение
Задача вывести показания влажности с Puxel на Z031. А влажность на Z031 должна выводиться как uint.
Ну в диапазоне от 0 до 32767 разницы в знаковом и беззнаковом int вообще не существует.


__________________
Не являюсь сотрудником Segnetics !!!
ATS вне форума   Ответить с цитированием
Старый 17.02.2023, 15:16   #13
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 086
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Цитата:
Сообщение от ATS Посмотреть сообщение
Ну в диапазоне от 0 до 32767 разницы в знаковом и беззнаковом int вообще не существует.
Кстати да, так что-то я к пятнице подустал, что забыл, что в данной задаче проблема на самом деле больше надуманная)


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie сейчас на форуме   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать свои сообщения

BB code is Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 18:52.


Версия vBulletin: 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Segnetics 2005 - 2024