пятница, 17 октября 2014 г.

Счетчик СЕ-306

Привет всем читающим!

Здесь я попытаюсь подвести некоторые итоги по написанию подпрограммы мониторинга счетчика СЕ-306 для системы "АСК-Дизайн".

Устройство мониторится по RS-485 . Отдельное описание протокола производитель, видимо, поленился делать, поэтому используем то, что есть. О 306-м там нет ни слова, но можно смотреть на то, что написано про СЕ-301. По бОльшей части это всё правда - из того, что сделал - список ниже - не удалось реализовать только лишь Ping  в варианте broadcasting и ReadRelayConf - обе команды возвращают ошибку. Успешно у меня реализованы следующие команды (на С).

ReadConfig,
Version,
ReadRTCCorrection,
ReadSubscriberNumber,
ReadSerialNumber,
ReadRelayState,
ReadDateTime,
ReadBatRes,
ReadMeterCode,
ReadCurTariff,
ReadAvrPower,
ReadTariffSumOfDay,
ReadTariffValue,
ReadTariffSum,
ReadTariffCommon,
ReadPower,
ReadEnergyOfDays,
ReadMaxEnOfDay,
ReadMaxEnMon,
ReadJournalEvent.

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

Пароль на чтение успешно устанавливается командой WritePsw  или AdminTools. При чтении счетчик проверяет соответствие пароля, НО несоответствие обнаруживается, только если в запросе передан ненулевой пароль, не совпадающий с записанным (о чем в журнале счетчика появляется соответствующая запись), то есть нулевой пароль в запросе на чтение работает всегда. AdminTools не сохраняет установленный пароль, а передаёт в команде нулевой. Вот как это выглядит:


Кроме того, команда Ping (not broadcast, broadcast вообще не реализован) работает в любой ситуации - то есть для неё пароль не проверяется, хотя по писанию должен.

Пароль на запись? Догадайтесь сами.....)