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

Вниз

Помогите разобраться в преобразовании   Найти похожие ветки 

 
Zheksonz   (2009-07-03 09:48) [0]

Доброе утро. Помогите, застрял я(((
для записи в COM порт используется функция ComPort.WriteStr(String_);
01 06 00 04 5000 - это первые шесть байт, 5000 имеет 2х байтовое значение, завершающими двумя байтами станут байты контрольной суммы.  

формат этой записи, правильно воспринимаемый COM портом, следующий: String_ := #01#06#00#04#19#136 + crc16(String_); // ф-ция crc16 возвращает ещё два байта, в которых контрольная сумма всего этого набора данных, которые представлены в таком же виде... Как мне преобразовывать String_овывые или Integer_овские значения в этот формат???


 
Palladin ©   (2009-07-03 09:57) [1]

Var
s:String;
n:Integer;

SetLength(s,4);
n:=5000;
Move(n,s[1],4);


 
Сергей М. ©   (2009-07-03 10:02) [2]

ComPort - это что такое ?
И почему именно WriteStr, если речь идет о передаче бинарных данных ?
У класса ComPort разве нет более подходящего для этого Write-метода ?


 
brother ©   (2009-07-03 10:03) [3]

однако это TComport...


 
Юрий Зотов ©   (2009-07-03 10:12) [4]

То есть, вопрос в том, как преобразовать десятичное число 5000 в 2 байта с содержимым #19#136 ?

Если да, то так:
Первый байт (#19) = 5000 div 256
Второй байт (#136) = 5000 mod 256

type
 String2 = string[2];

function WordToString2(Value: word): String2;
begin
 Result[1] := Char(Value div 256);
 Result[2] := Char(Value mod 256)
end;

Тест:

procedure TForm1.FormCreate(Sender: TObject);
var
 S: String2;
begin
 S := WordToString2(5000);
 Caption := Format("#%d #%d", [Ord(S[1]), Ord(S[2])])
end;


 
Zheksonz   (2009-07-03 10:12) [5]

2 Сергей

есть ф-ция:
function Write(const Buffer; Count: Integer): Integer;
она подойдёт?


 
Zheksonz   (2009-07-03 10:14) [6]

Юрий, респектищщщщщщщще!!!

Эх, не перевелись таки мастера, на Руси, матушке!!!


 
Dennis I. Komarov ©   (2009-07-03 10:15) [7]


> Сергей М. ©   (03.07.09 10:02) [2]

Как почему? Потому что гдето было нарисовано именно WriteStr, а отсюда и рождение чуда:> String_ := #01#06#00#04#19#136 + crc16(String_);. И в HEX его загоняли, и обратно тоже пытлись, ну не работает этот TComport с бинарными данными, ну не COM-port, а телеграммоприемник какой-то...


 
Dennis I. Komarov ©   (2009-07-03 10:20) [8]

Кстати вопрос для автора

> String_ := #01#06#00#04#19#136 + crc16(String_);

чему равна строка, от которой вычисляем crc?
и в дагонку - нафига оно тогда надо?


 
Сергей М. ©   (2009-07-03 10:26) [9]


> она подойдёт?


Оч даже подойдет. Для того она и предназначена)


 
Юрий Зотов ©   (2009-07-03 10:29) [10]

Люди, автор просто использовал какой-то готовый компонент с методом WriteStr - т.е., передаваемый в порт буфер должен быть представлен в виде строки. И он не знал, как сформировать часть этой строки (2 байта), в которой передаются собственно данные (десятичное число 5000). IntToStr и IntToHex здесь, естественно, не катят поскольку в эти 2 байта фактически должно быть записано символьное представление данных в 256-ричной системе счисления. Вот и вся проблема.


 
Dennis I. Komarov ©   (2009-07-03 10:33) [11]


> Юрий Зотов ©   (03.07.09 10:29) [10]

Автор просто бездумно скомировал чей-то код, и даже не посмотрел перед этим свойства и методы этого компонента, о чем в [5] и признался :)


 
orinoko   (2009-07-03 10:36) [12]

Можно чуть чуть более наглядно

type
String2 = string[2];

function WordToString2(Value: word): String2;
begin
Result[1] := Char(Hi(Value));
Result[2] := Char(Lo(Value));
end;


 
Юрий Зотов ©   (2009-07-03 10:36) [13]

> Dennis I. Komarov ©   (03.07.09 10:33) [11]

В [5] просто сказано, что у этого компонента есть еще и другой метод записи в порт (с параметрами: адрес, длина).


 
Dennis I. Komarov ©   (2009-07-03 10:40) [14]


> Юрий Зотов ©   (03.07.09 10:36) [13]

И почему тогда он был игнорирован и предпочтен другой метод?


 
Юрий Зотов ©   (2009-07-03 10:45) [15]

> Dennis I. Komarov ©   (03.07.09 10:40) [14]

Потому что имеет на это полное право. Да и нет никакой разницы - все равно содержимое буфера надо как-то формировать и при формировании у него возникла бы та же самая проблема (прямая запись в буфер числа 5000 не прокатывает из-за того, что старший и младший байты тогда поменялись бы местами).


 
Dennis I. Komarov ©   (2009-07-03 10:56) [16]


> Юрий Зотов ©   (03.07.09 10:45) [15]

Зато избавило бы от вчерашней проблемы а-ля HEX и пляски с бубнами (хотя они конечно полезные, но имхо результата вчера не дали), это раз.

То что приведено в [4], будет тупо скопировано боз всякого разбора, это два

На [8] ответа я уже и не жду, неговоря уже о типе возвращаемой crc (ну пусть Str будет, ладно), три


 
Юрий Зотов ©   (2009-07-03 11:03) [17]

А что касается префикса (#01#06#00#04) и постфикса (CRC) - да просто к порту подключен девайс с таким протоколом, вот и все.


 
Dennis I. Komarov ©   (2009-07-03 11:10) [18]


> А что касается префикса (#01#06#00#04) и постфикса (CRC)
> - да просто к порту подключен девайс с таким протоколом,
>  вот и все.

Да ради бога, не важно кто их читать будет. А вот что уйдет в порт - это извиняйте, на совести автора. А уйдет туда чушь...


 
Юрий Зотов ©   (2009-07-03 11:12) [19]

> Dennis I. Komarov ©   (03.07.09 10:56) [16]

> Зато избавило бы от вчерашней проблемы а-ля HEX и пляски с бубнами

Не избавило бы. Любой буфер, хоть в виде строки, хоть двоичный (которые, кстати, ничем по сути не отличаются) надо как-то формировать и возникает та же самая проблема. Она не в самом формировании, она в том, что автор очень слабо знаком с внутренним представлением данных в машине.

> То что приведено в [4], будет тупо скопировано боз всякого разбора

Там и разбирать нечего - все просто, как веник и код говорит сам за себя. Думаю, что только взглянув на этот код, автор уже все понял.

> неговоря уже о типе возвращаемой crc (ну пусть Str будет, ладно)

Если автор использовал метод WriteStr (на что, как уже говорилось, имеет полное право), то вполне логично использовать и CRC в виде String. Тем более, что CRC у него, как он сказал, должна быть представлена в том же 256-ричном виде (ну такой протокол у девайса, никуда не денешься).


 
Юрий Зотов ©   (2009-07-03 11:13) [20]

> Dennis I. Komarov ©   (03.07.09 11:10) [18]

> А уйдет туда чушь...

Почему?


 
Dennis I. Komarov ©   (2009-07-03 11:16) [21]


> Думаю, что только взглянув на этот код, автор уже все понял

Это иллюзии

> то вполне логично использовать и CRC в виде String

Ну путь String, я это допустил, но от чего он ее считает %)


 
Юрий Зотов ©   (2009-07-03 11:22) [22]

> Dennis I. Komarov ©   (03.07.09 11:16) [21]

> но от чего он ее считает

А это уже второй вопрос, к сабжу не относящийся. Вскоре, надо полагать, узнаем...
:o)


 
Anatoly Podgoretsky ©   (2009-07-03 11:23) [23]

> Юрий Зотов  (03.07.2009 11:22:22)  [22]

Намекаешь, что еще не вечер :-)


 
Сергей М. ©   (2009-07-03 12:05) [24]


> Zheksonz


var
 CmdPrefix: array[0..3] of byte = (01, 06, 00, 04);
 CmdData: Word = 5000;
 CmdCRC16: Word;
 ms: TMemoryStream;

..
ms.WriteBuffer(CmdPrefix, SizeOf(CmdPrefix));
ms.WriteBuffer(CmdData, SizeOf(CmdData));
CmdCRC16 := CRC16(PChar(ms.Memory));
ms.WriteBuffer(CmdCRC16, SizeOf(CmdCRC16));
ComPort.Write(ms.Memory^, ms.Size);


Вот и всё ! И ничего никуда преобразовывать не нужно)


 
Zheksonz   (2009-07-03 12:20) [25]

а вот это уже пляски с бубнами, кстати, атор этого эпитета сам решил его исполненить...

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

"но от чего он ее считает" кого ее?? и это вопрос, вообще???


 
Dennis I. Komarov ©   (2009-07-03 12:24) [26]


> "но от чего он ее считает" кого ее?? и это вопрос, вообще?
> ??

Вопрос был в [8], остальным понятно кого ее. А до этого Юрий Сергеевич прав в [22]


 
Юрий Зотов ©   (2009-07-03 12:35) [27]

> Сергей М. ©   (03.07.09 12:05) [24]

var
CmdData: Word = 5000;
CmdCRC16: Word;
..
ms.WriteBuffer(CmdData, SizeOf(CmdData));
ms.WriteBuffer(CmdCRC16, SizeOf(CmdCRC16));

В обоих случаях байты Word"а меняются местами (это же x86). Нарушение протокола.


 
Dennis I. Komarov ©   (2009-07-03 12:44) [28]


> Юрий Зотов ©   (03.07.09 12:35) [27]

Ну Вы же сами утверждали

> Там и разбирать нечего - все просто, как веник и код говорит
> сам за себя. Думаю, что только взглянув на этот код, автор
> уже все понял.


 
Zheksonz   (2009-07-03 13:02) [29]

хух... теперь вот такая кака: #1#6#0#4"#19#136", вместо #1#6#0#4#19#136... иначе говоря я формирую зтроку не из кодов этих значений, а из строковых значений. Сорри. Как исправить эту проблему???


 
Dennis I. Komarov ©   (2009-07-03 13:07) [30]


> хух... теперь вот такая кака: #1#6#0#4"#19#136", вместо
> #1#6#0#4#19#136... иначе говоря я формирую зтроку не из
> кодов этих значений, а из строковых значений. Сорри. Как
> исправить эту проблему???

У тебя ошибка в программе...
[8]-?


 
Сергей М. ©   (2009-07-03 13:08) [31]


> Юрий Зотов ©   (03.07.09 12:35) [27]


ну этот момент я упусти л..
Да в чем собссно проблема ? Долго поменять что ли порядок ? Делов то на три секунды)

