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

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

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

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

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

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

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

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


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

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

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

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


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


и/или

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


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

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

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

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

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

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

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

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

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

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

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


Вернуться в Weintek

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

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