Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите разобраться в преобразовании [D7, XP]


Страницы:   1 2 3 4 5 6 7 8 9 10 11

Zheksonz ©   (2009-07-03 09:48:00) 

Доброе утро. Помогите, застрял я(((
для записи в 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


Страницы:   1 2 3 4 5 6 7 8 9 10 11

Наверх

Титульная страница Поиск, карта сайта Написать письмо