PDA

Просмотр полной версии : с 0 регистра читаются странные цифры


galust
07.07.2017, 15:53
Что должно быть за число, если регистр считать целиком как uint16 ?

Михаил
07.07.2017, 16:11
uint16 - числа от 0 до 0xFFFF

galust
07.07.2017, 20:19
Я прекрасно понимаю диапазон возможных значений 2х байт.

По документации в input register 0
Может быть довольно ограниченный набор значений.
В старшем байте 1 или 2, в младшем 1,2 или 3.
Так вот, если мы этот регистр, именно ir0 прочитаем целиком, как тип данных uint 16 то у меня все 6 возможных вариантов результата в десятичной системе: 257, 258 и 259, а так же 513,514 и 515. Я прав?

Михаил
07.07.2017, 20:28
0x0102 - в старшем 1, в младшем 2

Chell
07.07.2017, 20:52
В старшем байте не 1 или 2, там гораздо больше, т.к. контроллер постоянно модифицитовался. Другое дело, что документация не обновлялась, печально.., отсюда и непонятки.

galust
07.07.2017, 22:00
Ок, тогда почему мне по 0му регистру приходит ответ либо 6250, либо 8750, что в hex 186A и
222e соответственно?

Chell
08.07.2017, 11:38
Тогда, возможно, Step прояснит, что это за тип контроллера и его модификация...

Step
08.07.2017, 13:14
Ещё б знать с какого устройства автор топика читает и чем.

galust
08.07.2017, 14:49
С logic machine по rs-485, нам нужно как минимум уметь включить и выключить установку, задать скорость вращения вентилятора (это через holding регистры) так же нужно считать статус скорости и работы установки (через input). Об ошибках я уже молчу. Для этого придется штатную панель оставлять.

Михаил
08.07.2017, 15:11
Какая модель вентустановки?

galust
08.07.2017, 15:16
550 lux

Михаил
08.07.2017, 15:21
Там другой контроллер
http://jetlogic.ru/downloads/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D 1%82%D0%B2%D0%B0%20%D0%B8%20%D0%B8%D0%BD%D1%84%D0% BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F/JL204C5.html

alex13mitht
10.07.2017, 13:47
Там другой контроллер
http://jetlogic.ru/downloads/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D 1%82%D0%B2%D0%B0%20%D0%B8%20%D0%B8%D0%BD%D1%84%D0% BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F/JL204C5.html

День добрый, Михаил. Galust ретранслировал Вам мои вопросы.
попытался я поработать с контроллером по новой ссылке. и опять неудача.

начал с INPUT [50]
Формат: IO_DATA

если я правильно понял, то нужно прочитать два регистра подряд (50 и 51) соответственно. значение температуры должно храниться в виде целочисленного в десятых градусах цельсия.
при попытке считать как int32 с прямым порядком регистров и байтов получаю 98303 (9830 градусов как -то многовато).
если пытаюсь менять порядок слов и байтов, получаю еще более громоздкие цифры.

попытался считать год производства контроллера
INPUT [65009]
Формат: UINT32
в ответ приходит 0
попытался считать серийный номер.
INPUT [65001]
Формат: UINT32
в ответ приходит 1

судя по инструкции нумерация регистров начинается с 0, в нашем контроллере тоже. так что сдвигать номер регистра думаю не нужно.

коллеги выручайте. задача то простая вроде

Михаил
10.07.2017, 14:02
В регистре 50 хранится температура, а в 51 - статус. Если младший байт рег. 51 равен 1, то данные в рег. 50 корректны. Структура рег. 51 (и всех аналогичных):
// IO_Data
typedef struct
{
uint16_t value;
uint8_t status;
const uint8_t type;
} IO_Data;

// Значения поля status
#define STATUS_FALSE 0 //Лог.0 (для дискретных каналов)
#define STATUS_OK 1 //Все хорошо
#define STATUS_NDEF 2 //Данные не достоверны (опрос не завершен,
значение не вычислено и т.д.)
#define STATUS_OFF 3 //Опрос отключен или канал отсутствует
физически
#define STATUS_BREAK 8 //Обрыв на линии
#define STATUS_SHORT 9 //КЗ на линии
#define STATUS_OVERLOAD 10 //Перегрузка дискретного/аналогового вывода,
перегрузка аналогового ввода
#define STATUS_FAIL 11 //Канал неисправен
#define STATUS_CH_NAL 12 //Ошибка конфигурирования или ОК!


// Значения поля type
#define SDT_UNSIGNED 0x00
#define SDT_SIGNED 0x80

alex13mitht
10.07.2017, 14:16
ок, в 51м регистре действительно 1
но по 50-му у меня возвращается 32767 при чтении как int16 или uint16.
опять получается 3276,7 градуса какое-то большое значение.

и что с регистрами года контроллераи и серийного номера.
их я пытаюсь считать чтобы понять, работает ли вообще связь, так как по ним я точно должен однозначные данные получать.

Михаил
10.07.2017, 14:26
Там тип SIGNED, т.е. число со знаком, но значение 32767 действительно странно. Какое значение отображается для этой температуры на пульте?

Step
10.07.2017, 14:27
А штатный пульт какую температуру отображает? Он как раз из этого регистра должен читать.

alex13mitht
10.07.2017, 14:44
Коллеги, я тестирую связь по удаленке, и даже не знаю где сам объект.
насколько знаю сам пульт сейчас отключен и вместо него подключен наш контроллер (если интересно дам ссылку на девайс).

может все же для начала понять почему год не читается и серийный номер?
ведь эта информация должна быть статична в отличии от температуры.

Step
10.07.2017, 14:50
Можете дать ссылку, на месте проще разобраться.

alex13mitht
10.07.2017, 15:36
Можете дать ссылку, на месте проще разобраться.

вроде отправил Вам личным сообщением, проверьте.

alex13mitht
10.07.2017, 16:31
Уважаемые коллеги, спасибо за оперативную помощь. из-за перевода интерфейса контроллера спутал input и holding регистры. сейчас и год и температура корректно читаются.