Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.30;
Скачать: CL | DM;

Вниз

strn:=#01#06#00#04#19#136;   Найти похожие ветки 

 
Zheksonz   (2009-07-01 19:24) [0]

strn: string;

ошибку при присвоении не выдаёт, но при просмотре переменной выдаёт пустую строку...  Почему?


 
palva ©   (2009-07-01 19:32) [1]

При просмотре чем? Наверно потому что просматривать можно печатаемые символы, а ваша строка состоит из двух непечатных. Символ #00 ограничит просмотр. Может быть отладчик даст вам просмотреть ее шестнадцатиричный вид? Тогда и увидите, что хотите.


 
{RASkov} ©   (2009-07-01 19:35) [2]

> Символ #00 ограничит просмотр


> strn:=#01#06#00#04#19#136;

Уже конец строки


 
{RASkov} ©   (2009-07-01 19:39) [3]

> Уже конец строки

Хотя нет, погорячился я.... а вот в [1] все верно сказано.


 
Zheksonz   (2009-07-01 19:50) [4]

palva ©   (01.07.09 19:32) [1]
к сожалению моя чукча... моя твоя не понимать...

имеется ф-ция записи в ком порт:

procedure TForm1.Button_SendClick(Sender: TObject);
var
 Strn,Str1: String;
begin
 ComPort.Open;
 Strn := #01#06#00#02#00#00;
 Str1 := Strn+crc16(Strn);
 ShowMessage(crc16(Strn));
 ComPort.WriteStr(Str1);
 ComPort.Close;
end;


вот я и хотел посмотреть пошагово что там пишется...


 
Anatoly Podgoretsky ©   (2009-07-01 19:54) [5]

Что творит.


 
Сергей М. ©   (2009-07-01 19:58) [6]


> ошибку при присвоении не выдаёт


И не должен.


> при просмотре переменной выдаёт пустую строку


Кто смотрит-то ?
И что должен был увидеть ?


 
Zheksonz   (2009-07-01 20:10) [7]

Удалено модератором


 
Игорь Шевченко ©   (2009-07-01 20:31) [8]

глаза не той системы


 
Германн ©   (2009-07-02 01:00) [9]


> Zheksonz   (01.07.09 19:50) [4]
>
> palva ©   (01.07.09 19:32) [1]
> к сожалению моя чукча... моя твоя не понимать...
>
> имеется ф-ция записи в ком порт:
>
> procedure TForm1.Button_SendClick(Sender: TObject);
> var
>  Strn,Str1: String;
> begin
>  ComPort.Open;
>  Strn := #01#06#00#02#00#00;
>  Str1 := Strn+crc16(Strn);
>  ShowMessage(crc16(Strn));
>  ComPort.WriteStr(Str1);
>  ComPort.Close;
> end;
>
> вот я и хотел посмотреть пошагово что там пишется...

CRC16 выбран по уму или от балды? Если от балды, то стоит попробовать вернуться в прошлое к ShortString.


 
Zheksonz   (2009-07-02 12:34) [10]

function TForm1.crc16(seq:string):string;
var
 i,j:integer;
 CRC:word;
const
 CRC_st:word=$FFFF;
 CRC_1:word=$A001;
begin
 CRC:=CRC_st;
 for i:=1 to (length(seq)) do
   begin
     CRC:=CRC xor ord(seq[i]);
       for j:=1 to 8 do
       begin
         if (CRC and 1)>0 then
         begin
           CRC:=CRC shr 1;
           CRC:=CRC xor CRC_1;
         end
         else CRC:=CRC shr 1;
       end;
   end;
   result:=chr(lo(CRC))+chr(hi(CRC));
end;

ф-ция crc16


 
orinoko   (2009-07-02 15:11) [11]

var scrc: string;

...
scrc:=crc16(Strn);
SendMessage("$" + IntToHex(ord(scrc[1]),2) + " $" + IntToHex(ord(scrc[2]),2));
ComPort.WriteStr(Strn + scrc);
...

Как то так. Если быстро и для контроля. Вот только для контроля чего? Если просто убедиться, что CRC считается правильно, то, если расчёт составлен по алгоритму Motorola, тогда для контроля целостности пакета проверить CRC всего пакета(вместе с CRC). Он должен быть равным нулю. Или #0#0 в вашем случае. Если интересно, вот моя реализация расчёта CRC16. Она обладает этим свойством.

//Вычисление CRC строки
function CRC16(const S:string):string;
var i,b: integer;
     t: byte;
     c: word;
begin
c:=0;
for i:=1 to length(s) do
  begin
  t:=ord(S[i]);
  for b:=1 to 8 do
     begin
     c:=(c shl 1)xor($8005*((t xor Hi(c))and $80)shr 7);
     t:=t shl 1;
     end;
  end;
result:=Chr(Hi(c))+Chr(Lo(c));
end;


 
Zheksonz   (2009-07-02 16:06) [12]

спасибо, это то, что нужно


 
RWolf ©   (2009-07-02 16:31) [13]


> Она обладает этим свойством.

Функция топикстартера этим свойством тоже обладает.



Страницы: 1 вся ветка

Текущий архив: 2009.08.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
2-1246467765
AlexDan
2009-07-01 21:02
2009.08.30
Преобразование строки..


2-1246437194
abhtr
2009-07-01 12:33
2009.08.30
Как программно нажать клавиши Alt+стрелка вниз


15-1246084179
@!!ex
2009-06-27 10:29
2009.08.30
KVM с автоматическим переключением мышки


2-1246549168
vslabchenko
2009-07-02 19:39
2009.08.30
Парадокс с ShellExecute


2-1246349487
a.a.j.
2009-06-30 12:11
2009.08.30
Загрузить html из файла в WB и обновить данные с сервера