var
CmdPrefix: array[0..3] of byte = (01, 06, 00, 04);
CmdData: Word = 5000;
CmdCRC16: Word;
ms: TMemoryStream;

..
ms.WriteBuffer(CmdPrefix, SizeOf(CmdPrefix));
CmdData := Swap(CmdData);
ms.WriteBuffer(CmdData, SizeOf(CmdData));
CmdCRC16 := Swap(CRC16(PChar(ms.Memory)));
ms.WriteBuffer(CmdCRC16, SizeOf(CmdCRC16));
ComPort.Write(ms.Memory^, ms.Size);



 
Zheksonz   (2009-07-03 13:11) [32]


var
 strn, Str1: string;
..................................
 ComPort.Open;
 Strn := #01#06#00#04;

 S := WordToString2(UpDown1.Position);
 Strn := Strn + Format("#%d#%d", [Ord(S[1]), Ord(S[2])]); // Format возвращает "#nn#nn", а надо бы #nn#nn

 Str1 := Strn+crc16(Strn);
 ComPort.WriteStr(Str1);
 ComPort.Close;


вот код, а сослался я на строку, т.к. переменная в которую я присваиваю это значение строковая.


 
Zheksonz   (2009-07-03 13:19) [33]

2 Сергей

Ваш вариант мне не очень подходит, т.к тогда функцию CRC16 нужно переделыват, это раз, а во вторых я не уверен, что на выходе будет нужный мне формат команды.


 
Сергей М. ©   (2009-07-03 13:24) [34]


> тогда функцию CRC16 нужно переделыват


Это еще зачем ?)


> не уверен, что на выходе будет нужный мне формат команды


А зачем гадать ?
Отлоадчик для пушкина что ли существует ?
он тебе и покажет результат..


 
Zheksonz   (2009-07-03 13:31) [35]

прблема ещё и в том, что пишу прогу на одном компе, а гоняю привод на другом, поэтому отладчик не всегда могу использовать...


 
Anatoly Podgoretsky ©   (2009-07-03 13:33) [36]

> Dennis I. Komarov  (03.07.2009 12:44:28)  [28]

Ну это он поторопился, не учел все мещающие факторы.


 
Dennis I. Komarov ©   (2009-07-03 13:37) [37]


> Сергей М. ©   (03.07.09 13:24) [34]
>
> > тогда функцию CRC16 нужно переделыват
>
>
> Это еще зачем ?)

Как зачем, он же String возвращает...


 
Dennis I. Komarov ©   (2009-07-03 13:40) [38]


> Zheksonz   (03.07.09 13:31) [35]
> прблема ещё и в том, что пишу прогу на одном компе, а гоняю
> привод на другом, поэтому отладчик не всегда могу использовать.
> ..

поэтому сперва отладчик, а потом уже "гонять"


 
Zheksonz   (2009-07-03 13:43) [39]

резюмирую... всё уже, вроде бы правильно, преобразование (n div 256)+(n mod 256) или оно же Hi(n)+Lo(n) подходит, но нужне на выходе не строка, а коды этих значений, т.е. не "#nn#nn", а #nn#nn.


 
Сергей М. ©   (2009-07-03 13:46) [40]


> Dennis I. Komarov ©   (03.07.09 13:37) [37]


А , ну да ..

Ну тоже ведь не проблема, если даже со стрингом понахреноверчено ! Пережделывать-то ее зачем ? Нехай живет себе)

var
CmdPrefix: array[0..3] of byte = (01, 06, 00, 04);
CmdData: Word = 5000;
CmdCRC16: Word;
ms: TMemoryStream;

..
ms.WriteBuffer(CmdPrefix, SizeOf(CmdPrefix));
CmdData := Swap(CmdData);
ms.WriteBuffer(CmdData, SizeOf(CmdData));
CmdCRC16 := Swap(PWord(CRC16(PChar(ms.Memory)))^);
ms.WriteBuffer(CmdCRC16, SizeOf(CmdCRC16));
ComPort.Write(ms.Memory^, ms.Size);



 
Dennis I. Komarov ©   (2009-07-03 13:48) [41]


> (n div 256)+(n mod 256)

Ты понимаешь как это работает?
Что мешает присвоить символы прям тут:
Strn := Strn + ...


 
Сергей М. ©   (2009-07-03 13:49) [42]


> отладчик не всегда могу использовать


Это почему же ?
Что мешает непосредственно перед ComPort.Write(чего-то там) посмотреть под отлачиком потрока этого "чего-то там" ?


 
Zheksonz   (2009-07-03 14:14) [43]

Dennis I. Komarov ©   (03.07.09 13:48) [41]
делаю так:
Strn := Strn + chr(lo(UpDown1.Position)) + chr(Hi(UpDown1.Position));

но на выходе неправильный результат.. видимо я что-то не так понимаю...


 
Zheksonz   (2009-07-03 14:18) [44]

Сергей М. ©   (03.07.09 13:49) [42]

я неправильно выразился, не все функции доступны в отладчике из-за отсутствия на компе COM порта.

кстати, вот процедура CRC16:

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;


 
Сергей М. ©   (2009-07-03 14:23) [45]


> не все функции доступны в отладчике из-за отсутствия на
> компе COM порта.


Нафих отладчику твой COM-порт сдался ?)
Отладчик тебе нужен лишь для того, чтобы подсмотреть содержимое того, что в действительности было бы отправлено в порт, если бы порт был)


 
Zheksonz   (2009-07-03 14:30) [46]

Сергей М. ©   (03.07.09 14:23) [45]
я не понимаю какое это имеео отношение к решению вопроса??? тем более что я пользуюсь отладчиком, если вопрос не касается прсмотра при помощи отладчика возвращаемых данных, от инвертора...


 
Сергей М. ©   (2009-07-03 14:39) [47]


> не понимаю какое это имеео отношение к решению вопроса?


Самое непосредственное - ты не видишь и не понимаешь результаты своих бубноплясок с "преобразованиями", которые, как я тебе показал выше, вобщем-то и не нужны ..
Т.е. работаешь вслепую)


> я пользуюсь отладчиком


Вот и показывай, что ты там видишь в том или ином случае ..


 
Юрий Зотов ©   (2009-07-03 14:51) [48]

> Zheksonz   (03.07.09 14:14) [43]

UpDown1.Position имеет тип Integer. Это 4 байта. Из них Вы берете младший и старший. А надо что? Надо младший и старший байты младшего слова.

Думайте.


 
Zheksonz   (2009-07-03 15:35) [49]

2 Юрий
т.е. я должен присвоить значение UpDown1.Position в двух байтовую переменную и только тогда производить div и mod 256???


 
Юрий Зотов ©   (2009-07-03 15:48) [50]

> Zheksonz   (03.07.09 15:35) [49]

Конечно. Можно и сразу выдернуть нужные байты, но через промежуточную двухбайтовую переменную - проще.


 
Dennis I. Komarov ©   (2009-07-03 15:49) [51]


> но на выходе неправильный результат.. видимо я что-то не
> так понимаю...

Потому что не разобрался как оно работает, а тупо скопипастил готовое, о вреде чего я и предупреждал. И вообще я не представляю, как можно работать с портами, при таком представлении о числах...
Берем бумажку и на ней подробно разбираем по битам что есть 5000, потом что есто Word(5000), потом что нам оттуда надо вынуть а потом...

И вообще я против string-ов... :)


> т.е. я должен присвоить значение UpDown1.Position в двух
> байтовую переменную и только тогда производить div и mod
> 256???

Нет, ты должен из "четырех байтовой" вынуть нужные байты


 
Zheksonz   (2009-07-03 15:53) [52]

так понял, что значение UpDown1.Position нужно присвоить в некую двухбайтовую переменную, после чего str := char(двухбайтовая переменная div 256) + char(двухбайтовая переменная mod 256);
только не ругайтесь))) а что является двухбайтовой переменной???


 
Сергей М. ©   (2009-07-03 16:07) [53]


> что является двухбайтовой переменной?


Тем же чем и одновайтовая, но размером в два раза больше)


 
Zheksonz   (2009-07-03 16:11) [54]

хорошо, спрошу иначе... как обьявить двухбайтовую переменную??? уж не так же как однобайтовую, только два раза???

Юрий, только на Вас надежда... ну не сталкивался я никогда с этим, хотя чувствую, что это не сложно... просто нужно знать.


 
Dennis I. Komarov ©   (2009-07-03 16:20) [55]


> хорошо, спрошу иначе... как обьявить двухбайтовую переменную?
> ?? уж не так же как однобайтовую, только два раза???

Нафига тебе двубайтовая переменная. Научись работать с числами и потом вопросы задавать не будешь. Оно же тебе все равно надо...
А для тех кто в бронепоезде в [4] переменные объявлены как Word - 16 bit


 
Сергей М. ©   (2009-07-03 16:25) [56]


> Zheksonz   (03.07.09 16:11) [54]


Мож тебе в "Школу Юрия Зотова" заглянуть ?
Прямо на "Первый урок" ?
ЮЗ тебе и ссылочку подгонит ..


 
Dennis I. Komarov ©   (2009-07-03 16:25) [57]

А завтра три байта понадобятся, будешь 3-байтовую переменную искать?


 
Zheksonz   (2009-07-03 16:27) [58]

да я пробовал уже так, объявлял промежуточную переменную s1w, типа word, потом в неё присваивал :

char(s1w div 256) + chr(s1w mod 256); а на выходе не #19#136, а $13"€"... ну это же безобразие...


 
Anatoly Podgoretsky ©   (2009-07-03 16:29) [59]

> Dennis I. Komarov  (03.07.2009 16:25:57)  [57]

А если 12 бит


 
Dennis I. Komarov ©   (2009-07-03 16:30) [60]


> ну это же безобразие...

почему? Мой квакулятор говорит что 5000 = $1388


 
Dennis I. Komarov ©   (2009-07-03 16:33) [61]


> А если 12 бит

да хоть 11, я же говорю, карандаш в зубы и вперед, до полного понимания сущностей "1 и 0"


 
Zheksonz   (2009-07-03 16:33) [62]

Анатолий, вот вы вроде бы как тут "аксакалите" по идее должны знать ответ на мой вопрос, но максимум на что можно расчитывать, от вас, это издёвка... может нарушите традицию и подскажете балбесу, что я делаю не так???


 
Zheksonz   (2009-07-03 16:37) [63]


> почему? Мой квакулятор говорит что 5000 = $1388

5000 = 1388 = #19#136 и не равно "#19#136"

вот мне нужно получить из, например, 5000 - #19#136, чтобы присвоить это значение в переменную строкового типа.


 
Dennis I. Komarov ©   (2009-07-03 16:38) [64]


> что я делаю не так?

посчетай
1 or 2 and 4 = ?
без дельфы


 
Dennis I. Komarov ©   (2009-07-03 16:40) [65]

тогда рассказывай откуда ты взял #19 и #136?


 
Zheksonz   (2009-07-03 16:42) [66]


> Dennis I. Komarov ©   (03.07.09 16:38) [64]

а вы пока скажите как преобразовать 5000 в #19#136


 
Anatoly Podgoretsky ©   (2009-07-03 16:42) [67]

> Zheksonz  (03.07.2009 16:33:02)  [62]

Ты точно хочешь это узнать?
Тогда ты занимаешься не своим делом и давно.


 
Сергей М. ©   (2009-07-03 16:43) [68]


> Zheksonz


Мне все равно не понятно, что ты вцепился мертвой хваткой в эти самые строки ?


 
Zheksonz   (2009-07-03 16:44) [69]


> Dennis I. Komarov ©   (03.07.09 16:38) [64]


честно признаюсь, что употреблял эти операторы только в условиях, поэтому поятия не имюя что получится согрешил и в делфи получил результат равный единице. В общем выражаясь преподавательским языком, я списал.


 
Dennis I. Komarov ©   (2009-07-03 16:47) [70]


> я списал

Это тут и без тебя все знают... :)


> а вы пока скажите как преобразовать 5000 в #19#136

#19#136 = #$13#$88


 
Zheksonz   (2009-07-03 16:48) [71]


> Anatoly Podgoretsky ©   (03.07.09 16:42) [67]


а как же теория относительности??? Ваши мерки это только Ваши мерки... ведь каждому своё... Для кого-то стадно не знать сколько будет корень из 1844, а для кого-то, если он у него будет грязь под ноктями...

если даже я чего-то не знаю, это не даёт Вам права судить меня за это... это даёт вам право отмолчаться, не ответив на мой вопрос или помоч мне... но никак не подкалывать меня за это, т.к. порядочные люди так не поступают.


 
Zheksonz   (2009-07-03 16:56) [72]


> #19#136 = #$13#$88

да ничего мне это не даёт... это тоже я уже получал, но мне не это нужно...

хоть кто-нибудь из тех кто принимал участие в обсуждении знает ответ на вопрос??? такое ощущение, что нет... т.к. мне не нужно #$13#$88 или "#19#136"... мне нужно из 5000 получить #19#136...


 
Dennis I. Komarov ©   (2009-07-03 17:02) [73]


> Zheksonz   (03.07.09 16:56) [72]


Ты хоть почитай, что написал, может озарение всетаки найдет:


> мне нужно из 5000 получить #19#136...


> мне не нужно #$13#$88 или "#19#136"...


> > #19#136 = #$13#$88


 
Zheksonz   (2009-07-03 17:33) [74]


> Dennis I. Komarov ©   (03.07.09 17:02) [73]


ну ок. я преобразовываю свои 5000 в шестнадцатиричное число: StrZn := IntToHex(zn, 2); на выходе 1388, как из этих 1388 получить #19#136


 
Dennis I. Komarov ©   (2009-07-03 17:41) [75]


> на выходе 1388

не ври, нету у тебя такого...


 
Dennis I. Komarov ©   (2009-07-03 17:44) [76]

хотя тут конечно есть, но это не число, это строка, а она вообще не нужна...


 
Zheksonz   (2009-07-03 17:51) [77]

а что мне нужно???


 
Dennis I. Komarov ©   (2009-07-03 17:57) [78]


> а что мне нужно???

то, что ты получил еще в [58] (только там # забыл поставить) Ты не понимаешь, что это одно и тоже только по разному отображается
т.е.
> #19#136 = #$13#$88 = #$13"€"


 
Anatoly Podgoretsky ©   (2009-07-03 18:10) [79]

> Zheksonz  (03.07.2009 16:48:11)  [71]

Тебя судить? Да я почти не принимаю участия в этом цирке, только прямой ответ по твоей просьбе.


 
Zheksonz   (2009-07-03 18:26) [80]

[79] ну оно и к лучшему, всё равно на выходе 0.


 
Юрий Зотов ©   (2009-07-03 19:25) [81]

> Zheksonz   (03.07.09 18:26) [80]

Не стоит обижаться. Понимаете, Вам действительно невозможно объяснить, потому что Вы не знаете основу, самые начала программирования - работу с данными (типы данных, их внутреннее представление, преобразование и т.п.). Изложить все это здесь невозможно, потому что по объему это несколько глав книги - ну у кого есть время писать здесь несколько глав книги? Да и незачем - ведь такие книги уже давно написаны.

С них Вам и нужно начинать, а вовсе не с Com-портов. Поверьте.


 
Zheksonz   (2009-07-04 09:38) [82]

Юрий Зотов ©   (03.07.09 19:25) [81]
я не обижаюсь, т.к. сам прекрасно понимаю, что в этом вопросе не разобрался... Просто в жизни, вообще, столько вопросов, в которых нужно было бы разобраться, что её одной может не хватить... А я не уверен, что она у меня не одна... отсюда и пробелы... При том, что я не столь одарён, я не могу себе позволить замкнуться в книгах и посвятить свою жизнь изучению тех вопросов, которые, такие как Вы, понимаете с полуслова... И мне, по большому счёту, не нужно знать какова внутренняя структура этих процессов... Т.к. мне не так часто приходится с этим сталкиваться... вот если бы я знал ответ на этот вопрос, то мне бы не составило труда управлять инвертором с компьютера, что и является моей задачей...


> С них Вам и нужно начинать, а вовсе не с Com-портов. Поверьте.

как Вы видите я использую компонент, для "общения" с COM портом, это позволяет мне не знать как он там работает, хотя кое-какое представление я имею...


> #19#136 = #$13#$88 = #$13"€"

если это так, то почему на выходе #1#6#0#4#19#136 <> #1#6#0#4#$13"€" ???


 
Sha ©   (2009-07-04 10:35) [83]

> Zheksonz   (04.07.09 09:38) [82]

Когда книжки читать будешь обрати внимание на описание RECORD.
Может очень помочь в твоем случае.


 
Zheksonz   (2009-07-04 11:36) [84]

я использовал record в обьявлении типов...

мда... по кругу хожу и никто не может помочь... в общем видать не там я задал воопрос, хоть и в ветке для начинающих...


 
Zheksonz   (2009-07-04 11:45) [85]

все мои преобразования сводятся к #$13"€", но этот формат неправильно воспринимается, поэтому мне нужно получить это же значение, только в виде #19#136


 
Сергей М. ©   (2009-07-04 15:02) [86]


> Zheksonz


Ты может быть соизволишь представить общественности фрагмент оригинального текста, описывающего протокол инф.обмена с устройством ? Без отсебячины ?)


 
Юрий Зотов ©   (2009-07-04 18:40) [87]

