- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Перестановка местами WORD в REAL
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 48
- Зарегистрирован: 28 апр 2015, 17:19
- Имя: Петров Артем Олегович
- Благодарил (а): 10 раз
Перестановка местами WORD в REAL
Здравствуйте. Имею следующее. TIA Portal V15, S7-1200 с коммуникационным модулем CM1241 (MASTER).
По RS485 общаюсь с датчиком виброскорости(SLAVE). С датчика получаю ряд данных в виде массива REAL, но проблема, что видятся они в неадекватном виде. Я так понимаю, что нужно поменять местами WORD в REAL, то есть AB CD --> CD AB. Функции SWAP не подходят, они переделывают по другому. Как можно это сделать ? Заранее спасибо.
По RS485 общаюсь с датчиком виброскорости(SLAVE). С датчика получаю ряд данных в виде массива REAL, но проблема, что видятся они в неадекватном виде. Я так понимаю, что нужно поменять местами WORD в REAL, то есть AB CD --> CD AB. Функции SWAP не подходят, они переделывают по другому. Как можно это сделать ? Заранее спасибо.
-
- освоился
- Сообщения: 262
- Зарегистрирован: 31 авг 2012, 06:30
- Имя: Фоменко Максим Анатольевич
- Страна: РФ
- город/регион: гор. Нижнйи Тагил, Свердловской обл.
- Благодарил (а): 3 раза
- Поблагодарили: 76 раз
Перестановка местами WORD в REAL
как то вот так на *.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
-
- здесь недавно
- Сообщения: 48
- Зарегистрирован: 28 апр 2015, 17:19
- Имя: Петров Артем Олегович
- Благодарил (а): 10 раз
Перестановка местами WORD в REAL
Как я понимаю, это программа в среде программирования STEP7, в TIA PORTAL V15 такое работать не будетMaksimNT писал(а): ↑09 июл 2019, 14:41как то вот так на *.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
-
- освоился
- Сообщения: 262
- Зарегистрирован: 31 авг 2012, 06:30
- Имя: Фоменко Максим Анатольевич
- Страна: РФ
- город/регион: гор. Нижнйи Тагил, Свердловской обл.
- Благодарил (а): 3 раза
- Поблагодарили: 76 раз
Перестановка местами WORD в REAL
Ниже скрин из TIA PORTAL V15Ivydy писал(а): ↑09 июл 2019, 15:24Как я понимаю, это программа в среде программирования STEP7, в TIA PORTAL V15 такое работать не будетMaksimNT писал(а): ↑09 июл 2019, 14:41
как то вот так на *.scl
BEGIN
// ============================================================================
// Word_RAEL
// Программа перевода полученных 2 WORD --> REAL
//
// ===========================================================================
#Raw.%W0 := #wHWord;
#Raw.%W1 := #wLWord;
#OUT := #Value;
END_FUNCTION_BLOCK
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- освоился
- Сообщения: 262
- Зарегистрирован: 31 авг 2012, 06:30
- Имя: Фоменко Максим Анатольевич
- Страна: РФ
- город/регион: гор. Нижнйи Тагил, Свердловской обл.
- Благодарил (а): 3 раза
- Поблагодарили: 76 раз
Перестановка местами WORD в REAL
в исходнике (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
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
-
- освоился
- Сообщения: 208
- Зарегистрирован: 16 дек 2011, 15:13
- Имя: Алексей
- Страна: Россия
- Благодарил (а): 67 раз
- Поблагодарили: 53 раза
Перестановка местами WORD в REAL
А если так (функция, не FB):
classic Step7:
TIA Portal:
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
Код: Выделить всё
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
-
- здесь недавно
- Сообщения: 53
- Зарегистрирован: 15 мар 2023, 21:57
- Имя: Михаил
- Страна: Россия
- город/регион: Волгоградская область / г. Волжский
- Благодарил (а): 1 раз
- Поблагодарили: 14 раз
Перестановка местами WORD в REAL
в STL
Swap Bytes in Word: CAW: swaps LSB < - > MSB
Swap Words in DWord: CAD: swaps LSW < - > MSW
Swap Bytes in Word: CAW: swaps LSB < - > MSB
Swap Words in DWord: CAD: swaps LSW < - > MSW