Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine
Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
Здравствуйте, помогите пж с таким вопросом
Например есть FB из InOut - "Par" и "Stat"(обе тип данных Структура но разные), как вытянуть из структуры Par байт и отправить его в Stat?
это нужно для экономии тегов в Скаде, и не тянуть тег "Par".
"Побитно" не нравится, так как код больше, да и время цикла...
СПС
Например есть FB из InOut - "Par" и "Stat"(обе тип данных Структура но разные), как вытянуть из структуры Par байт и отправить его в Stat?
это нужно для экономии тегов в Скаде, и не тянуть тег "Par".
"Побитно" не нравится, так как код больше, да и время цикла...
СПС
-
- Posts: 374
- Joined: Wed Oct 13, 2010 8:44 am
- Location: Russian Federation
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
Code: Select all
L B "Par".ByteTag
T B "Stat".ByteTag
Распиши полностью обе структуры, и что куда надо перекинуть.
-
- Posts: 1
- Joined: Sat Nov 30, 2019 9:24 pm
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
Привет!
В TwinCat и Codesys использовал функцию MEMCPY для подобных задач.
[https://infosys.beckhoff.com/index.php? ... py.htm&id=]
B Siemens SCL использовал MOVE_BLK.
[https://support.industry.siemens.com/cs ... 0&lc=en-WW]
В TwinCat и Codesys использовал функцию MEMCPY для подобных задач.
[https://infosys.beckhoff.com/index.php? ... py.htm&id=]
B Siemens SCL использовал MOVE_BLK.
[https://support.industry.siemens.com/cs ... 0&lc=en-WW]
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
Допустим структура Par:
Stat:
Нужно первый байт PAR перекинуть в первый байт Stat
спс
Code: Select all
Bool0
Bool1
Bool2
Bool3
Bool4
Bool5
Bool6
Bool7
Bool8
Bool9
Bool10
Bool11
Bool12
Bool13
Bool14
Bool15
Int1
Int2
Dint1
Code: Select all
Bool0
Bool1
Bool2
Bool3
Bool4
Bool5
Bool6
Bool7
Bool8
Bool9
Bool10
Bool11
Bool12
Bool13
Bool14
Bool15
Bool16
Bool17
Bool18
Bool19
Bool20
Bool21
Bool22
Bool23
Bool24
Bool25
Bool26
Bool27
Bool28
Bool29
Bool30
Bool31
Int1
спс
-
- Posts: 374
- Joined: Wed Oct 13, 2010 8:44 am
- Location: Russian Federation
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
Code: Select all
L P#"Par"
LAR1
L P#"Stat"
LAR2
L LB [AR1,P#0.0]
T LB [AR2,P#0.0]
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
СПС за ответ, но интересует SCL)
-
- Posts: 98
- Joined: Mon Apr 26, 2010 7:02 pm
- Location: Н.Новгород
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
Если можно менять интерфейс блока - используйте "AT"
To be able to access a declared variable with a different data type, you can define views of the variable or of ranges within the variables using the "AT" keyword. A view is visible only locally in the block; it is not included in the interface. A view can be used like any other variable in the block. It inherits all the properties of the variable that it references; only the data type is new.
VAR_INPUT
Buffer : ARRAY[0..255] OF BYTE;
Frame1 AT Buffer : UDT100 ;
Frame2 AT Buffer : UDT200 ;
END_VAR
To be able to access a declared variable with a different data type, you can define views of the variable or of ranges within the variables using the "AT" keyword. A view is visible only locally in the block; it is not included in the interface. A view can be used like any other variable in the block. It inherits all the properties of the variable that it references; only the data type is new.
VAR_INPUT
Buffer : ARRAY[0..255] OF BYTE;
Frame1 AT Buffer : UDT100 ;
Frame2 AT Buffer : UDT200 ;
END_VAR
-
- Posts: 374
- Joined: Wed Oct 13, 2010 8:44 am
- Location: Russian Federation
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
В SCL можно прямо использовать STL инструкции.
А по чистому SCL вам уже ответили выше. Хотя достаточно после описания каждой структуры добавить:
bPar AT Par.Bool0 : BYTE;
...
bStat AT Stat.Bool0 : BYTE;
ну а потом просто
bStat := bPar;
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
Работает, спс
А еще такой вопрос, допустим FB имеет Input:
Bool0 Bool
Bool1 Bool
Bool2 Bool
Bool3 Bool
Bool4 Bool
Bool5 Bool
Bool6 Bool
Bool7 Bool
можно ли их запихнуть в байт одним "махом"?
не могу понять как наложить область с нужного бита
А еще такой вопрос, допустим FB имеет Input:
Bool0 Bool
Bool1 Bool
Bool2 Bool
Bool3 Bool
Bool4 Bool
Bool5 Bool
Bool6 Bool
Bool7 Bool
можно ли их запихнуть в байт одним "махом"?
не могу понять как наложить область с нужного бита
-
- Posts: 374
- Joined: Wed Oct 13, 2010 8:44 am
- Location: Russian Federation
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
Только так:
Code: Select all
VAR_INPUT
BoolVars : ARRAY[0 .. 7] OF BOOL;
BoolsByte AT BoolVars : BYTE;
END_VAR
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
а вне ФБ я буду иметь один вход или 8??
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
буду иметь один, а так чтобы 8 входов (тип bool) есть варианты?
-
- Posts: 374
- Joined: Wed Oct 13, 2010 8:44 am
- Location: Russian Federation
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
Тогда так:
Биты будут поодиночке, но скорее всего их тоже просто так не привяжешь.
Проще сделать вход байтовый, и написать FC которая будет собирать нужные биты в байт.
Code: Select all
FUNCTION_BLOCK FB666
VAR_INPUT
Bools : STRUCT
b0 : BOOL;
b1 : BOOL;
b2 : BOOL;
b3 : BOOL;
b4 : BOOL;
b5 : BOOL;
b6 : BOOL;
b7 : BOOL;
END_STRUCT;
BoolsByte AT Bools : BYTE;
END_VAR
VAR_OUTPUT
MyByte : BYTE;
END_VAR
BEGIN
MyByte := BoolsByte;
END_FUNCTION_BLOCK
Биты будут поодиночке, но скорее всего их тоже просто так не привяжешь.
Проще сделать вход байтовый, и написать FC которая будет собирать нужные биты в байт.
-
- Site Admin
- Posts: 1387
- Joined: Sat Aug 13, 2005 6:15 am
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
а почему не сделать отдельный фс ,в нём стл, а уж его вызывать в фб ?
-
- Posts: 374
- Joined: Wed Oct 13, 2010 8:44 am
- Location: Russian Federation
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
STL можно написать прямо в SCL.
Маппинг 8 бит в один байт выполняется всего двумя командами (если биты идут с начала в IN):
L DIB [AR2,P#0.0]
T #SomeByte
Но SCL-компилятор не умеет / не хочет мапить биты в один байт, и приходится извращаться.
Маппинг 8 бит в один байт выполняется всего двумя командами (если биты идут с начала в IN):
L DIB [AR2,P#0.0]
T #SomeByte
Но SCL-компилятор не умеет / не хочет мапить биты в один байт, и приходится извращаться.
-
- Posts: 202
- Joined: Wed Mar 19, 2008 1:12 pm
- Location: Ukraine