> Zheksonz   (04.07.09 09:38) [82]

> не могу себе позволить замкнуться в книгах и посвятить свою жизнь...
> И мне, по большому счёту, не нужно знать какова внутренняя структура...

Если Вы не профессиональный программист, то жизнь посвящать не надо. Достаточно при решении каждой конкретной задачи посвятить книгам ровно то время, которое для этой задачи требуется. Но сделать это нужно, потому что книги не ТРАТЯТ Ваше время, а, наоборот, ЭКОНОМЯТ его.

Вот смотрите - на сабжевую задачу Вы потратили уже практически неделю, а не продвинулись ни на шаг.  Значит, Вы потратили это время ВПУСТУЮ, просто ПОТЕРЯЛИ его, понимаете? И знаний не прибавилось, и задача не решена. Но если бы Вы скачали книжку (в Сети их полно) и потратили пару дней на чтение нужных для сабжа разделов (это страниц 50, вряд ли больше), то задача Ваша уже давно была бы решена (раз), решена грамотно и без глюков (два), а у Вас остались бы знания, которые ОЧЕНЬ сэкономили бы Ваше время при решении следующих задач (три).

Так что же выгоднее - тыркаться вслепую, или книжку почитать? Судите сами, но разве ЭТА ветка Вас не убеждает? Разве уже сам факт ее появления недостаточен, чтобы Вы поняли ошибочность, непрактичность и невыгодность Вашей позиции?

> я использую компонент, для "общения" с COM портом,
> это позволяет мне не знать как он там работает

Позволяет. Но компонент-то ведь еще надо ИСПОЛЬЗОВАТЬ, причем использовать ПРАВИЛЬНО, не так ли? А это не получается. И не получается только по одной причине - нет необходимого минимума знаний. И не получится до тех пор, пока этот минимум не появится.

====================

Итог - Вам жаль потратить пару дней на чтение книги, но почему-то не жаль потерять целую неделю на попытки решить задачу "методом научного тыка". Причем эту неделю Вы потеряли без всякой пользы и для себя, и для задачи. Разве это разумно?

Задайте лучше другой вопрос: "Посоветуйте, где можно скачать книгу, в которой хорошо рассказано о типах данных в Delphi, о работе с ними, об их внутреннем представлении, об их преобразовании и т.п.".


 
Sha ©   (2009-07-04 21:00) [88]

> Сергей М. ©   (04.07.09 15:02) [86]

Подозреваю, что ему надо записи без свопа передавать.


 
Zheksonz   (2009-07-04 21:31) [89]

Посоветуйте, где можно скачать книгу, в которой хорошо рассказано о типах данных в Delphi, о работе с ними, об их внутреннем представлении, об их преобразовании.

сейчас делаю так:

w: word;
..................
w := StrToInt(IntToHex(5000, 2)); //преобразовываю в шестнадцатиричный формат и получаю 1388
S := Char(Hi(w)) + Char(Lo(w));  //#5"l"


на выходе S = #5"l", хотя я точно знаю, что правильный формат записи числа 5000 - это #19#136
сейчас проверить нет возможности, поэтому подскажите плз., не будет ли ошибкой, что #5"l" <> #19#136 ???


 
Германн ©   (2009-07-04 21:37) [90]


> хотя я точно знаю, что правильный формат записи числа 5000
> - это #19#136

Ошибаешься


 
Zheksonz   (2009-07-04 21:40) [91]

т.е. #5"l" = #19#136 ???


 
Zheksonz   (2009-07-04 21:45) [92]

просто уже был вариант, что #$13"€" = #19#136 но это, к сожалению, было ошибочное мнение...


 
Германн ©   (2009-07-04 21:58) [93]


 S1, S2 : String;
 ...
 S1:=IntToStr(5000,2);
 S2:=Char(Byte(StrToInt("$"+S1[1]+S1[2])))+Char(Byte(StrToInt("$"+S1[3]+S1[4])));


 
Sha ©   (2009-07-04 21:58) [94]

> Zheksonz

Тебе не надо ничего никуда переводить, никаких строк.

1. Объяви свою команду как record-тип.
2. Каждому полю присвой нужное значение.
3. Для big-endian формата обмена переставь байты у word-полей, иначе пропусти этот пункт.
4. Используй WriteBuffer.
5. Прочти, наконец, описание типов Delphi и приемы работы с ними в любой книге по Delphi или хотя бы в справке.


 
palva ©   (2009-07-04 21:59) [95]


> т.е. #5"l" = #19#136 ???

Ну естественно, эти строки не равны.


 
Sha ©   (2009-07-04 22:00) [96]

Не забудь поставить в описании packed record


 
Германн ©   (2009-07-04 22:01) [97]


> Германн ©   (04.07.09 21:58) [93]

IntToHex, конечно.


 
Zheksonz   (2009-07-04 22:03) [98]

Sha, по моему зришь в корень, а в описании чего я должен поставить packed record???


 
Sha ©   (2009-07-04 22:05) [99]

> Zheksonz   (04.07.09 22:03) [98]

в [94], п.1


 
Amoeba ©   (2009-07-04 22:06) [100]


> Zheksonz   (04.07.09 21:31) [89]
>
> Посоветуйте, где можно скачать книгу

Например, на сайте у Анатолия Подгорецкого ...


 
Zheksonz   (2009-07-04 22:11) [101]

Германн ©   (04.07.09 21:58) [93]
Опять на выходе пресловутые: #$13"€" но это не #19#136(((


 
Sha ©   (2009-07-04 22:16) [102]

> Zheksonz

Мы тебя тоже кое о чем спросили в [86], не забыл?


 
Юрий Зотов ©   (2009-07-04 22:17) [103]

> Zheksonz   (04.07.09 21:31) [89]

> сейчас делаю так
Без малейшего понимания, что и зачем Вы делаете. Доказываю.

1. w := StrToInt(IntToHex(5000, 2));

IntToHex преобразует десятичное число 5000 в 16-ричную запись. Это действительно 1388 - но это не число 1388, а строка "1388". Далее StrToInt преобразует эту строку обратно в число. Но в строке "1388" нет знака $, указывающего, что это 16-ричная запись числа, поэтому StrToInt считает строку "1388" десятичной записью числа и в итоге получается w=1388 (десятичное).

Во-первых, это ошибка - Вы исказили исходное число (было 5000, стало 1388). Во-вторых, а почему было сразу не записать: w := 5000, без всяких преобразований туда-обратно?

Спрашивается - и чего Вы добились этими преобразованиями? Ничего, кроме ошибки (исказили исходное число).

И главный вопрос - а чего же Вы хотели этими преобразованиями добиться? Зачем Вы их делали? Вы понимаете, что Вы пишете? Вы знаете, зачем Вы это пишете?

Нет, Вы не понимаете того, что пишете. И сами не знаете, зачем Вы это пишете. Пишете наугад - авось, заработает

Идем дальше. Итак, w=1388. Это два байта, старший равен 5, а младший - 108. В символьном виде старший байт есть непечатный символ ENQ, а младший - буква l. Что Вы в итоге и получаете.

==========================

К сожалению, Dennis I. Komarov оказался прав - то что приведено в [4], Вами разобрано не было. А зря.


 
Sha ©   (2009-07-04 22:21) [104]

Интрига не хуже детектива, с интересом жду развязки.

Простите за оффтоп.


 
palva ©   (2009-07-04 22:22) [105]


> но это не #19#136

А почему вы так думаете? Кодировка первого символа совпадает, а что за символ у вас второй указан? Если "евро", то тоже совпадает.


 
Юрий Зотов ©   (2009-07-04 22:28) [106]

> Zheksonz   (04.07.09 22:11) [101]

> Опять на выходе пресловутые: #$13"€" но это не #19#136

Ошибаетесь. Это одно и то же, только в разной записи (что для Вашей задачи не играет никакой роли).


 
Zheksonz   (2009-07-04 22:31) [107]

Юрий Зотов ©   (04.07.09 22:17) [103]
да всё там понятно, и этот пример я использовал, и он, как мне показалось сначала, заработал, за тем лишь исключением, что я получил #1#6#0#4"#19#136", вместо #1#6#0#4#19#136...

