PDA

Просмотр полной версии : ST, доступ по индексу



TaPX
25.10.2024, 09:13
Добрый день. Пытаюсь в ПР103 сделать вот так (скриншот), а оно ругается. Хотя в документации ST это вроде работает (второй скриншот). Что я делаю не так?
7959279593

З.Ы. Если вместо "i" сразу ставить число, то все работает (третий скриншот)
79596

МихаилГл
25.10.2024, 09:20
На СТ это так не работает, есть ли в СТ ОЛ getbit?

PS А может и работает... А почему не как в хелпе сделали. Попробуйте сначала один в один как там, прежде чем менять логику обработки...

PS А это документация к СТ пр'ки?

TaPX
25.10.2024, 09:23
На СТ это так не работает, есть ли в СТ ОЛ getbit?

PS А может и работает... А почему не как в хелпе сделали. Попробуйте сначала один в один как там, прежде чем менять логику обработки...

один в один - это как? Итак же практически один в один

МихаилГл
25.10.2024, 09:25
один в один - это как? Итак же практически один в один

Я ещё там написал... Это откуда хэлп? Судя по тексту это кодесис, а не СТ овен лоджика.

TaPX
25.10.2024, 09:30
Я ещё там написал... Это откуда хэлп? Судя по тексту это кодесис, а не СТ овен лоджика.

вот прямо сейчас сижу, ковыряю "хелп" лоджика, и пока ничего не нашёл. Питон на линуксе и питон на винде везде питон. с ST так не работает?

EFrol
25.10.2024, 09:38
Нельзя индекс бита задавать через переменную.
Попробуйте так:


var
i : udint;
sv : udint;
end_var

for i := 0 to 5 do
sv := shr(uzas, i);
if sv.0 then
uza_alarm := 15 - i;
end_if
end_for

Dimensy
25.10.2024, 09:39
... Хотя в документации ST это вроде работает (второй скриншот). Что я делаю не так?


В документации на ST, gs_usiENABLE - это константа, а констант в ST Лоджика нету

TaPX
25.10.2024, 09:40
В КДС тоже не будет так работать без ключевого слова, переменная должна быть константой и получается только для одного разряда, придумывайте другой способ

другой способ у меня не третьем скриншоте. Благодарю за разъяснение.

kondor3000
25.10.2024, 09:40
Добрый день. Пытаюсь в ПР103 сделать вот так (скриншот), а оно ругается. Хотя в документации ST это вроде работает (второй скриншот). Что я делаю не так?
З.Ы. Если вместо "i" сразу ставить число, то все работает (третий скриншот)


Если не знаете как написать, смотрите примеры, там есть всё, циклы, работа с массивами и т. д.

https://owen.ru/forum/showthread.php?t=37203&page=9&p=429061#81

TaPX
25.10.2024, 09:40
В документации на ST, gs_usiENABLE - это константа, а констант в ST Лоджика нету

понял, благодарю

TaPX
25.10.2024, 09:45
Нельзя индекс бита задавать через переменную.
Попробуйте так:


var
i : udint;
sv : udint;
end_var

for i := 0 to 5 do
sv := shr(uzas, i);
if sv.0 then
uza_alarm := 15 - i;
end_if
end_for


так работает, большая вам благодарность! А не подскажете, как это работает?

TaPX
25.10.2024, 09:46
Если не знаете как написать, смотрите примеры, там есть всё, циклы, работа с массивами и т. д.

https://owen.ru/forum/showthread.php?t=37203&page=9&p=429061#81

О, благодарю за такую инфу, почитаю )

kondor3000
25.10.2024, 10:17
так работает, большая вам благодарность! А не подскажете, как это работает?

Так же как это, 1 строка

var_input
uzas : udint;
end_var

uza_alarm :=15 - cd32(uzas);

end_function

Только c 6 бита (>=64 надо обнулить)

TaPX
25.10.2024, 10:46
Так же как это, 1 строка

var_input
uzas : udint;
end_var

uza_alarm :=15 - cd32(uzas);

end_function

Только c 6 бита (>=64 надо обнулить)

магия ) а как , для чайника, это работает?

TaPX
25.10.2024, 10:52
Так же как это, 1 строка

var_input
uzas : udint;
end_var

uza_alarm :=15 - cd32(uzas);

end_function

Только c 6 бита (>=64 надо обнулить)

function_block functionblock1 //имя функционального блока.



var_input
uzas : udint;
start : udint;
quant : udint;
end_var

var_output
Q : udint;
end_var

var
i: udint;
sv: udint;
end_var

for i := 0 to (quant - 1) do
sv := shr(uzas, i);
if sv.0 then
Q := start - i;
end_if
end_for



end_function_block

А как с этим вашим cd32 вот такое переделать?

kondor3000
25.10.2024, 10:53
магия ) а как , для чайника, это работает?

Читаем справку по F1, про cd32 и shr ( shl )

C cd32 и переделывать почти не надо, он со всеми 32 битами работает, число 15 замените на переменную.

EFrol
25.10.2024, 10:57
так работает, большая вам благодарность! А не подскажете, как это работает?

В переменную sv записывается значение uzas смещенное вправо на i бит. Например, при i = 5, 5-й бит смещается на место 0-го.
Соответственно потом можно анализировать только sv.0.

TaPX
25.10.2024, 10:58
Читаем справку по F1, про cd32 и shr ( shl )

там сухие две строчки, и для чайника ничего непонятно

TaPX
25.10.2024, 10:58
В переменную sv записывается значение uzas смещенное вправо на i бит. Например, при i = 5, 5-й бит смещается на место 0-го.
Соответственно потом можно анализировать только sv.0.

я понял, благодарю

Dimensy
25.10.2024, 11:57
Так же как это, 1 строка

var_input
uzas : udint;
end_var

uza_alarm :=15 - cd32(uzas);

end_function

Только c 6 бита (>=64 надо обнулить)

еще, здесь нулевой бит игнорируется

kondor3000
25.10.2024, 13:23
еще, здесь нулевой бит игнорируется

Надо же ТС чем то заняться, пока он будет тестировать cd32, если захочет понять принцип работы).

TaPX
25.10.2024, 14:11
Надо же ТС чем то заняться, пока он будет тестировать cd32, если захочет понять принцип работы).

сижу, тестирую, понимаю )