PDA

Просмотр полной версии : Чтение целочисленного значения из ПР100 в OwenCloud uint32 или int32.



kipiasutp
28.12.2020, 03:10
Добрый день!

Как правильно считать в OwenCloud Целочисленную сетевую переменную?
Это показания счетчиков 7-8 разрядов.
Перепробовал все варианты с uint32, int32 и порядком байт и регистров в облаке и ПР100.
В ПР100 в онлайне все отображается правильно.
Не приходят правильные значения в OwenCloud.
Также неправильно записываются из облака в ПР100 текущие значения счетчиков.

kipiasutp
28.12.2020, 10:03
Сетевая переменная одна.
Общая картина такая:
52800 52801 52802 52803

Юрий Н
28.12.2020, 10:14
а порядок байтов не надо поменять?

kipiasutp
28.12.2020, 10:16
Менял, вроде все варианты перепробовал.

capzap
28.12.2020, 10:48
Сетевая переменная одна.

сетевая перменная это 16 бит, ваши тестовые надо делить на два слова и их вставлять в сетевые переменные

ЗЫ и еще по скринам можно предположить что переменные задавались не согласно руководства https://ftp.owen.ru/OwenCloud/01_Docs/rp_owencloud.pdf раздел 5.6 а самостоятельно возможно в этом причина может быть

melky
28.12.2020, 13:50
для ПР слейва порядок байт 2301 для флоат и 32-х битных... ВСЕГДА, невзирая на галочки в настройках ПР

kipiasutp
28.12.2020, 23:19
По совету capzap соорудил я такой огород :):
52824 52825 52826 52827
Зато работает.
В макросе INT_BOOL сделал сквозную нумерацию и переименовал в INT_BOOL_32.
Получается ПР100 по "физиологии" не может отдавать в сеть 32 бита за раз?
А ПР200 умеет интересно?
Всем спасибо за участие!

PS: А есть более изящный способ деления на два слова?

Алексеев
28.12.2020, 23:42
По совету capzap соорудил я такой огород :):
52824 52825 52826 52827
Зато работает.
Всем спасибо за участие!

PS: А есть более изящный способ деления на два слова?

Всё намного проще делается 52828 ОЛ един и для ПР100 и ПР200 . Аналогично придется
раскладывать на старший и младший ---- не когда с этим не сталкивался .

capzap
29.12.2020, 05:08
это точно не мой совет по битно слова разбивать), маска 16#FFFF и SHR на 16 (смещение можно заменить на деление как выше) я это имел ввиду

Алексеев
29.12.2020, 08:59
А что - ПР не может прислать 2 регистра в ответ 8( ? А как же флоаты ? Если оное - так, то в некоторых случаях это полная задница. И со счетчиками тоже может она быть иногда.
Надеюсь что это всё-таки не так. Кто-нить все-таки просветит ?
.

SLAVE только формирует регистры (ПР200 и т.д.). А MASTER определяет в каком формате считывать ( OWENCLOUD) . Поэтому методом который изложен выше можно допиливать
передачу INT32 ( UINT32) , Даже между устройствами программируемыми из ОЛ . И Я не считаю это большой проблемой ( или неудобством ).

melky
29.12.2020, 09:18
для ПР нет понятия 32-х битного регистра, так что в коде думаем. Для Scada систем фиолетово, сказали 32 бита (2 регистра прочесть) прочтет, сказали 32 бита (2 регистра) записать, запишет... Ну и float туда же...

kipiasutp
29.12.2020, 17:01
Всё намного проще делается 52828 ОЛ един и для ПР100 и ПР200 . Аналогично придется
раскладывать на старший и младший ---- не когда с этим не сталкивался .

А как мне обратную задачу решить?
Из двух регистров собрать в один красиво.

Сергей0308
29.12.2020, 18:45
А как мне обратную задачу решить?
Из двух регистров собрать в один красиво.

В ПР-е примерно как то так в обе стороны:

52843

kipiasutp
29.12.2020, 19:32
В ПР-е примерно как то так в обе стороны:

52843

Спасибо!
Разобрал, собрал все работает.

qwer4230
14.08.2022, 22:19
Можно вопрос а где находятся в библиотеке операторы and и or для целочисленных

Алексеев
15.08.2022, 05:46
Можно вопрос а где находятся в библиотеке операторы and и or для целочисленных

Подключите целочисленную переменную к and и or ( или к другой подобной логике) , она и станет для целочисленной.

qwer4230
18.08.2022, 10:37
Спасибо большое