w := StrToInt(IntToHex(5000, 2)); //так я получал шестнадцатиричный формат числа 5000, но т.к. мне посоветовали использовать тип word, я производил преобразование в этот тип, т.к. IntToHex возвращает строковое значение. Если есть ф-ция преобразовывающая числа в шестнадцатиричный формат и возвращала бы её в таком виде, то я бы её использовал.


 
Zheksonz   (2009-07-04 22:34) [108]

Юрий Зотов ©   (04.07.09 22:28) [106]
да, одно и то же, только этот формат не воспринимается инвертором, в отличие от #19#136


 
Юрий Зотов ©   (2009-07-04 23:05) [109]

> Zheksonz   (04.07.09 22:31) [107]

> Если есть ф-ция преобразовывающая числа в шестнадцатиричный формат
> и возвращала бы её в таком виде, то я бы её использовал.

Такой функции нет и быть не может. Потому что чисел в шестнадцатиричном формате просто не существует.

И чисел в десятичном формате тоже не существует. Чисел ни в каком формате вообще не существует. Существуют просто числа, без всяких форматов.

А вот изображение числа действительно имеет формат. Но это не само число, а его изображение - строка.

Есть 20 камней. В десятичном виде - 20. В шестнадцатиричном - 14. В двоичном - 10100. В восьмиричном - 24. Все это - строковые изображения количества камней в разных форматах. Эти изображения различаются.

Но в каком формате это количество камней ни записывай, их число все равно останется одним и тем же. Камней ни убавится, ни прибавится.


 
Юрий Зотов ©   (2009-07-04 23:09) [110]

Короче, Вам сюда:

http://www.delphikingdom.com/lyceum/seminar.asp?ID=1
http://www.delphikingdom.com/lyceum/seminar.asp?ID=4


 
Zheksonz   (2009-07-04 23:12) [111]


> Но в каком формате это количество камней ни записывай, их
> число все равно останется одним и тем же. Камней ни убавится,
>  ни прибавится.

всё правильно, но если приёмник воспринимает "изображения количества" в восьмеричном формате, то и посылать нужно в восьмиричном, а не в шестнадцатиричном, а то будет ошибка. Так и здесь, чтобы послать 5000, посылаем команду вида: #19#136, а если хотим послать 4000, то должны послать #15#160.


 
Zheksonz   (2009-07-04 23:16) [112]

все уже сказали о том, чего я не знаю, но никто так и не сказал, как из 5000 получить #19#136 или из 4000 #15#160...


 
Sha ©   (2009-07-04 23:20) [113]

> ...то и посылать нужно в восьмиричном, а не в шестнадцатиричном, а то будет ошибка.
> Так и здесь, чтобы послать 5000, посылаем команду вида: #19#136, а если хотим послать 4000, то должны послать #15#160.

Ну и в каком это коде, по-твоему?


 
Zheksonz   (2009-07-04 23:25) [114]


> Sha ©   (04.07.09 23:20) [113]


(4000 div 256) = 15
(4000 mod 256) = 160

(5000 div 256) = 19
(5000 mod 256) = 136

а что это за код, я думал мастера мне подскажут... но именно таким образом подавая, вычисляемые значения, правильно воспринимаются принимающим устройством.


 
Юрий Зотов ©   (2009-07-04 23:26) [115]

> Zheksonz   (04.07.09 23:16) [112]

> если приёмник воспринимает "изображения количества"...

Вы для начала разберитесь (и скажите здесь), что же именно воспринимает Ваш приемник - сами числа, или их строковые изображения (и если второе, то в какой системе счисления). Скорее всего, Ваш применик воспринимает все-таки сами числа.

> никто так и не сказал, как из 5000 получить #19#136
> или из 4000 #15#160...

А в [4] что написано? Но оно ли самое?


 
Юрий Зотов ©   (2009-07-04 23:28) [116]

> Zheksonz   (04.07.09 23:25) [114]

> а что это за код, я думал мастера мне подскажут...

Уже говорилось - это 256-ричная система счисления.


 
Sha ©   (2009-07-04 23:29) [117]

В том-то и дело, что это не код, а количество
Согласись, что если послать вместо #19#136 такое #$13#$88, то ничего не изменится.


 
Zheksonz   (2009-07-04 23:38) [118]


> А в [4] что написано? Но оно ли самое?

в этом примере получается "#19#136" вместо #19#136;


> Согласись, что если послать вместо #19#136 такое #$13#$88,
>  то ничего не изменится.

в том то и дело, что ничего не изменится... всё те же #$13"€"


 
Sha ©   (2009-07-04 23:40) [119]

Вот ты передаешь 01 06 00 04 5000...
Байты 01 06 00 04 - они в каком коде, по-твоему?
--
Пигма ли он? )


 
Юрий Зотов ©   (2009-07-04 23:41) [120]

> Zheksonz   (04.07.09 23:38) [118]

Скажите, что означает символ #  в записи #19#136 ?


 
Sha ©   (2009-07-04 23:48) [121]

Это просто числа, каждое размещено в одном байте, и они передаются друг за другом.
Вот также и 5000 - это просто число, размещенное в двух байтах, которые надо передать друг за другом.


 
Zheksonz   (2009-07-04 23:50) [122]


> 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


 
Zheksonz   (2009-07-04 23:54) [123]

Sha ©   (04.07.09 23:48) [121]
оооооочень похоже на правду... а как отправлять число, размещенное в двух байтах, в строковую переменную???


 
Юрий Зотов ©   (2009-07-04 23:57) [124]

> 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. Именно так оно у Вас и формируется, все должно быть нормально.


 
Юрий Зотов ©   (2009-07-04 23:59) [125]

> Zheksonz   (04.07.09 23:54) [123]

> как отправлять число, размещенное в двух байтах,
> в строковую переменную???

Блин. Еще раз - функция WordToString2 в [4] для кого писана? Что она делает?


 
Sha ©   (2009-07-05 00:03) [126]

Там SetLength пропущен


 
Zheksonz   (2009-07-05 00:04) [127]


> Именно так оно у Вас и формируется, все должно быть нормально.

как мне к #01#01#01#01 прибавить #19#136 ??? а вернее как мне получить эти самые #19#136, а не 19136 или "#19#136" или #$13"€"???


 
Юрий Зотов ©   (2009-07-05 00:05) [128]

Короче:

var
 S: string;
=====
S := #01#06#00#04 + WordToString2(5000);
S := S + CRC16(S);
ComPort.WriteStr(S);

И если в протоколе Вы ничего не напутали, то все должно работать.


 
Юрий Зотов ©   (2009-07-05 00:07) [129]

> Sha ©   (05.07.09 00:03) [126]

Там короткая 2-х символьная строка.


 
Zheksonz   (2009-07-05 00:17) [130]


> Юрий Зотов ©   (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&#152;"#0"dF&#152;"#0"Tц"#$12#0#0#0#0#0"p™G"#0"` &#152;"#0"lч"#$12#0"&аC"#0"°Y&#152;"#0"I^C"#0"Ёч"#$12#0"=_C"#0"°Y&#152;"#0"‹ЮC"# 0"Ёч"#$12#0"Ёч"#$12#0"°Y&#152;"#0#$1C


 
Германн ©   (2009-07-05 00:17) [131]


> Zheksonz   (04.07.09 22:11) [101]
>
> Германн ©   (04.07.09 21:58) [93]
> Опять на выходе пресловутые: #$13"€" но это не #19#136(((

А я то так старался! :(

P.S. Автор на форуме уже год, если не два или более. Уровень его базовых знаний за это время ничуть не изменился. Как был нулевой, так и остался. К советам по увеличению этого уровня, например путём чтения книжек, хотя бы для чайников, он остался глух. Объяснить что-то данному автору невозможно. Не потому, что он не хочет понимать, а потому, что невозможно объяснить слепому от рождения "что такое зрение". Тем более - "что такое цвет". Автору можно только либо указать на ошибку в его бредовом коде, либо дать код.  Исходя из этого я поставил пред собой задачу дать автору код, дабы прекратить захламление форума. При этом я исходил из следущего:
1. Код должен был выполнять именно "преобразование", как того и хотел автор.
2. Стиль кода должен был полностью соответствовать стилю автора, дабы выглядеть естественно в окружении строк кода самого автора.
3. Код должен был давать правильный результат.

Я то думал, что вполне нормально справился с поставленной пред собой задачей :(


 
Юрий Зотов ©   (2009-07-05 00:19) [132]

> Zheksonz   (05.07.09 00:17) [130]

На выходе чего?


 
Zheksonz   (2009-07-05 00:26) [133]


> Германн ©   (05.07.09 00:17) [131]

мда, и поспорить не с чем...


> Юрий Зотов ©   (05.07.09 00:19) [132]

сорри... лишнего мусора набросало...


 
Sha ©   (2009-07-05 00:36) [134]

> Юрий Зотов ©   (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;


 
Anatoly Podgoretsky ©   (2009-07-05 00:38) [135]

> Юрий Зотов  (05.07.2009 00:19:12)  [132]

Может код в отладчике


 
Zheksonz   (2009-07-05 00:45) [136]

function WordToString2(Value: word): String2;
begin
Result[1] := Char(Value div 256);
Result[2] := Char(Value mod 256)
end;


на выходе этой функции пусто... хотя в отладчике смотрю, значение Value наполнено. Это что может быть???


 
Sha ©   (2009-07-05 00:49) [137]

После begin добавь такой оператор:
SetLength(Result,2);


 
Zheksonz   (2009-07-05 00:52) [138]

мужики, вы не сердитесь, ну туговат я в этих вопросах... я не собираюсь это оспаривать, зато когда нужно выйти и выступить перед толпой, с речью, мои коленки не трусятся и не заикаюсь... все же мы разные и всем нам что-то свойственно, а что-то нет...


 
Zheksonz   (2009-07-05 00:55) [139]

)))
смех и грех... на выходе Strn := Strn + WordToString2(UpDown1.Position);  всё те же #1#6#0#4#$13"€" //не вот и как я бы мог разобраться если даже у Вас нифига не получается уже столько времени??? по одному и тому же кругу ходим...


 
Германн ©   (2009-07-05 00:57) [140]


> Zheksonz   (05.07.09 00:52) [138]
>
> мужики, вы не сердитесь, ну туговат я в этих вопросах...
>  я не собираюсь это оспаривать

Ты в энный раз хочешь сказать, что ты не программист и не собираешься заниматься программированием? Мы уже знаем. Но зачем тогда ты вновь и вновь пытаешься программировать лезя на форум с вопросами? Если не хочешь, но интересно, так купи книжку для чайников и читай её хоть в траспорте.


 
Германн ©   (2009-07-05 00:59) [141]


> Zheksonz   (05.07.09 00:55) [139]
>
> )))
> смех и грех... на выходе Strn := Strn + WordToString2(UpDown1.
> Position);  всё те же #1#6#0#4#$13"€" //не вот и как я бы
> мог разобраться если даже у Вас нифига не получается уже
> столько времени??? по одному и тому же кругу ходим...

