Просмотр полной версии : Тип данных в ovenCloud
Добрый день, подключил пр103 напрямую в облаку для ведения счета. Счетчик у меня 32 разрядный с макросов и может считать очень далеко, значения передаю в сетевую переменную, а в облаке происходит переполнение переменной после 65000, как это победить? Как корректно указать в ПР103 и в облаке тип int 32?
в облаке вроде UInt32, Int32, Int64, UInt64 присутствуют под номерами 3,4,7,8 (как в облаке они выбираются не в курсе)
Добрый день, подключил пр103 напрямую в облаку для ведения счета. Счетчик у меня 32 разрядный с макросов и может считать очень далеко, значения передаю в сетевую переменную, а в облаке происходит переполнение переменной после 65000, как это победить? Как корректно указать в ПР103 и в облаке тип int 32?
Нужно в программе ПР разложить 32 разрядное число на 2 16-разрядных слова и присвоить их соседним сетевым регистрам. В облаке читать как 32 разрядное целое по меньшему адресу 16-разрядного слова
В облаке да есть, но если в облаке поменять тип, то идут рандомные цифры вместо реальных
Ну так как 1exan и говорит, вероятно вы свой счетчик кинули в один регистр, а указывая 32-х битный вариант в облаке вы читаете еще следующий регистр, вот и получаете рендомные числа.
Нужно в программе ПР разложить 32 разрядное число на 2 16-разрядных слова и присвоить их соседним сетевым регистрам. В облаке читать как 32 разрядное целое по меньшему адресу 16-разрядного слова
Можно поподробнее по поводу раскладки 32 разрядов в 2 16 разрядных
MrGavai примеров на форуме масса. Суть, сама переменная в ПР 32-х битная. Регистр 16-ти битный. Если нужна полная по сети, ее надо разбить на два регистра, при записи команды собрать из двух регистров.
function_block DW_TO_2WORD //имя функционального блока.
var_input
DW : udint;
end_var
var_output //объявление выходных переменных
W1 : udint;
W2 : udint;
end_var
W2 := SHR(DW,16);
W1 := SHR(SHL(DW,16),16);
end_function_block
70895
70897
70896
1exan а / и % имеются в ST ?
1exan а / и % имеются в ST ?
в смысле просто деление и деление по модулю?
деление просто есть конечно, а по модулю это в ST оператор MOD
1exan ну вот, зачем тогда двигать все подряд (SHR, SHL), если можно подвинуть только одно значение.
скажем так, что окажется быстрее и эффективнее?
1exan ну вот, зачем тогда двигать все подряд (SHR, SHL), если можно подвинуть только одно значение.
скажем так, что окажется быстрее и эффективнее?
Не знаю, мне так проще. Полагаю, что операция сдвига одна из самых дешёвых.
Для W1 я бы наверное сделал AND, но этот оператор в OL не работает с целочисленными значениями (не перегружен)
Можно кстати это сделать на FBD, там есть и SHR и AND
да, AND и прочее в ST пр-ки пока не завезли...
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot