Форум: "Начинающим";
Текущий архив: 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.004 c