Лично я пас. Надоело.


 
Sha ©   (2009-07-05 01:00) [142]

> Zheksonz   (05.07.09 00:52) [138]
> выступить перед толпой, с речью

Хотелось бы речь заслушать, с ответом на вопрос [86]


 
Zheksonz   (2009-07-05 01:02) [143]

Германн ©   (05.07.09 00:59) [141]
ты пас, потому что ты так и не понял что нужно сделать и делаешь вид, что ты типа с ними, мастерами, не хочешь разбираться в этом вопросе... Но ИХ, не обманешь ;)


 
Zheksonz   (2009-07-05 01:12) [144]


> Sha ©   (05.07.09 01:00) [142]


в общем имеется инвертор - преобразователь частоты для электродвигателя. Управление частотником производится через COM порт. Формат запроса 8 байт, т.е. в этих восьми байтах зарыт весь формат отправляемой команды. Для простоты я использую компонент управления СOM портом, у которого есть функция ComPort.WriteStr(String_);

пример отправляемой строки:
String_ := #01#06#00#04#19#136 + crc16(String_); где #19#136 - это частота вращения двигателя(5000=50 герцам), вот в этом формате мне и нужно менять частоту, например на 4000 = #15#160


 
Германн ©   (2009-07-05 01:12) [145]


> Zheksonz   (05.07.09 01:02) [143]
>
> Германн ©   (05.07.09 00:59) [141]
> ты пас, потому что ты так и не понял что нужно сделать и
> делаешь вид, что ты типа с ними, мастерами, не хочешь разбираться
> в этом вопросе... Но ИХ, не обманешь ;)

Я не с ними. Я выше их :) Они лишь Мастера Дельфи, а я ПШП!
А то что "их" не обманешь - эт точно!

P.S. Ещё чуть-чуть и можно на уровень башорга перейти. :)


 
Sha ©   (2009-07-05 01:17) [146]

> Zheksonz   (05.07.09 01:12) [144]

Тогда непонятно, почему тебя не устраивает результат [139]?
Ведь он соответствует твоему описанию.


 
Zheksonz   (2009-07-05 01:25) [147]


> Германн ©   (05.07.09 01:12) [145]

думаю моя расшифровка ПШП тебе не понравится...

ты по существу хоть слово сказал??? Или может ты понял в чём суть вопроса??? а может ты сюда зашёл, чтобы поумничать???, ведь ветка-то для начинающих... Знаешь почему меня Юрий и Sha не послали ещё??? потому что я выполняю то что они говорят, а не спрашиваю куда begin поставить, но при этом результат отрицательный... Ты же просто "воду льёшь"... Я тут больше года, как ты правильно заметил, но за это время я не видел ни одного полезного совета от тебя... Да ты и правда ПШП )))


 
Sha ©   (2009-07-05 01:28) [148]

> Zheksonz   (05.07.09 01:25) [147]

А вот это ты напрасно.
Если ветку закроют, будут правы.


 
Zheksonz   (2009-07-05 01:31) [149]


> Sha ©   (05.07.09 01:17) [146]

перечитал ещё раз свой вопрос и скажу вам, что ничего не изменилось... всё так же нужно из, например, 5000 получить #19#136, каюсь, просто думал, что обозначение #nn#nn стандартно и имеет функцию преобразования из обычного числа в формат #nn#nn.


 
Германн ©   (2009-07-05 01:31) [150]


> Sha ©   (05.07.09 01:17) [146]
>
> > Zheksonz   (05.07.09 01:12) [144]
>
> Тогда непонятно, почему тебя не устраивает результат [139]?
>
> Ведь он соответствует твоему описанию.
>

Думаю гораздо проще написать эксперт IDE, который будет показывать содержимое строковой переменной строго и только в виде #xx#xx#xx...
Ничто другое автору не понравится. И он будет обвинять в этом нас.


 
Zheksonz   (2009-07-05 01:35) [151]

Sha ©   (05.07.09 01:28) [148]
ну так я тоже так думаю... оскорблять можно только новичков и тех, кто не так способен как мы любимые... я тоже пекаря какого-нибудь закрыл бы за то, что он вообще не представляет что такое шестнадцатиричная система...


 
Германн ©   (2009-07-05 01:36) [152]


> Sha ©   (05.07.09 01:28) [148]

И это будет скорее традицией, чем прецендетом :)


> Zheksonz   (05.07.09 01:31) [149]
>
>
> > Sha ©   (05.07.09 01:17) [146]
>
> перечитал ещё раз свой вопрос и скажу вам, что ничего не
> изменилось... всё так же нужно из, например, 5000 получить
> #19#136, каюсь, просто думал, что обозначение #nn#nn стандартно
> и имеет функцию преобразования из обычного числа в формат
> #nn#nn.
>

И всё также ты ничего как не понимал раньше, так и не понял. И без базовых знаний и не сможешь понять никогда.


 
Германн ©   (2009-07-05 01:39) [153]


> Германн ©   (05.07.09 01:36) [152]

Старею, блин.
Опять пропустил букву.

В четверг получу заказанные "очки для чтения".


 
Zheksonz   (2009-07-05 01:40) [154]

Германн ©   (05.07.09 01:31) [150]
Я уже давно получил "#19#136"... а мне нужно #19#136... вот и вся разница... те, кто говорил как это сделать все получили в итоге #$13"€" а я-то в чём не разобрался??? я все рекомендации проделывал с пониманием, просто они не дали желаемого результата... так давай же скажем всё, я пас и сошлёмся на то, что обучаемый цветам слеп???


 
Sha ©   (2009-07-05 01:44) [155]

> Zheksonz   (05.07.09 01:31) [149]
> нужно из, например, 5000 получить #19#136

Получили уже, и не один раз

> Германн ©   (05.07.09 01:31) [150]
> Думаю гораздо проще написать эксперт IDE...

Еще проще функцию

> Zheksonz   (05.07.09 01:35) [151]
> я тоже пекаря какого-нибудь закрыл бы за то, что он вообще не представляет что такое шестнадцатиричная система...

У нас не приветствуется использование ненормативной лексики, высказываний личного характера.

Я спать, жаль что не удалось досмотреть до конца.


 
Zheksonz   (2009-07-05 01:47) [156]


> Получили уже, и не один раз

спасибо за время которое Вы уделили, но результат себе в актив Вы записать не сможете... мне жаль не только потому, что я не узнал ответ на свой вопрос, а и потому, что я был уверен, что Вы это сможете сделать.


 
Германн ©   (2009-07-05 01:49) [157]


> Я спать, жаль что не удалось досмотреть до конца.
>

Будь спок. До конца ещё очень далеко. Если не в этой ветке так в других.
Сей жестянщик нас так просто не оставит.


 
Zheksonz   (2009-07-05 01:57) [158]

вот вы прикольные)))
я спросил, как, например, из 5000 получить #19#136 вы мне ответили #$13"€" и удивляетесь что мне ответ не подходит... мол я ничего не понимаю... если уж на то пошло, то как преобразовать #$13"€" в #19#136 ???

ну и в довершение о том, что же у вас приветствуется:

