Кстати если не хотите связываться с расчетом контрольной суммы в каждой команде, то лучше проснифить.
Каждая команда счетчику выглядит так:
[адрес счетчика: 4 байта][комманда счетчику: 1-2 байта][контрольная сумма: 2 байта], например:
00 01 0B F0 28 10 20, где:
00 01 0B F0 - адрес счетчика 068592, это последние 6 цифр серийного номера
28 - команда "запрос версии ПО"
10 20 - контрольная сумма, алгоритм - Modbus CRC, полином: 0xA001
Если CRC будет неверен, счетчик никогда не ответит. Также в PHP нет целесообразности каждый раз высчитывать контрольную сумму чтобы правильно составить последовательность посылаемых счетчику байт, достаточно один раз жестко прописать в скрипте верную комбинацию и все. Легче всего CRC расчитать с помощю калькулятора:
http://www.lammertbies.nl/comm/info/crc ... ation.html
Вводим нашу последовательность из примера выше: 00 01 0B F0 28 (тип HEX) и нас интересует CRC-16 (Modbus): 0x2010. Получаем: 00 01 0B F0 28 10 20.
Список информационных команд текущего состояния счетчика:
28 - Версия ПО
2F - Серийный номер
29 - Напряжение батареи
66 - Дата изготовления
63 - Текущие показания P, A, U
2C - Время последнего включения
2B - Время последнего выключения
21 - Текущие дата и время
24 - Автоматический перевод часов (да/нет)
27 - Показания счетчика наработки мощности за все время
32 00 - Показания счетчика наработки мощности за январь
32 01 - Показания счетчика наработки мощности за февраль
32 02 - Показания счетчика наработки мощности за март
и т.п.
Команды на программирование тарифов думаю будут не интересны.
А снифить можно с помощью
Free Serial Port Monitor