1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Перестановка местами WORD в REAL

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)
Ответить

Автор темы
Ivydy
здесь недавно
здесь недавно
Сообщения: 45
Зарегистрирован: 28 апр 2015, 17:19
Имя: Петров Артем Олегович
Благодарил (а): 9 раз

Перестановка местами WORD в REAL

Сообщение Ivydy »

Здравствуйте. Имею следующее. TIA Portal V15, S7-1200 с коммуникационным модулем CM1241 (MASTER).
По RS485 общаюсь с датчиком виброскорости(SLAVE). С датчика получаю ряд данных в виде массива REAL, но проблема, что видятся они в неадекватном виде. Я так понимаю, что нужно поменять местами WORD в REAL, то есть AB CD --> CD AB. Функции SWAP не подходят, они переделывают по другому. Как можно это сделать ? Заранее спасибо.

MaksimNT
освоился
освоился
Сообщения: 262
Зарегистрирован: 31 авг 2012, 06:30
Имя: Фоменко Максим Анатольевич
Страна: РФ
город/регион: гор. Нижнйи Тагил, Свердловской обл.
Благодарил (а): 3 раза
Поблагодарили: 76 раз

Перестановка местами WORD в REAL

Сообщение MaksimNT »

Ivydy писал(а): 09 июл 2019, 13:02 поменять местами WORD в REAL, то есть AB CD --> CD AB.
как то вот так на *.scl

FUNCTION_BLOCK "Word_RAEL"
TITLE = Bytes are re-ordered to construct a REAL
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR_INPUT
wLWord { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // byte to form real value 1 of 4
wHWord { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // byte to form real value 2 of 4
END_VAR

VAR_OUTPUT
OUT { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real; // Resulting value constructed from bytes
END_VAR

VAR
Value { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real; // Reconstructed value
Raw { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} AT Value : DWord; // Raw value constructed from WORD
END_VAR


BEGIN
// ============================================================================
// Word_RAEL
// Программа перевода полученных 2 WORD --> REAL
//
// ===========================================================================

#Raw.%W0 := #wHWord;
#Raw.%W1 := #wLWord;
#OUT := #Value;

END_FUNCTION_BLOCK

Автор темы
Ivydy
здесь недавно
здесь недавно
Сообщения: 45
Зарегистрирован: 28 апр 2015, 17:19
Имя: Петров Артем Олегович
Благодарил (а): 9 раз

Перестановка местами WORD в REAL

Сообщение Ivydy »

MaksimNT писал(а): 09 июл 2019, 14:41
Ivydy писал(а): 09 июл 2019, 13:02 поменять местами WORD в REAL, то есть AB CD --> CD AB.
как то вот так на *.scl

FUNCTION_BLOCK "Word_RAEL"
TITLE = Bytes are re-ordered to construct a REAL
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR_INPUT
wLWord { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // byte to form real value 1 of 4
wHWord { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word; // byte to form real value 2 of 4
END_VAR

VAR_OUTPUT
OUT { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real; // Resulting value constructed from bytes
END_VAR

VAR
Value { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real; // Reconstructed value
Raw { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} AT Value : DWord; // Raw value constructed from WORD
END_VAR


BEGIN
// ============================================================================
// Word_RAEL
// Программа перевода полученных 2 WORD --> REAL
//
// ===========================================================================

#Raw.%W0 := #wHWord;
#Raw.%W1 := #wLWord;
#OUT := #Value;

END_FUNCTION_BLOCK
Как я понимаю, это программа в среде программирования STEP7, в TIA PORTAL V15 такое работать не будет

MaksimNT
освоился
освоился
Сообщения: 262
Зарегистрирован: 31 авг 2012, 06:30
Имя: Фоменко Максим Анатольевич
Страна: РФ
город/регион: гор. Нижнйи Тагил, Свердловской обл.
Благодарил (а): 3 раза
Поблагодарили: 76 раз

Перестановка местами WORD в REAL

Сообщение MaksimNT »

Ivydy писал(а): 09 июл 2019, 15:24
MaksimNT писал(а): 09 июл 2019, 14:41
как то вот так на *.scl

BEGIN
// ============================================================================
// Word_RAEL
// Программа перевода полученных 2 WORD --> REAL
//
// ===========================================================================

#Raw.%W0 := #wHWord;
#Raw.%W1 := #wLWord;
#OUT := #Value;

END_FUNCTION_BLOCK
Как я понимаю, это программа в среде программирования STEP7, в TIA PORTAL V15 такое работать не будет
Ниже скрин из TIA PORTAL V15
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1617
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 70 раз
Поблагодарили: 189 раз

Перестановка местами WORD в REAL

Сообщение petr2off »

TIA Portal - это оболочка, в которой работает и Step-7 и WinCС.

MaksimNT
освоился
освоился
Сообщения: 262
Зарегистрирован: 31 авг 2012, 06:30
Имя: Фоменко Максим Анатольевич
Страна: РФ
город/регион: гор. Нижнйи Тагил, Свердловской обл.
Благодарил (а): 3 раза
Поблагодарили: 76 раз

Перестановка местами WORD в REAL

Сообщение MaksimNT »

в исходнике (swap_bytes_real.scl) был следующее



FUNCTION_BLOCK "swap_bytes_REAL"
TITLE = Bytes are re-ordered to construct a REAL
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR_INPUT
Byte_1 { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Byte; // byte to form real value 1 of 4
Byte_2 { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Byte; // byte to form real value 2 of 4
Byte_3 { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Byte; // byte to form real value 3 of 4
Byte_4 { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Byte; // byte to form real value 4 of 4
END_VAR

VAR_OUTPUT
OUT { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Real; // Resulting value constructed from bytes
END_VAR

VAR
Value { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Real; // Reconstructed value
Raw { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} AT Value : DWord; // Raw value constructed from BYTES
END_VAR


BEGIN
#Raw.%B0 := #Byte_4;
#Raw.%B1 := #Byte_3;
#Raw.%B2 := #Byte_2;
#Raw.%B3 := #Byte_1;
#OUT := #Value;
END_FUNCTION_BLOCK


LexSL
осмотрелся
осмотрелся
Сообщения: 192
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 65 раз
Поблагодарили: 46 раз

Перестановка местами WORD в REAL

Сообщение LexSL »

А если так (функция, не FB):
classic Step7:

Код: Выделить всё

FUNCTION SwapWords : REAL

VAR_INPUT
    Number : REAL;
END_VAR
    
VAR_TEMP
    // Temporary Variables
    tmpReal : REAL;
    tmpRealArray AT tmpReal : ARRAY [0..1] OF WORD;
    tmpWord : WORD;
END_VAR
    tmpReal := Number;

    tmpWord := tmpRealArray[1];
    tmpRealArray[1] := tmpRealArray[0];
    tmpRealArray[0] := tmpWord;
    

    SwapWords := tmpReal;
END_FUNCTION
TIA Portal:

Код: Выделить всё

FUNCTION "SwapWords" : Real
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
   VAR_INPUT 
      Number : Real;
   END_VAR

   VAR_TEMP 
      tmpReal : Real;
      tmpRealArray AT tmpReal : Array[0..1] of Word;
      tmpWord : Word;
   END_VAR


BEGIN
	#tmpReal := #Number;
	
	#tmpWord := #tmpRealArray[1];
	#tmpRealArray[1] := #tmpRealArray[0];
	#tmpRealArray[0] := #tmpWord;
	
	#SwapWords := #tmpReal;
END_FUNCTION


Barsukovm
здесь недавно
здесь недавно
Сообщения: 12
Зарегистрирован: 15 мар 2023, 21:57
Имя: Михаил
Страна: Россия
город/регион: Волгоградская область / г. Волжский
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Перестановка местами WORD в REAL

Сообщение Barsukovm »

в STL
Swap Bytes in Word: CAW: swaps LSB < - > MSB
Swap Words in DWord: CAD: swaps LSW < - > MSW
Ответить

Вернуться в «Simatic TIA Portal»