> У нас не приветствуется использование ненормативной лексики,
>  высказываний личного характера.
</
> Сей жестянщик нас так просто не оставит.

I>


 
Sha ©   (2009-07-05 01:57) [159]

> Zheksonz   (05.07.09 01:47) [156]

Ты не понял, что мы сделали то, что ты просил. Просто, возможно, ты просил не то что надо.
Можешь убедиться в этом при помощи функции, которая отображает любую строку в твоем фирменном формате.

function ZheksonzFormat(const s: string): string;
var
 i: integer;
begin;
 Result:="";
 for i:=1 to Length(s) do Result:=Result+"#"+IntToStr(ord(s[i]));
 end;


Теперь точно спать.


 
Zheksonz   (2009-07-05 02:01) [160]

я так понимаю на выходе будет "#19#136", а мне такая строка не нужна... мне нужно, чтобы строковая переменная была наполнена #19#136, а не "#19#136"... ну неужели не понятно???


 
Zheksonz   (2009-07-05 02:02) [161]

т.е. это указатели или коды какие-то, а не символы...


 
Германн ©   (2009-07-05 02:10) [162]


> Sha ©   (05.07.09 01:57) [159]
>
> > Zheksonz   (05.07.09 01:47) [156]
>
> Ты не понял, что мы сделали то, что ты просил.

Ну я уже говорил, что "объяснить" что-то автору словами невозможно!
Пока он не уйдёт с нулего уровня.


 
Zheksonz   (2009-07-05 02:19) [163]


> Германн ©   (05.07.09 02:10) [162]

вот и у кого нулевой уровень, если вы разницу между "#19#136" и #19#136 не видите???


 
Zheksonz   (2009-07-05 02:24) [164]

для примера и я вам кое чего напишу:

ShowMessage("#19#136" + " !!! " + #19#136);


 
sniknik ©   (2009-07-05 02:38) [165]

> на выходе будет "#19#136", а мне такая строка не нужна... мне нужно, чтобы строковая переменная была наполнена #19#136, а не "#19#136"...
либо строка, либо число, и оба варианта уже были рассмотрены... только не поняты, из-за упомянутого же уже отсутствия базовых знаний.  

> ну неужели не понятно???

> для примера и я вам кое чего напишу:
> ShowMessage("#19#136" + " !!! " + #19#136);
из раннего
> то как преобразовать #$13"€" в #19#136 ???
ShowMessage("#19#136" + " !!! " + #19#136 + " !!! " + #$13"€");
круто да? а сколько попыток выше было, что это одно и то же, только представление разное. и все впустую.

толочь дальше воду в ступе, имхо, бессмысленно.
p.s.
Поросенок,
Который не мечтает стать беконом,
Бесперспективен.


 
Zheksonz   (2009-07-05 02:52) [166]

sniknik ©   (05.07.09 02:38) [165]

а ведь Вы были правы!!! ещё до [165] я сделал именно ShowMessage("#19#136" + " !!! " + #19#136 + " !!! " + #$13"€"); и ахнул.

вот этот код:#$13"€" я отправлял на КОМ порт, в необходимом формате, а результат был нулевой... может накладывались какие-то незакомментированные, экспериментальные строки, может такой формат не подходит именно для отправки сообщения через эту функцию, на ком порт, но это не срабатывало. Ну и конечно же самый, пока, реальный вариант, что баран я тупорылый, на самом деле всё уже давно готово было, а я и себе и людям мозги парю.

Всем кто пытался прибить мою головную броню, спасибо.
И кстати, у меня есть и оправдание, ну как без него в такой ситуации???

это скорее ошибка по невнимательности, чем по глупости, т.к. я чуть ли не сразу получил этот формат числа, но по невнимательности не смог им воспользоваться.


 
Zheksonz   (2009-07-05 02:59) [167]

к сожалению и сейчас проверить не могу, т.к. привод на работе, так что очередную порцию извинений прийдётся ждать пока я в реальных условиях не проверю работоспособность кода.

Юрий, Sha - персональное спасибо, в основном за то, что поверили в это безнадёжное дело.

П.С. существует ли вероятность, что при проверке окажется, что снова это не то, что нужно???


 
Юрий Зотов ©   (2009-07-05 08:06) [168]

Sha ©   (05.07.09 00:36) [134]

>> Там короткая 2-х символьная строка.
> Ну и что?

То, что длину коротких строк устанавливать можно (в пределах объявленного максимума), но не обязательно (компилятор сам разрулит). Это еще со времен TP.

Попробуй выполнить это:

function WordToString2L(Value: word): String2;
begin
 SetLength(Result, 2);
 Result[1] := Char(Value div 256);
 Result[2] := Char(Value mod 256)
end;

function WordToString2(Value: word): String2;
begin
 Result[1] := Char(Value div 256);
 Result[2] := Char(Value mod 256)
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 s: String2;
begin
 s := WordToString2L($3231); // Здесь длина устанавливается
 ShowMessage(Format("АШ. Length = %d (%d), S = %s (%d,%d)",
   [Length(s), Byte(S[0]), s, Byte(S[1]), Byte(S[2])]));
 s := WordToString2($3231); // Здесь длина НЕ устанавливается
 ShowMessage(Format("ЮЗ. Length = %d (%d), S = %s (%d,%d)",
   [Length(s), Byte(S[0]), s, Byte(S[1]), Byte(S[2])]));
end;

Результат один и тот же.


 
Sha ©   (2009-07-05 09:05) [169]

> Юрий Зотов ©   (05.07.09 08:06) [168]

Юр, подозреваю, что ты все-таки не пробовал выполнить мой код.
Твой пример лишь доказывает, что длина локальной короткой строки инициализируется максимумом, а мой - что это делается однократно.

> То, что длину коротких строк устанавливать можно (в пределах объявленного максимума),
> но не обязательно (компилятор сам разрулит). Это еще со времен TP.

Не разрулит, проверял на Delphi 7. Кстати, где-нить эта фича описана?


 
Sha ©   (2009-07-05 09:20) [170]

Кстати, вот это доказывает, что длина вообще не инициализируется.

procedure TForm1.Button2Click(Sender: TObject);
var
s: String2;
begin
ShowMessage(IntToStr(Length(s)));
end;


Этот пример у меня выводит 247. Если посмотреть асм код то оказывается дело в том в случае с WordToString2 компилятор при последующих присваиваниях будет ограничивать результат по длине (в нашем случае это 2) и работа часто оказывается ожидаемой (с вероятностью 254/256).
Но Zheksonz  в [136], похоже, добился длины строки 0


 
Sha ©   (2009-07-05 09:21) [171]

дело в том, что в случае


 
Sha ©   (2009-07-05 09:34) [172]

Вот еще пример в подтверждение неразруливаемости:

function NoLength: ShortString;
var
 i: integer;
begin
 for i:=1 to 255 do Result[i]:="a";
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 ShowMessage(IntToStr(Length(NoLength)));
end;


 
Sha ©   (2009-07-05 09:47) [173]

> Zheksonz   (05.07.09 02:01) [160]

> я так понимаю на выходе будет "#19#136", а мне такая строка не нужна... > мне нужно, чтобы строковая переменная была наполнена #19#136, а не "#19#136"... ну неужели не понятно???

Ты на миг допусти, что кому-то все может быть более понятно, чем тебе. Понятно?

Функция ZheksonzFormat из [159] отображает строку в твоем формате.
Т.е. если на входе будет #19#136, то на выходе "#19#136".
Это позволит тебе судить о корректности входной строки.


 
Zheksonz   (2009-07-05 10:27) [174]


> Т.е. если на входе будет #19#136, то на выходе "#19#136".


Caption := Format("#%d #%d", [Ord(S[1]), Ord(S[2])]) вот этот код на выходе даёт "#19#136", и при выполнении Strn = #01#06#00#04 := Strn + S = "#19#136"; //на выходе было #01#06#00#04"#19#136", и такой формат не воспринимался, в отличие от #01#06#00#04#19#136.


 
Юрий Зотов ©   (2009-07-05 10:41) [175]

> Sha ©   (05.07.09 09:05) [169]

> Юр, подозреваю, что ты все-таки не пробовал выполнить мой код.

Пробовал, чес-слово. Действительно, длина остается равной 1. Если ее устанавливать, как у тебя. А если не устанавливать, как у меня, то длина будет 2. Что и требовалось.

> Твой пример лишь доказывает, что длина локальной короткой строки
> инициализируется максимумом, а мой - что это делается однократно.

Так это и нужно было - однократная инициализация максимумом.

> Кстати, где-нить эта фича описана?

Фичу эту я помню еще со времен TP, читал где-то. Но где - сейчас, конечно фиг вспомнишь, прошло-то лет 15. Причем всегда эту фичу использовал (сам понимаешь, тысячи раз) и она всегда работала безукоризненно. Правда, с появлением в Delphi (по-моему, в D2) длинных строк короткие я уже практически не использую.

> Sha ©   (05.07.09 09:34) [172]

Убеждает. Похоже, по сравнению с TP в компиляторе что-то на этот счет изменилось. Поэтому соглашусь с тобой, что для определенности длину лучше выставлять явно. Вот еще пример для размышления на эту тему:

procedure TForm1.Button1Click(Sender: TObject);
var
 S: ShortString;
begin
 S := "Вася";
 ShowMessage(IntToStr(Length(S))); // Выводит 4
 S := "Пупкин";
 ShowMessage(IntToStr(Length(S))); //  Выводит 6
end;


 
Sha ©   (2009-07-05 10:41) [176]

> Zheksonz   (05.07.09 10:27) [174]

Не надо приводить несвязанные между собой обрывки кода и говорить "на выходе", "при выполнении", "на выходе было", "такой формат не воспринимался" без примера вызова моей функции. Это не способствует взаимопониманию.

Приведи полностью код, содержащий вызов ZheksonzFormat,
и объясни, что тебя не устраивает: передаваемый параметр, функция или возвращаемый результат?


 
Zheksonz   (2009-07-05 10:44) [177]

s := WordToString2(UpDown1.Position);
ShowMessage(ZheksonzFormat(S) + #19#136);


всё перепроверил и подтвердилось предположение, что "#19#136" - будет набором из 7ми строковых символов, а не кодом #19#136


 
Сергей М. ©   (2009-07-05 10:48) [178]


> Zheksonz   (05.07.09 01:12) [144]


Вот теперь понятно, что на самом деле требуется, с этого и надо было начинать.
А теперь скажи, на кой ляд тебе все эти "строковые преобразования" сдались, если они для выполнения задачи нужны как корове седло ?

В [40] приведен пример, делающий именно то что требуется и безо всяких "преобразований")..


 
Sha ©   (2009-07-05 10:56) [179]

> Zheksonz   (05.07.09 10:44) [177]

что конкретно неверно? результат устраивает?

> подтвердилось предположение, что "#19#136" - будет набором из 7ми строковых символов,

Ну, это все знают.

> а не кодом #19#136

Думаю, что мало кто, кроме тебя, не знает, что такое код #19#136.


 
Zheksonz   (2009-07-05 10:58) [180]


> Сергей М. ©   (05.07.09 10:48) [178]


впринципе это вариант... но вот как мне с функцией CRC16 быть???

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)); // обойтись без chr???
end;


 
Zheksonz   (2009-07-05 11:00) [181]


> Думаю, что мало кто, кроме тебя, не знает, что такое код
> #19#136.

тогда почему столько времени мне пришлось объяснять, что "#19#136" меня не устраивает???


 
Юрий Зотов ©   (2009-07-05 11:00) [182]

Народ, это либо развод, либо патология. В любом случае остается только присоединиться к Понтию Пилату.

Что я и делаю.


 
Zheksonz   (2009-07-05 11:01) [183]

// обойтись без chr??? и возвращать word???


 
Zheksonz   (2009-07-05 11:06) [184]

Юрий Зотов ©   (05.07.09 11:00) [182]
скорее паталогия, т.к. не верю я что можно так неумышленно разводить)))

