Язык макросов . Преобразование типов.

Работа с панелями оператора Weintek - подключение, программирование, совмещение с ПЛК

Модераторы: kiv, 8bit, VanMo

Язык макросов . Преобразование типов.

Сообщение IBAH » 11 фев 2023, 15:40

Вопрос как? в описании про преобразование типов в операциях ни слова. Операции приведения типа ваще нет. Про правила приведения ни слова.

Методом проб и ошибок нашел, что вразумительное приведение можно сделать через присваивание.

Код: Выделить всё
//Коррекция показаний датчиков
int Dav, Kor0, Kor1
short DavS, Kor0S, Kor1S
//ДД1
GetData(a, "Local HMI", "ErrGl_DD1", 1)
if a==0 then
   GetData(Kor0S, "Local HMI", "DD1k0", 1)
   GetData(Kor1S, "Local HMI", "DD1k1", 1)
   GetData(DavS, "MODBUS RTU (Zero-based Addressing)", "DD1", 1)
   Kor0=Kor0S
   Kor1=Kor1S
   Dav=DavS
   Dav=( ((Dav+Kor0)*Kor1)+500 )/1000
   DavS=Dav
   SetData(DavS, "Local HMI", "DD1k", 1)
end if


Арифметика превращается в танцы с бубнами. Как тут писать?!
IBAH
 
Сообщения: 36
Зарегистрирован: 08 апр 2022, 14:14

Re: Язык макросов . Преобразование типов.

Сообщение Михалыч » 22 фев 2023, 23:19

IBAH писал(а):... Как тут писать?!


Доброе время суток всем!
Да, удобно когда есть готовая и отлаженная библиотека. Читая пост, пришла мысль! Можно попробовать и самостоятельно, создать свою библиотеку, в которой будут свои функции преобразования и арифметики.
Что-то наподобие такого:
Код: Выделить всё
sub short my_i_to_s(int in_int)
// конвертируем int to short


и/или

Код: Выделить всё
sub short my_sum_i(int int_1, int int_2)
// находим сумму short от аргументов int_1 и int_2


... ну и так далее. Может быть, уже есть решения? А то выходит, что каждому надо изобретать велосипед.
Михалыч
 
Сообщения: 24
Зарегистрирован: 16 май 2018, 20:21

Re: Язык макросов . Преобразование типов.

Сообщение dimensy » 23 фев 2023, 10:44

О преобразовании типов есть упоминание в инструкции в разделе 18.4.2
А так, не пойму какие проблемы: при вычислении результат приводится к формату старшего. Например, если вы складываете short и int, то результат будет int. И если вы попытаетесь присвоить его переменной в формате short, то можете получить ерунду из-за переполнения
Последний раз редактировалось dimensy 23 фев 2023, 11:01, всего редактировалось 1 раз.
dimensy
 
Сообщения: 143
Зарегистрирован: 14 мар 2018, 17:54

Re: Язык макросов . Преобразование типов.

Сообщение dimensy » 23 фев 2023, 10:46

Михалыч писал(а):
IBAH писал(а):... Как тут писать?!


Доброе время суток всем!
Да, удобно когда есть готовая и отлаженная библиотека. Читая пост, пришла мысль! Можно попробовать и самостоятельно, создать свою библиотеку, в которой будут свои функции преобразования и арифметики.
Что-то наподобие такого:
sub short my_i_to_s(int in_int)
// конвертируем int to short

и/или

sub short my_sum_i(int int_1, int int_2)
// находим сумму short от аргументов int_1 и int_2

... ну и так далее. Может быть, уже есть решения? А то выходит, что каждому надо изобретать велосипед.


как вы видите приведение числа int с диапазоном +2147483647 -2147483648 к числу short с диапазоном +32767 -32768? Наоборот, short в int можно, но это и так автоматом делается
dimensy
 
Сообщения: 143
Зарегистрирован: 14 мар 2018, 17:54

Re: Язык макросов . Преобразование типов.

Сообщение Михалыч » 23 фев 2023, 11:36

Вижу очень просто. Нужно помнить о границах типов и контролировать диапазон входных переменных - если есть риск выйти за эти границы. Так же, выбирать тип переменных соответствующий возможному диапазону значений физической величины. В общем, использовать осмысленный подход.
Например, температуру float 123,45 °C приводим к short - получаем 123 °C, вполне нормальное преобразование. Но если будем приводить int 33767 к short - то мы должны понимать, что делаем что-то не то.
Михалыч
 
Сообщения: 24
Зарегистрирован: 16 май 2018, 20:21

Re: Язык макросов . Преобразование типов.

Сообщение dimensy » 23 фев 2023, 11:50

Михалыч писал(а):Вижу очень просто. Нужно помнить о границах типов и контролировать диапазон входных переменных - если есть риск выйти за эти границы. Так же, выбирать тип переменных соответствующий возможному диапазону значений физической величины. В общем, использовать осмысленный подход.
Например, температуру float 123,45 °C приводим к short - получаем 123 °C, вполне нормальное преобразование. Но если будем приводить int 33767 к short - то мы должны понимать, что делаем что-то не то.

Это делается автоматом, т.н. неявное приведение типов
dimensy
 
Сообщения: 143
Зарегистрирован: 14 мар 2018, 17:54


Вернуться в Weintek

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 9