Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
Здравствуйте, помогите пж с таким вопросом
Например есть FB из InOut - "Par" и "Stat"(обе тип данных Структура но разные), как вытянуть из структуры Par байт и отправить его в Stat?
это нужно для экономии тегов в Скаде, и не тянуть тег "Par".
"Побитно" не нравится, так как код больше, да и время цикла...
СПС
Например есть FB из InOut - "Par" и "Stat"(обе тип данных Структура но разные), как вытянуть из структуры Par байт и отправить его в Stat?
это нужно для экономии тегов в Скаде, и не тянуть тег "Par".
"Побитно" не нравится, так как код больше, да и время цикла...
СПС
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
Code: Select all
L B "Par".ByteTag
T B "Stat".ByteTag
Распиши полностью обе структуры, и что куда надо перекинуть.
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]
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
спс
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]
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
СПС за ответ, но интересует SCL)
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
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
В SCL можно прямо использовать STL инструкции.
А по чистому SCL вам уже ответили выше. Хотя достаточно после описания каждой структуры добавить:
bPar AT Par.Bool0 : BYTE;
...
bStat AT Stat.Bool0 : BYTE;
ну а потом просто
bStat := bPar;
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
можно ли их запихнуть в байт одним "махом"?
не могу понять как наложить область с нужного бита
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
Только так:
Code: Select all
VAR_INPUT
BoolVars : ARRAY[0 .. 7] OF BOOL;
BoolsByte AT BoolVars : BYTE;
END_VAR
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
а вне ФБ я буду иметь один вход или 8??
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
буду иметь один, а так чтобы 8 входов (тип bool) есть варианты?
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 которая будет собирать нужные биты в байт.
Re: Подскажите как в SCL из структуры получить байт и запихнуть в другую структуру
а почему не сделать отдельный фс ,в нём стл, а уж его вызывать в фб ?
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-компилятор не умеет / не хочет мапить биты в один байт, и приходится извращаться.