Ну вот и Вы и Sha давали мне ф-ции, которые возвращали "#19#136" - скорее всего это было моей виной, но я же с самого начала признался, что к Вам я пришёл с вопросом, что это за формат #19#136 и как из 5000 получить #19#136, а не "#19#136"???


 
Anatoly Podgoretsky ©   (2009-07-05 11:07) [185]

> Юрий Зотов  (05.07.2009 11:00:02)  [182]

А я предупреждал.


 
Zheksonz   (2009-07-05 11:10) [186]

признаюсь и себе и Вам запудрило мозги то, что я как, баранище отпирался от #$13"€", но как я уже говорил, этот вариант у меня не прошёл, видать из-за невнимательности.


 
Zheksonz   (2009-07-05 11:12) [187]

Anatoly Podgoretsky ©   (05.07.09 11:07) [185]

Анатолий, посмотрите на ситуацию с другой стороны... Никто никого не заставлял здесь проводить время, но многие принимали участие в обсуждении, а значит ничего лучше, в этот момент, у них не было...


 
Sha ©   (2009-07-05 11:21) [188]

> Zheksonz   (05.07.09 11:00) [181]
> тогда почему столько времени мне пришлось объяснять, что "#19#136" меня не устраивает???

Ты не так ставишь вопрос. Все давно поняли, что требуется.
И здесь я за другим. Мне интересно,
почему ты прямо не отвечаешь на поставленные вопросы?
почему тебе никак не удается сформулировать, что тебе надо?
Заинтриговал.

> Юрий Зотов ©   (05.07.09 11:00) [182]
> Народ, это либо развод, либо патология.

Пожалуй соглашусь, но тем не менее досмотрю до конца. )


 
Юрий Зотов ©   (2009-07-05 11:25) [189]

> Zheksonz   (05.07.09 11:12) [187]
> значит ничего лучше, в этот момент, у них не было...
Действительно. По ящику всякую ерунду показывают.

> Sha ©   (05.07.09 11:21) [188]
> тем не менее досмотрю до конца.
Я тоже. Веселое шоу.


 
Anatoly Podgoretsky ©   (2009-07-05 11:28) [190]

> Zheksonz  (05.07.2009 11:12:07)  [187]

А потому и не закрыто, как берспективное.


 
Zheksonz   (2009-07-05 11:32) [191]

слушайте, так может мне сделать шоу!!! под названием "кто первый определит что это паталогия"???

вот только для этого мне нужно, чтобы участники не скромничали и в изобилии давали мне неправильные советы


 
Zheksonz   (2009-07-05 11:47) [192]

ну а за мной дело не постоит... уж я то тупить умею...


 
sniknik ©   (2009-07-05 12:35) [193]

> А потому и не закрыто, как берспективное.
а уж как хотелось!... прямо руки по локоть чесались. ;)


 
Anatoly Podgoretsky ©   (2009-07-05 12:41) [194]

> sniknik  (05.07.2009 12:35:13)  [193]

Силу воли надо воспитывать.


 
sniknik ©   (2009-07-05 12:47) [195]

> и в изобилии давали мне неправильные советы
тебе давали правильные советы, прямо начиная с [1], даже когда неясно, что нужно, кое кто "бил" в точку.
правда зря, т.к. ты глядя на правильное решение/или близкое к нему не понимал его. т.к.
> уж я то тупить умею...
ну, нашла чем гордиться.

-----------------
бабка в автобусе с длинными волосами:
- девушка передай за проезд.
парень гордо
- я не девушка!
..
- нашла чем гордиться.

p.s. а вообще не думаю, что будет еще интересное... все уже поняли с кем имеют дело. никаких бессмысленных попыток объяснить больше делать не будут, и "задача" исчерпала себя. т.что...


 
sniknik ©   (2009-07-05 12:48) [196]

> бабка в автобусе с длинными волосами:
> бабка в автобусе парню с длинными волосами:


 
Сергей М. ©   (2009-07-05 13:40) [197]


> как мне с функцией CRC16 быть?


Переделать ее так чтобы она получала параметрами адрес и размер нетипизированного буфера и возвращала результат типа Word.
Т.е. чтобы там духу строкового не было !

Дел-то на минуту)

Вот тебе "заготовка":
type
TCRC16 = Word;
..
function GetCRC16(Buffer: Pointer; Size: Integer): TCRC16;
begin
..
end;
..
var
CmdPrefix: array[0..3] of byte = (01, 06, 00, 04);
CmdData: Word = 5000;
CmdCRC16: Word;
ms: TMemoryStream;
..
ms.WriteBuffer(CmdPrefix, SizeOf(CmdPrefix));
CmdData := Swap(CmdData);
ms.WriteBuffer(CmdData, SizeOf(CmdData));
CmdCRC16 := Swap(GetCRC16(ms.Memory, ms.Size));
ms.WriteBuffer(CmdCRC16, SizeOf(CmdCRC16));
ComPort.Write(ms.Memory^, ms.Size);



Чеши репу !)


 
Zheksonz   (2009-07-05 17:12) [198]

спасибо


 
Dennis I. Komarov_   (2009-07-05 20:10) [199]


> Сергей М. ©   (05.07.09 13:40) [197]

Не, так у нас "апендицит не удаляют" ;)


 
Германн ©   (2009-07-06 01:03) [200]


> Юрий Зотов ©   (05.07.09 11:00) [182]
>
> Народ, это либо развод, либо патология.

Это не развод. Ручаюсь.
Только работники финсчётного отдела Геркулеса способны были регулярно шутить одним и тем же способом.


 
brother ©   (2009-07-06 10:59) [201]

весело тут) только я так и не понял, почему автору с Write не работается?



Страницы: 1 2 3 4 5 6 вся ветка

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

Наверх




Память: 1.04 MB
Время: 0.018 c
15-1245256088
Павел Калугин
2009-06-17 20:28
2009.09.06
Ура, я инжинер.


15-1246918524
DVM
2009-07-07 02:15
2009.09.06
Функция обратного вызова с переменным числом параметров.


15-1246890568
Unknown user
2009-07-06 18:29
2009.09.06
Онлайн хелп


10-1159541640
Godness
2006-09-29 18:54
2009.09.06
Из WordPad->OleContainer в простой текст


15-1246725022
KilkennyCat
2009-07-04 20:30
2009.09.06
Линукс. Скрипт удаления файла.