расковырял протокол (в нужной части):
посылка формируется из частей:
1. адрес железки он всегда 0х6A 0хA6
2. длина сообщения (без учета адрес железки но с учетом контрольной суммы
3. само сообщение
4. контрольная сумма.
вычисляется вот так:
- берем сумма всех чисел бит сообщения (п.3)
- прибавляем число длины сообщения (п.2)
- оставляем младшие 8 бит
код:
Код: Выделить всё
$device="6A A6";
$a=array(0xFE,0x06);
printstr($device,$a);
function printstr($device,$a)
{
printf("%s ",$device);
array_unshift($a,count($a)+1);
foreach($a as $b)printf("%02x ",$b);
printf("%02x\n",hlk_crc($a));
}
function hlk_crc($bits)
{
$sum=0;
foreach ($bits as $bit)$sum+=$bit;
$sum=$sum&0b11111111;
return $sum;
}
Код помогает не думать о всей обвзяке.
полные команды для снятия данных:
6a a6 03 fe 06 07 - дай значение выходов
6a a6 03 fe 07 08 - дай значение входов
что сыпится при событиях в эфир - ответы:
6A A6 04 07 08 00 13 -состояние входов (07 -входы; 08 (состояние первых 8 реле); 00(состояние вторых 8 реле))
6A A6 04 06 01 00 0B - состояние выходов изменилось(06 выходы 01(состояние первых 8 входов) 00 (состояние вторых 8 входов)
нумерация портов с нуля.
теперь о п.3.
само сообщение:
$a[0]=0x01; //-тип команды управляем всеми реле
$a[1]=0x02; //- 0x00 выключен, 0x01 включен, 0x02 сальто, 0x03 толчковый режим;
$a[2]=0x01; // первые 8 реле
$a[3]=0x00;// - вторые 8 реле
будут затронуты только те реле которые в 2 и 3 элементах. остальные реле не будут трогаться.