-
Notifications
You must be signed in to change notification settings - Fork 0
Protocol
// TODO
УДАС-03П имеет 2 блока детектирования и 4 канала:
- 1-Alpha (совмещенный), первый БД, который осуществляет оперативный контроль;
- 2-Alpha (размещенный), второй БД, который осуществляет контроль долгоживущих alpha-изотопов;
- 1-Beta (совмещенный), первый БД, который осуществляет оперативный контроль;
- 2-Beta (размещенный), второй БД, который осуществляет контроль долгоживущих beta-изотопов.
Пакет для запроса значения измерений представляет из себя 8-байтовый пакет с такой структурой:
new byte[] { address, fetchFunction, registerAddressLow, registerAddressHigh, registerCountLow, registerCountHigh, CRC16Low, CRC16High }
Для того, чтобы опросить каждый из каналов УНО с адресом 1
, нужно отправить на УНО 8-байтовый пакет:
-
1-Alpha:
new byte[] { 0x01, 0x03, 0x40, 0x04, 0x00, 0x02, 0x90, 0x0A }
-
2-Alpha:
new byte[] { 0x01, 0x03, 0x40, 0x24, 0x00, 0x02, 0x91, 0xC0 }
-
1-Beta:
new byte[] { 0x01, 0x03, 0x40, 0x14, 0x00, 0x02, 0x91, 0xCF }
-
2-Beta:
new byte[] { 0x01, 0x03, 0x40, 0x34, 0x00, 0x02, 0x90, 0x05 }
В ответ на каждый запрос придет 17-байтовый пакет, где первые 8 байтов, это ping-ответ с пакетом, который мы отправляли для запроса и вторые 9 байт сам ответ, например:
-
Запрос:
new byte[] { 0x01, 0x03, 0x40, 0x04, 0x00, 0x02, 0x90, 0x0A }
-
Ответ:
new byte[] { 0x01, 0x03, 0x40, 0x04, 0x00, 0x02, 0x90, 0x0A, 0x01, 0x03, 0x04, 0x45, 0xE6, 0xBE, 0x53, 0x3F, 0x55 }
Здесь:
-
{ 0x01, 0x03, 0x40, 0x04, 0x00, 0x02, 0x90, 0x0A }
- ping-пакет; -
{ 0x01, 0x03, 0x04, 0x45, 0xE6, 0xBE, 0x53, 0x3F, 0x55 }
- пакет с данными. Разберем его подробнее.0x01, 0x03
- также как и в предыдущих пакетах адрес УНО и функция запроса,0x04
- количество байтов данных,0x45, 0xE6, 0xBE, 0x53
- float значение, которое равно 7383,79052734375;0x3F, 0x55
- контрольная сумма CRC16.Итого пакет, который мы должны получать в ответ имеет вид:
new byte[] { address, fetchFunction, valuesByteCount, value[3], value[2], value[1], value[0], CRC16Low, CRC16High }
ВАЖНО! сами данные приходят в инвертированном виде, 4-байта данных нужно сначала инвертировать, а потом уже читать из них значение:
byte[] data = message[3..7].Reverse().ToArray(); impulse = BitConverter.ToSingle(data);
-