Просмотр полной версии : ST, доступ по индексу
Добрый день. Пытаюсь в ПР103 сделать вот так (скриншот), а оно ругается. Хотя в документации ST это вроде работает (второй скриншот). Что я делаю не так?
7959279593
З.Ы. Если вместо "i" сразу ставить число, то все работает (третий скриншот)
79596
МихаилГл
25.10.2024, 09:20
На СТ это так не работает, есть ли в СТ ОЛ getbit?
PS А может и работает... А почему не как в хелпе сделали. Попробуйте сначала один в один как там, прежде чем менять логику обработки...
PS А это документация к СТ пр'ки?
На СТ это так не работает, есть ли в СТ ОЛ getbit?
PS А может и работает... А почему не как в хелпе сделали. Попробуйте сначала один в один как там, прежде чем менять логику обработки...
один в один - это как? Итак же практически один в один
МихаилГл
25.10.2024, 09:25
один в один - это как? Итак же практически один в один
Я ещё там написал... Это откуда хэлп? Судя по тексту это кодесис, а не СТ овен лоджика.
Я ещё там написал... Это откуда хэлп? Судя по тексту это кодесис, а не СТ овен лоджика.
вот прямо сейчас сижу, ковыряю "хелп" лоджика, и пока ничего не нашёл. Питон на линуксе и питон на винде везде питон. с ST так не работает?
Нельзя индекс бита задавать через переменную.
Попробуйте так:
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
... Хотя в документации ST это вроде работает (второй скриншот). Что я делаю не так?
В документации на ST, gs_usiENABLE - это константа, а констант в ST Лоджика нету
В КДС тоже не будет так работать без ключевого слова, переменная должна быть константой и получается только для одного разряда, придумывайте другой способ
другой способ у меня не третьем скриншоте. Благодарю за разъяснение.
kondor3000
25.10.2024, 09:40
Добрый день. Пытаюсь в ПР103 сделать вот так (скриншот), а оно ругается. Хотя в документации ST это вроде работает (второй скриншот). Что я делаю не так?
З.Ы. Если вместо "i" сразу ставить число, то все работает (третий скриншот)
Если не знаете как написать, смотрите примеры, там есть всё, циклы, работа с массивами и т. д.
https://owen.ru/forum/showthread.php?t=37203&page=9&p=429061#81
В документации на ST, gs_usiENABLE - это константа, а констант в ST Лоджика нету
понял, благодарю
Нельзя индекс бита задавать через переменную.
Попробуйте так:
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
так работает, большая вам благодарность! А не подскажете, как это работает?
Если не знаете как написать, смотрите примеры, там есть всё, циклы, работа с массивами и т. д.
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 надо обнулить)
Так же как это, 1 строка
var_input
uzas : udint;
end_var
uza_alarm :=15 - cd32(uzas);
end_function
Только c 6 бита (>=64 надо обнулить)
магия ) а как , для чайника, это работает?
Так же как это, 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 замените на переменную.
так работает, большая вам благодарность! А не подскажете, как это работает?
В переменную sv записывается значение uzas смещенное вправо на i бит. Например, при i = 5, 5-й бит смещается на место 0-го.
Соответственно потом можно анализировать только sv.0.
Читаем справку по F1, про cd32 и shr ( shl )
там сухие две строчки, и для чайника ничего непонятно
В переменную sv записывается значение uzas смещенное вправо на i бит. Например, при i = 5, 5-й бит смещается на место 0-го.
Соответственно потом можно анализировать только sv.0.
я понял, благодарю
Так же как это, 1 строка
var_input
uzas : udint;
end_var
uza_alarm :=15 - cd32(uzas);
end_function
Только c 6 бита (>=64 надо обнулить)
еще, здесь нулевой бит игнорируется
kondor3000
25.10.2024, 13:23
еще, здесь нулевой бит игнорируется
Надо же ТС чем то заняться, пока он будет тестировать cd32, если захочет понять принцип работы).
Надо же ТС чем то заняться, пока он будет тестировать cd32, если захочет понять принцип работы).
сижу, тестирую, понимаю )
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot