|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.05.2009, 18:17 | #1 |
Регистрация: 07.05.2009
Сообщений: 5
|
Помогите с работой COM порта на Delphi7
Помогите с работой COM порта, не могу правильно написать отправку онавреммено нескольких команд на com порт, когда отправляю команды то терминал все ответы сбивает в одну строку, а мне надо чтобы каждый ответ в терминале начинался с новой строки.
Еще один вопрос, как сделать что бы ответ на команду вносился в отдельную форму, к примеру я отсылаю одновреммено 10 команд и ответ на каждую команду вносился в определенную форму. Все ответы которые получаю с порта в ASCII. Пример: uses SerialNGBasic; {$R *.DFM} procedure AddHexString(S : String; Lines : TStrings ); var AddS, HexS, CopyS : String; i : Integer; const SLen = 21; begin while Length(S) > 0 do begin AddS := Copy(S,1,SLen); HexS := ''; Delete(S,1,SLen); for i := 1 to SLen do begin CopyS := Copy(AddS,i,1); if CopyS <> '' then HexS := HexS + ' ' + Format('%2.2x',[Byte(CopyS[1])]) // else HexS := HexS + ' '; end; while Length(AddS) < SLen do AddS := AddS + ' '; for i := 1 to SLen do case AddS[i] of #0..#31 : AddS[i] := '.'; #127 : AddS[i] := '.'; end; Lines.Add('.'+AddS); end; end; procedure TForm1.BasicSettingsBtnClick(Sender : TObject); begin SerialNGBasicDLG.SetDLGData(SerialP ortNG1); if SerialNGBasicDLG.ShowModal = mrOK then SerialNGBasicDLG.GetDLGData(SerialP ortNG1); end; procedure TForm1.SerialPortNG1RxClusterEvent( Sender: TObject); begin if SerialPortNG1.NextClusterSize >= 0 then begin if SerialPortNG1.NextClusterCCError = 0 then else Terminal.Lines.Add(FormatDateTime(' ', Now)); AddHexString(SerialPortNG1.ReadNext ClusterAsString,Terminal.Lines); end; end; Кнопка отравки одной команды procedure TForm1.SendBtnClick(Sender: TObject); var SendStr : String; begin if Length(Edit1.Text) > 0 then begin SendStr := Edit1.Text; if CBAddCRLF.Checked then SendStr := SendStr+#$0d#$0a; SerialPortNG1.SendString(SendStr); end; end; Кнопка отравки нескольких команд procedure TForm1.SendStatusRequestBtnClick(Se nder: TObject); var SendStr : String; var SendStr1 : String; begin if Length('?54&0') > 0 then begin Terminal.Clear; SendStr := '?54&10'; SendStr1 := '?54&13'; if CBAddCRLF.Checked then SendStr := SendStr+#$0d#$0a; SendStr1 := SendStr1+#$0d#$0a; SerialPortNG1.SendString(SendStr); sleep(150); SerialPortNG1.SendString(SendStr1); end; end; procedure TForm1.FormDestroy(Sender: TObject); begin SerialPortNG1.Active := False; end; procedure TForm1.FormCreate(Sender: TObject); begin SerialPortNG1.Active := True; end; end. |
11.05.2009, 10:21 | #2 |
Регистрация: 07.05.2009
Сообщений: 5
|
Не ужели нет специалистов которые моглибы помочь.
|
11.05.2009, 14:15 | #3 | |
Форумчанин
Регистрация: 07.04.2009
Сообщений: 245
|
Цитата:
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
|
|
11.05.2009, 15:02 | #4 |
Регистрация: 07.05.2009
Сообщений: 5
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delphi7 помогите нарисовать линию | AlexandЯ | Помощь студентам | 15 | 12.05.2009 12:23 |
Помогите с Delphi7 | blackz | Помощь студентам | 0 | 11.04.2009 15:23 |
Как получить данные с COM-порта или другого любого порта? | DeLure | Общие вопросы C/C++ | 5 | 20.09.2007 00:50 |