shodan писал(а):sdram85 писал(а):тоесть питание не выводится. это 0 или мура какая нибудь????
Если прошивка не 17, то да. Этол либо мура от 0 до 1023, либо пустота.
Я думаю, ты попробуй пока с 17-той прошивкой, БЕЗ crc, т.е. просто игнорируй ее.
но алгоритм выборки перепиши, как я описывал [i+1], [i+2].... и т.д. (см. пару страниц назад) И обязательно проверяй, чтобы на 8мом месте был завершиющий символ. ну или на 7мом, я уже не помню, посмотри мой пост. Я ща тороплюсь.... убегаю.
Алгоритм твой (за что большое спасибо) только с отличием - E9 ловлю прям с порта а как поймал и цикла не нужно
begin
if ser.waitingdataex()>0 then // есть ли что в порте
begin
ser.recvbuffer(@buf,1); // если да то читаем 1 байт
if buf[0]=$E9 then // если байт E9 то начинаем
begin
sleep(100); // Подождать для надежности
z:=ser.Waitingdataex(); // Узнаем склько байт в буфере порта
fillchar(buf[0],100,$00); // Очищаем массив под данные
ser.recvbuffer(@buf,z); // читаем из порта данные в массив
ref:=1; // флаг что что есть новые значения
possible_tru:=0; // флаг что стандарт 0
doz_hi:=buf[0]; // читаем из массива старший байт дозы
doz_lo:=buf[1]; // читаем из массива младший байт дозы
if buf[2]=$E5 then // если байт E5 то начинаем
begin
possible_tru:=possible_tru+1; // флаг что стандарт 1
volt_hi:=buf[3]; // читаем из массива старший байт батареи
volt_lo:=buf[4]; // читаем из массива старший байт батареи
end
else // если байт не E5 то начинаем
volt_hi:=0; // значение старшего байта напряжения 0
volt_lo:=0; // значение младшего байта напряжения 0
end;
q:=doz_hi; // формируем значения
q:=(q<<8+doz_lo); //
doza:=q; // Дозы
q:=volt_hi; //
q:=(q<<8+volt_lo); //
volt:=q; // Батареи
c:=buf[5]; // читаем из массива контрольную сумму
if buf[6]=$A4 then // если байт A4 то начинаем
begin
possible_tru:=possible_tru+1; // флаг что стандарт 2
end;
Вот с этим куском ступор
// if c=(doza+volt)<<16 then // если контрольная сумма верна то
// begin
// possible_tru:=possible_tru+1; // флаг что стандарт 3
// end;
end;
синим отмечено почему важно знать или 0 всегда или мура от 0 до 1023
этот код был добавлен для того чтоб при использовании с ранними прошивками муру не выводило
сейчас тестирую на 17прошивке наряжение верно кажет, дозу тоже. CRC пока не доделано
Так как с CRC точно можно выяснить что там напруга в миливольтах. то может дописать домножение
для значения ADC для старых версий прошивки ???
флаг что стандарт 0 - первые версии, вт.ч авторская.
флаг что стандарт 1 - первые версии с измерителем напряжения. напряжение в значении ADC
флаг что стандарт 2 - то что версия 17 напряжение в мв и есть CRC
флаг что стандарт 3 - то что версия 17 напряжение в мв и CRC правильный и достоверность 100%