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 125
Благодарил(а): 239 раз(а)
Поблагодарили: 161 раз(а) в 153 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Цитата
Сообщение от 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 020
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Цитата
Сообщение от 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 740
Благодарил(а): 12 раз(а)
Поблагодарили: 192 раз(а) в 188 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

Цитата
Сообщение от 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 020
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

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

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


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

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

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


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

Цитата
Сообщение от 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 020
Благодарил(а): 15 раз(а)
Поблагодарили: 655 раз(а) в 599 сообщениях
По умолчанию Ответ: перевод знакового целого в беззнаковое

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


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

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

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


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


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

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


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

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


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

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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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



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


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