УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

чтения данных для кадра ответа (n=32)


Автор Сообщение
Сообщение создано: 22. 01. 2019 [12:07]
SergGray
Сергей Гурьянов
Создатель темы
Зарегистрирован(а) с: 02.02.2011
Сообщения: 50
Суть вопроса есть счетчик Днепр 7 для считывания показаний есть адрес 010bh с которого получаем данные: смещение 0 данные- идентификатор прибора размер 1 байт, смещение 1 данные текущий объем в литрах размер 4 байта, смещение 5 данные время наработки в секундах размер 4 байта. Пробовал читать адрес разными командами R:267:r:dn7:dn7 и другими вариантами в ответ множество данных однозначно идентифицировать которые не получается. Как написать команду чтение конкретных 4 байт из этого адреса или все данные, потом я их обработаю. Спасибо.

Вложенный файл

днепр7.jpg (Тип файла: image/jpeg, Размер: 196.71 килобайт) — 1167 загрузок
Сообщение создано: 22. 01. 2019 [12:52]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
Причём тут ModBus и описание его регистров "R:267:r:dn7:dn7"?

Learn, learn and learn better than work, work and work.
Сообщение создано: 22. 01. 2019 [13:05]
SergGray
Сергей Гурьянов
Создатель темы
Зарегистрирован(а) с: 02.02.2011
Сообщения: 50
Протокол связи у сего устройства модбас. адрес с которого начинается 32 байта данных 010bh, команда чтения регистра 03. в скаде параметр читал R:268:r:dn7:dn7 или R_s:268,20:r:str:Str Blk и другие варианты, в результате получаю множественные данные но они хаотичные. Может чего то не допонимаю подправьте пожалуйста. Скада v0.8.0.4
Вложенный файл

скада.jpg (Тип файла: image/jpeg, Размер: 245.88 килобайт) — 1159 загрузок
Сообщение создано: 22. 01. 2019 [14:53]
arcsin
Аркадий Кисель
Contributor
Зарегистрирован(а) с: 17.02.2017
Сообщения: 77
размер переменных намекает что это байты а не модбасовские двухбайтовые слова.
Если получилось прочитать строку и нулевой байт == 35 то это круто.
не уверен, но возможно решение где-то здесь:
для целого
chanel1 = s[0] | (s[1] << 8) | (s[2] << 8) | (s[3] << 8)
или наоборот
chanel1 = s[3] | (s[2] << 8) | (s[1] << 8) | (s[0] << 8)

для вещественных посмотрите на это:
http://oscada.org/wiki/Modules/FLibSYS/ru#.D0.A4.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B8_.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D1.8B_.D1.81_.D0.B2.D0.B5.D1.89.D0.B5.D1.81.D1.82.D0.B2.D0.B5.D0.BD.D0.BD.D1.8B.D0.BC

ну и навсякий случай обратить внимание https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA_%D0%B1%D0%B0%D0%B9%D1%82%D0%BE%D0%B2

[Сообщение редактировалось 2 раз(а), в последний раз 22.01.2019 в 21:45.]



8506