![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите разобраться в преобразовании [D7, XP]
Zheksonz © (2009-07-03 09:48:00)
Страницы: < 1 2 3 4 5 6 7 8 9 10 11 >
Доброе утро. Помогите, застрял я(((
для записи в COM порт используется функцияComPort.WriteStr(String_);
01 06 00 04 5000 - это первые шесть байт, 5000 имеет 2х байтовое значение, завершающими двумя байтами станут байты контрольной суммы.
формат этой записи, правильно воспринимаемый COM портом, следующий:String_ := #01#06#00#04#19#136 + crc16(String_);// ф-ция crc16 возвращает ещё два байта, в которых контрольная сумма всего этого набора данных, которые представлены в таком же виде... Как мне преобразовывать String_овывые или Integer_овские значения в этот формат???
Германн (2009-07-05 00:59:00) [61]
> Zheksonz (05.07.09 00:55) [139]
>
> )))
> смех и грех... на выходе Strn := Strn + WordToString2(UpDown1.
> Position); всё те же #1#6#0#4#$13'€' //не вот и как я бы
> мог разобраться если даже у Вас нифига не получается уже
> столько времени??? по одному и тому же кругу ходим...
Лично я пас. Надоело.
Германн (2009-07-05 00:57:00) [62]
> Zheksonz (05.07.09 00:52) [138]
>
> мужики, вы не сердитесь, ну туговат я в этих вопросах...
> я не собираюсь это оспаривать
Ты в энный раз хочешь сказать, что ты не программист и не собираешься заниматься программированием? Мы уже знаем. Но зачем тогда ты вновь и вновь пытаешься программировать лезя на форум с вопросами? Если не хочешь, но интересно, так купи книжку для чайников и читай её хоть в траспорте.
Zheksonz (2009-07-05 00:55:00) [63])))
смех и грех... на выходе Strn := Strn + WordToString2(UpDown1.Position); всё те же #1#6#0#4#$13'€' //не вот и как я бы мог разобраться если даже у Вас нифига не получается уже столько времени??? по одному и тому же кругу ходим...
Zheksonz (2009-07-05 00:52:00) [64]мужики, вы не сердитесь, ну туговат я в этих вопросах... я не собираюсь это оспаривать, зато когда нужно выйти и выступить перед толпой, с речью, мои коленки не трусятся и не заикаюсь... все же мы разные и всем нам что-то свойственно, а что-то нет...
Sha (2009-07-05 00:49:00) [65]После
beginдобавь такой оператор:
SetLength(Result,2);
Zheksonz (2009-07-05 00:45:00) [66]
function WordToString2(Value: word): String2;
begin
Result[1] := Char(Value div 256);
Result[2] := Char(Value mod 256)
end;
на выходе этой функции пусто... хотя в отладчике смотрю, значение Value наполнено. Это что может быть???
Anatoly Podgoretsky (2009-07-05 00:38:00) [67]> Юрий Зотов (05.07.2009 00:19:12) [132]
Может код в отладчике
Sha (2009-07-05 00:36:00) [68]> Юрий Зотов © (05.07.09 00:07) [129]
> Там короткая 2-х символьная строка.
Ну и что?
Попробуй выполнить это:
type
String2 = string[2];
function WordToString1(Value: word): String2;
begin
SetLength(Result,1);
Result[1] := Char(Value div 256);
end;
function WordToString2(Value: word): String2;
begin
Result[1] := Char(Value div 256);
Result[2] := Char(Value mod 256)
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s: String2;
begin
s:=WordToString1($3231);
s:=WordToString2($3231);
ShowMessage(s);
end;
Zheksonz (2009-07-05 00:26:00) [69]
> Германн © (05.07.09 00:17) [131]
мда, и поспорить не с чем...
> Юрий Зотов © (05.07.09 00:19) [132]
сорри... лишнего мусора набросало...
Юрий Зотов (2009-07-05 00:19:00) [70]> Zheksonz (05.07.09 00:17) [130]
На выходе чего?
Германн (2009-07-05 00:17:00) [71]
> Zheksonz (04.07.09 22:11) [101]
>
> Германн © (04.07.09 21:58) [93]
> Опять на выходе пресловутые: #$13'€' но это не #19#136(((
А я то так старался! :(
P.S. Автор на форуме уже год, если не два или более. Уровень его базовых знаний за это время ничуть не изменился. Как был нулевой, так и остался. К советам по увеличению этого уровня, например путём чтения книжек, хотя бы для чайников, он остался глух. Объяснить что-то данному автору невозможно. Не потому, что он не хочет понимать, а потому, что невозможно объяснить слепому от рождения "что такое зрение". Тем более - "что такое цвет". Автору можно только либо указать на ошибку в его бредовом коде, либо дать код. Исходя из этого я поставил пред собой задачу дать автору код, дабы прекратить захламление форума. При этом я исходил из следущего:
1. Код должен был выполнять именно "преобразование", как того и хотел автор.
2. Стиль кода должен был полностью соответствовать стилю автора, дабы выглядеть естественно в окружении строк кода самого автора.
3. Код должен был давать правильный результат.
Я то думал, что вполне нормально справился с поставленной пред собой задачей :(
Zheksonz (2009-07-05 00:17:00) [72]
> Юрий Зотов © (05.07.09 00:05) [128]
Вот что получилось на выходе(((
#1#6#0#4#$13'€'#1#0#0#0#0#0#0#0#0#0#0#0#0#0#2#0#0#3#0#0#0#3#0#0#0#$16#0#0# 0#2#0#0#0'°Y'#0'dF'#0'Tц'#$12#0#0#0#0#0'p™G'#0'` '#0'lч'#$12#0'&аC'#0'°Y'#0'I^C'#0'Ёч'#$12#0'=_C'#0'°Y'#0'‹ЮC'# 0'Ёч'#$12#0'Ёч'#$12#0'°Y'#0#$1C
Юрий Зотов (2009-07-05 00:07:00) [73]> Sha © (05.07.09 00:03) [126]
Там короткая 2-х символьная строка.
Юрий Зотов (2009-07-05 00:05:00) [74]Короче:
var
S: string;
=====
S := #01#06#00#04 + WordToString2(5000);
S := S + CRC16(S);
ComPort.WriteStr(S);
И если в протоколе Вы ничего не напутали, то все должно работать.
Zheksonz (2009-07-05 00:04:00) [75]
> Именно так оно у Вас и формируется, все должно быть нормально.
как мне к#01#01#01#01прибавить#19#136??? а вернее как мне получить эти самые #19#136, а не 19136 или '#19#136' или#$13'€'???
Sha (2009-07-05 00:03:00) [76]Там SetLength пропущен
Юрий Зотов (2009-07-04 23:59:00) [77]> Zheksonz (04.07.09 23:54) [123]
> как отправлять число, размещенное в двух байтах,
> в строковую переменную???
Блин. Еще раз - функция WordToString2 в [4] для кого писана? Что она делает?
Юрий Зотов (2009-07-04 23:57:00) [78]> Zheksonz (04.07.09 23:50) [122]
> в переменную String_ я присваиваю не '#01#01#01#01#19#136#01#01',
> а #01#01#01#01#19#136#01#01
И правильно. В чем проблема-то?
Знак # означает "символ с кодом". То есть, запись #19#136 означает: последовательность из 2-х символов с кодами 19 и 136. Это будут 2 байта, в которых записаны числа 19 и 136. Именно так оно у Вас и формируется, все должно быть нормально.
Zheksonz (2009-07-04 23:54:00) [79]Sha © (04.07.09 23:48) [121]
оооооочень похоже на правду... а как отправлять число, размещенное в двух байтах, в строковую переменную???
Zheksonz (2009-07-04 23:50:00) [80]
> Sha © (04.07.09 23:40) [119]
</I
> Юрий Зотов © (04.07.09 23:41) [120]
>
Вы как сговорившись задаёте мне вопрос, ответ на который я ищу в этом форуме, в этой теме ))) Поэтому и вопросом было как преобразовать 5000 в #19#136
Сам инвертор принимает 8 байт. для отправки этих 8 байт на COM порт я использую ф-циюComPort.WriteStr(String_);
в переменную String_ я присваиваю не'#01#01#01#01#19#136#01#01', а
#01#01#01#01#19#136#01#01