Строка идентификации: PCA-24 Бинарных регистров нет Значения хранящиеся в USHORT регистрах: регистр 0 (R/W): адрес устройства в младшем байте (адрес 0 для широковещательных запросов - отвечают все) регистр 1 (R): тип устройства - для датчиков этого типа = 9 - счётчик импульсов 2х канальный, универсальный. (Тип счётного входа - вода, электро, газ - зашивается по каналам связи)) регистр 2 (R): версия прошивки регистр 3 (R): серийный номер (старшие 16 бит), старший байт - тип устройства, то есть равен 9, собственно серийный номер занимает 24 бита регистр 4 (R): серийный номер (младшие 16 бит) регистр 12 (W): запись в этот регистр значения 0 приводит к перезагрузке, запись 4 USHORT - отрабатывается как команда поиска: сперва 1 unsigned int - mask, далее 1 unsigned int - SearchSerial (если Serial - серийный номер датчика (регистры 3 и 4), то при Serial & mask == SearchSerial - вернёт 1 байт равный 0, без заголовка и контрольной суммы, единичный ноль, если Serial & mask != SearchSerial - ответа не будет таким образом несколько датчиков могут одновременно ответить на эту команду без конфликта, что позволяет определить серийные номера всех датчиков на линии) поиск работает только при широковещательном запросе в маску включается и старший байт (задающий тип) поскольку датчики разных типов могут быть подключены к одной шине регистр 16 (W): смена адреса с фильтром по Serial: первые 4 байта задают ID, следующие 2 - новый адрес если старший байт адреса не 0 то смена адреса без записи в EEPROM (до ближайшей перезагрузки) предполагается что команда широковещательная и на неё ответит только тот у кого совпадёт ID Регистры показаний: регистр 20 (R): тип устройства - для датчиков этого типа = 9 регистр 21 (R): показания остаточного уровня заряда батарейки (формула для рассчёта приведена в Замечаниях в конце файла. регистр 22 (R): счётчик перезагрузок после последней синхронизации показаний (старший байт - канал 1, младший байт - канал 2) старший байт - количество перезагрузок датчика после последней записи значения счётчика 1 (запись в регистры 24 и 25) младший байт - количество перезагрузок датчика после последней записи значения счётчика 2 (запись в регистры 27 и 28) После синхронизации значения счётчика датчик питается от батарейки и если произошла перезагрузка питания, то он мог пропустить импульсы. То есть, если в байте соотвествующем контролируемому каналу будет не ноль, то это признак того, что показания могут быть не валидны. Если счётный канал отключен, то соответсвующий ему байт в этом регистре всегда будет равен 0 регистр 23 (R/W): младший байт - вес импульса канала 1, На прямую в работе счётчика это значение не используется. В этот байт можно записать значение в зависимости от веса импульса исходного датчика, чтобы SCADA система могла автоматически его распознать и назначить соответсвующий коэффициент преобразования показаний. старший байт - используются только старшие два бита - тип канала 1 00 - счётчик отключен 01 - счётчик воды (сухие контакты) 10 - счётчик электроэнергии - открытый сток транзистора 11 - счётчик газа (потенциал 0 - 24 вольта) регистр 24,25 (R/W): количество импульсов канала 1, старшим USHORT вперёд Возможна запись в этот регистр одной командой с кодом 16 (запись последовательности регистров) или передачей двух последовательных команд записи одиночного регистра (команда 6), при этом фактическая запись счётчика произойдёт только когда будут получены оба значения (и для регистра 24 и для регистра 25), запись должна осуществляться сперва в регистр 24, затем в регистр 25. если между этими двумя командами записи регистров будет передана команда чтения, то буферизированное значение будет забыто и фактическая запись показаний счётчика не произойдёт. регистр 26 (R/W): младший байт - вес импульса канала 2 старший байт - старшие два бита - тип канала 2 регистр 27,28 (R/W): количество импульсов канала 2, старшим USHORT вперёд (см комментарий к регистру 24) Замечания: 1) Команды записи занимают до 10 мс на 1 записываемый байт: - смена адреса - до 10 мс - запись показаний и веса импульса счётчика по двум каналам - до 80 мс остальные команды "быстрые" - задержка ответа не более 5 мс 2) Формулы для рассчёта уровня заряда батареи Напряжение на процессоре в вольтах (должно быть 3.3 вольта): 255.0f * 2.048f / HIBYTE(Reg21_Value) Reg21_Value - значение в регистре 21 HIBYTE(Reg21_Value) - старший байт значения регистра 21 LOBYTE(Reg21_Value) - младший байт значения регистра 21 Напряжение на батарейке в вольтах: level = 2.048f * LOBYTE(Reg21_Value) / HIBYTE(Reg21_Value) + 0.3f; (если передаваемое значение будет меньше 0.5 В, то скорее всего, батарейка просто отсутсвует) Уровень остаточной ёмкости батарейки в процентах: max(0, min((level - 2.8f) / (3.2f - 2.8f), 1)) * 100.0f; где level - напряжение на батарейке в вольтах