PDA

Просмотр полной версии : Максимальное значение локальной и сетевой переменной



Artemid
02.03.2026, 11:01
Добрый день! Столкнулся с такой проблемой: есть локальная целочисленная переменная которая увеличивается от счетчика, затем она записывается в сетевую переменную и передается в OwenCloud, так вот проблема в том что переменная достигает значения 65535 примерно и сбрасывается, как сделать счет до большего значения?

МихаилГл
02.03.2026, 11:08
Как вариант сделать вторую переменную, которая будет считать количество максимальных переходов первой

melky
02.03.2026, 11:28
ОЛ оперирует 32-х битными беззнаковыми переменными. Чтобы ее кинуть в сеть, надо ее раздробить на две 16-ричные (примеры были) и кидать в сеть как 32-х битную (2 регистра)

65535 даже не примерно, а точнее некуда :)

Dimensy
02.03.2026, 12:44
1-й вариант
88330

2-й вариант (макросы из менеджера компонентов)
88331

Ну, и, третий вариант, до кучи


function_block CTN32_

var_input
U, D, R : bool;
N : udint;
end_var

var_output
Lo, Hi : udint;
end_var

var
ctn : SYS.CTN;
end_var

ctn(U:=U, D:=D, R:=R, N:=N);
Lo := ctn.Q mod 65536;
Hi := ctn.Q / 65536;

end_function_block


З.Ы. Представленные варианты не запоминают значение при потери питания

Artemid
05.03.2026, 10:59
Спасибо, пытаюсь использовать второй вариант с макросом, получилось у меня младший и старший регистр, а как их оба указать в параметрах в owen cloud, создаю параметр формат данных указываю как uint32 но в адресе регистра только один могу указать, как мне там представить младший и старший регистр?

Dimensy
05.03.2026, 11:08
Спасибо, пытаюсь использовать второй вариант с макросом, получилось у меня младший и старший регистр, а как их оба указать в параметрах в owen cloud, создаю параметр формат данных указываю как uint32 но в адресе регистра только один могу указать, как мне там представить младший и старший регистр?

Формат uint32 уже подразумевает 2 регистра. Но, в настройках облака надо глянуть кто у нас первым должен идти - младший или старший регистр и, соответственно либо на ПРке сделать или в облаке настроить

Artemid
05.03.2026, 11:25
Но я макросом разбиваю udint на 2 регистра uint, получаю 2 сетевых переменных и отправляю их уже в сеть, а uint32 подразумевает 2 регистра, а как мне показать что эти 2 сетевых переменных мл. регистр и стар. регистр

1exan
05.03.2026, 13:00
Но я макросом разбиваю udint на 2 регистра uint, получаю 2 сетевых переменных и отправляю их уже в сеть, а uint32 подразумевает 2 регистра, а как мне показать что эти 2 сетевых переменных мл. регистр и стар. регистр

Для 32 разрядных данных указывается адрес меньшего (по номеру) регистра

Artemid
05.03.2026, 14:48
Спасибо попробую