Вход

Просмотр полной версии : Настройка опроса счётчика ОВЕН СИ30 по Modbus



super100
07.09.2016, 22:09
Подключаю СИ30 по Modbus RTU к ПЛК100. Как в конфигурации (Universal Modbus Device) в CoDeSys 2.3 правильно задать опрос текущего значения? Оно имеет тип Long. Что нужно выбирать для этого регистра?

zendo057
08.09.2016, 12:46
Выбрать REAL

super100
08.09.2016, 14:58
REAL не работает. В конфигурации указал 32bit input module (тип DWORD) и всё стало ОК!

melky
08.09.2016, 15:38
а Long никогда и не был Real. так что чуть сбили вас с толку.

super100
08.09.2016, 15:58
Я ещё пока не пробовал читать Master OPC Universal Modbus server-ом. Настроил для режима slave как 4 byte (DWORD). Завтра проверю.

zendo057
09.09.2016, 10:42
а Long никогда и не был Real. так что чуть сбили вас с толку.

Если Long это Dword,то что такое Unsigned long?

zendo057
12.09.2016, 12:02
Если Long это Dword,то что такое Unsigned long?

ответте кто нибудь.

petera
12.09.2016, 12:14
ответте кто нибудь.

Unsigned - без знаковый, long - 32 бита
Это DWord или UDINT,
26353

А просто long, будет целое 32 битное со знаком, т.е. DINT.

zendo057
12.09.2016, 15:31
Unsigned - без знаковый, long - 32 бита
Это DWord или UDINT,
26353

А просто long, будет целое 32 битное со знаком, т.е. DINT.

Как тогда понять пост 3,Long указали Dword и все ОК

petera
13.09.2016, 02:32
Как тогда понять пост 3,Long указали Dword и все ОК
Не так там написано!

В конфигурации указал 32bit input module (тип DWORD) и всё стало ОК!
Ключевая фраза здесь -32bit input module
Просто в конфигурации ПЛК для модбас мастера, в нужном нам модуле 32bit input, тип переменной жестко забит как DWORD и изменить его нельзя.

Для 32 битных типов данных в КДС существуют типы DWORD, DINT, UDINT.
Для без знаковых целых чисел это DWORD и UDINT (0..4294967295), а для целых чисел со знаком - DINT(-2147483648..2147483647)
А для чисел со знаком (тип DINT) используется представление в дополнительном коде (https://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D 0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0 %B4_(%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0 %B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B8%D1% 81%D0%BB%D0%B0)). Старший, 31 бит, используется для указания знака числа. Если значение 31 бита равно 0, то в остальных разрядах записано положительное число, совпадающее с прямым кодом.
По этому пока по сети приходят числа от 0 до 2147483647, то в конфигурации в переменной в Modbus увидите это же число. Но как только придет отрицательное число, то в переменной в Modbus увидите это число в дополнительном коде, например не "-30", а "4294967266" или не "-5", а "4294967291".
Потому, что дополнительный код для "-5" это 0хFFFFFFFB, а это без знаковое число "4294967291".

Но волноваться не стоит. Это никак не влияет на результат использования такого числа в программе. Из-за неявного преобразования типов результаты арифметических операций и операции присваивания с использованием DWORD в правой части выражений вместо DINT получаются правильными без дополнительных телодвижений.

zendo057
13.09.2016, 10:51
Все понятно,спасибо.
Объясните для чего одинаковые значения и как они применяются.Левая часть все понятно стандартно, а правая?
DWORD UDINT- 32 бит
WORD UINT - 16 бит
BYTE USINT -8 бит

melky
13.09.2016, 11:04
DWORD - левая а UDINT - правая ?

U означает что будет только целочисленная переменная без знака, то есть всегда положительная

petera
13.09.2016, 11:57
Все понятно,спасибо.
Объясните для чего одинаковые значения и как они применяются.Левая часть все понятно стандартно, а правая?
DWORD UDINT- 32 бит
WORD UINT - 16 бит
BYTE USINT -8 бит

Вообще-то DWORD, WORD, BYTE и не числа вовсе

Числа - это как раз и есть UDINT, UINT, USINT.

Виталий Боднарюк
19.03.2021, 22:43
Не знаю как но хрень а не отображение получается

Валенок
19.03.2021, 23:26
............

Виталий Боднарюк
18.04.2021, 18:46
Это да. Пока не узнаешь как - всегда хрень.

PS
За 4 года некоторые бакалаврами становятся.
Но все равно - хрень.

Вижу вы дали хороший совет, а по факту, только сунули свой коментарий чтобы "насрать", для спама, 4 года моему аккаунту не означает, что я 4 года программирую������