Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.08.30;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
2-1246017930
VoyagerEternal
2009-06-26 16:05
2009.08.30
Как продолжить выполнение программы после искл. ситуации(raise)?


15-1246521108
Andy BitOff
2009-07-02 11:51
2009.08.30
Помогите найти изображение...


4-1215758422
Thunderstorm
2008-07-11 10:40
2009.08.30
OpenSSL


2-1246258682
Andrey K
2009-06-29 10:58
2009.08.30
TStringGrid, мыш, хинт


15-1246288695
Kerk
2009-06-29 19:18
2009.08.30
Работа в Питере





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский