форум асутп
 На главную                       Здесь может быть Ваша реклама, подробнее...

здесь может быть ваша реклама

 Наверх  |  Перейти к теме  |  Поиск  |  Вход  |  Дерево    
 Язык ST. Преобразование типов данных.
Автор: Savirman 
Дата:   28.01.14 15:47

Уважаемые форумчане! Поделитесь, пожалуйста, опытом в программировании на языке ST. Мне необходимо выделить из переменной типа WORD старший байт, но я не знаю как это сделать можно. Или может хотя бы разделить эту переменную на две новых типа BYTE.  Буду рад любым советам и предложениям.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Язык ST. Преобразование типов данных.
Автор: Ivan Zhukov 
Дата:   28.01.14 15:55

Savirman писал(а):

> Уважаемые форумчане! Поделитесь, пожалуйста, опытом в программировании на языке
> ST. Мне необходимо выделить из переменной типа WORD старший байт, но я не знаю
> как это сделать можно. Или может хотя бы разделить эту переменную на две новых
> типа BYTE.  Буду рад любым советам и предложениям.

Целочисленно поделить WORD на 256, получится его старший байт.
А что - разве в ST нет битовых операций? Сдвигов и т.д.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Язык ST. Преобразование типов данных.
Автор: Михаил Барсуков 
Дата:   28.01.14 16:22

Смотря о какой среде разработки идет речь?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Язык ST. Преобразование типов данных.
Автор: Savirman 
Дата:   29.01.14 00:44

Среда OpenBSI Controlwave Designer.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Язык ST. Преобразование типов данных.
Автор: Savirman 
Дата:   26.02.14 14:35

У меня получилось таки. Но не Вашим способом, однако с Вашей помощью) да, в ST сдвиги, как оказалось, есть. С помощью сдвига вправо на 8 бит с последующим явным преобразованием в целое я и выделил старший байт.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Язык ST. Преобразование типов данных.
Автор: Curr93 
Дата:   17.08.16 09:55

Уважаемые коллеги!

У меня та же проблема - не могу выделить (в Unity Pro XL 11 версии) из системного слова %SW51 только минуты, т.е. младший значащий байт.

Я привык к среде типа Step7 там на языке STL все решается очень просто, т.е. командами L, BTD, T.
Здесь когда я пытаюсь использовать блок Move и как выяснилось к нему обязательно необходимо подключать одинаковые типы данных, т.е. нельзя например сдвинуть слово в байт, в Step7 такое возможно на языке STL

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Язык ST. Преобразование типов данных.
Автор: Огородников Сергей 
Дата:   17.08.16 13:06

Добрый день!

Про одинаковые типы данных верно подмечено. Для этого в Unity существуют функции преобразования типов, например REAL_TO_INT, INT_TO_REAL. WORD_TO_INT, BCD_TO_INT и т.д. Находятся они в библиотеке BASE_LIB -> Type to type.

Кстати, вам эта функция понадобится, т.к. в словах %SW49-%SW53 время хранится в двоично-десятичном формате (BCD).
В структурном тексте выделить часы и минуты будет так:

hour:=bcd_to_int(SHR(%SW51,8));
minute:=bcd_to_int(%SW51 and 16#FF);

А с преобразованием типов - это во многих языках необходимо. В MicroWin (S7-200) приходилось делать несколько преобразований для получения из целого вещественное и наоборот. Это неудобство со временем перейдёт в привычку)

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Язык ST. Преобразование типов данных.
Автор: Curr93 
Дата:   17.08.16 14:52

спасибо Сергей!
похоже тема раскрыта окончательно

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Язык ST. Преобразование типов данных.
Автор: Savirman 
Дата:   17.08.16 17:44

Сергей, спасибо за приведенные примеры!

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Язык ST. Преобразование типов данных.
Автор: Огородников Сергей 
Дата:   17.08.16 19:15

Завсегда пожалуйста!)

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Язык ST. Преобразование типов данных.
Автор: mmmx 
Дата:   12.09.16 21:59

Насчет Unity точно не помню, есть ли там пойнтеры, в SoMashine делал функцию:

Младший байт:
   FUNCTION lower_byte : WORD
   VAR_INPUT
      w_var:WORD;
   END_VAR
   VAR
   pt:POINTER TO WORD;
   END_VAR
тело функции:
   pt:=ADR(w_var);
   pt:=pt+SIZEOF(BYTE);
   lower_byte:=pt^;



Старший байт:
   FUNCTION upper_byte : BYTE
   VAR_INPUT
   dw_var:WORD;
   END_VAR
   VAR
   pt:POINTER TO WORD;
   END_VAR
тело функции:
   pt:=ADR(dw_var);
   upper_byte:=pt^;

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Язык ST. Преобразование типов данных.
Автор: Se.Sib 
Дата:   13.09.16 12:41

И в Unity и в SoMachine, в базовых библиотеках, есть ФБ WORD_AS_BYTE.

Адрес этого сообщения    Ответить на это сообщение
 Список форумов    


 Список форумов  |  Нужен логин? Регистрируйтесь здесь 
 Логин пользователя
 Имя пользователя:
 Пароль:
 Помнить пароль:
   
 Забыли ваш пароль?
Введите имя пользователя или e-mail, и новый пароль будет послан на email, указанный в вашем профиле.

Рейтинг@Mail.ru