Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2009, 14:50   #1
sttauffen
 
Регистрация: 07.05.2009
Сообщений: 5
Сообщение Помогите с работой COM порта, компонет BCPort

Помогите с работой COM порта, не могу правильно написать отправку одновременно нескольких команд на com порт (?54&0; ?54&1; ?54&2; ?54&3 и т.д.) , когда отправляю команды то терминал все ответы сбивает в одну строку, а мне надо чтобы каждый ответ в терминале начинался с новой строки.

Еще один вопрос, как сделать что бы ответ на команду вносился в отдельную форму, к примеру я отсылаю одновреммено 10 команд (?54&0; ?54&1; ?54&2; ?54&3 и т.д.) и ответ на каждую команду вносился в Memo1,Memo2,Memo3 и т.д..

implementation

{$R *.DFM}
{$R Led.res}

procedure AddHexString(S : String; Lines : TStrings );
var AddS, HexS, CopyS : String;
i : Integer;
const SLen = 8;
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(HexS+' : '+AddS);
end;
end;


procedure TMainForm.FormCreate(Sender: TObject);
begin
EnumComPorts(cbPort.Items);
cbPort.ItemIndex := 0;
cbBaudRate.ItemIndex := 6;
SetLedCTS(False);
SetLedDSR(False);
SetLedRLSD(False);
end;

procedure TMainForm.btnConnectClick(Sender: TObject);
begin
BComPort1.Port := cbPort.Text;
BComPort1.BaudRate := TBaudRate(cbBaudRate.ItemIndex);
if BComPort1.Open then
begin
Edit1.Enabled := True; Edit1.Color := clWindow;
btnConnect.Enabled := False;
cbPort.Enabled := False;
btnDisconnect.Enabled := True;
cbSetDTR.Enabled := True; cbSetDTR.Checked := True;
cbSetRTS.Enabled := True; cbSetRTS.Checked := True;
btnSend.Enabled := True;
btnSend1.Enabled := True;
cbCRLF.Enabled := True;
btnClear.Enabled := True;
Memo1.Enabled := True; Memo1.Color := clWindow;
SetLedCTS(csCTS in BComPort1.Signals);
SetLedDSR(csDSR in BComPort1.Signals);
SetLedRLSD(csRLSD in BComPort1.Signals);
Edit1.SetFocus;
end;
end;

procedure TMainForm.btnDisconnectClick(Sender : TObject);
begin
if BComPort1.Close then
begin
btnConnect.Enabled := True;
cbPort.Enabled := True;
btnDisconnect.Enabled := False;
cbSetDTR.Enabled := False;
cbSetRTS.Enabled := False;
btnSend.Enabled := False;
btnSend1.Enabled := False;
cbCRLF.Enabled := False;
btnClear.Enabled := False;
Memo1.Enabled := False; Memo1.Color := clBtnFace;
Edit1.Enabled := False; Edit1.Color := clBtnFace;
SetLedCTS(False);
SetLedDSR(False);
SetLedRLSD(False);
end;
end;

procedure TMainForm.btnSendClick(Sender: TObject); //Отпрвка одной комнды
var SendStr : String;
begin
if Length(Edit1.Text) > 0 then
begin
SendStr := Edit1.Text;
if cbCRLF.Checked then
SendStr := SendStr+#$0d#$0a;
BComPort1.WriteStr(SendStr);
Edit1.Text := '';
Edit1.SetFocus;
end;
end;

procedure TMainForm.btnSend1Click(Sender: TObject); // Отправка нескольких команд
var SendStr : String;
begin
if Length ('?54&10') > 0 then
begin
SendStr := '?54&10'#$0d#$0a'?54&11'#$0d#$0a'?5 4&12'#$0d#$0a'?54&13'#$0d#$0a'?54&1 4';
if cbCRLF.Checked then
SendStr := SendStr+#$0d#$0a;
BComPort1.WriteStr(SendStr);

end;
end;

procedure TMainForm.BComPort1RxChar(Sender: TObject; Count: Integer);
var SendStr: String;
begin
BComPort1.ReadStr(SendStr, Count);
if cbCRLF.Checked then // Добавление перевода строки
SendStr := SendStr+#$0d#$0a;
Memo1.Text := Memo1.Text+SendStr;
end;

procedure TMainForm.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if BComPort1.Connected and (Key = #13) then
begin
BComPort1.WriteStr(Edit1.Text + Key);
Edit1.Text := '';
end;
end;

procedure TMainForm.cbBaudRateChange(Sender: TObject);
begin
BComPort1.BaudRate := TBaudRate(cbBaudRate.ItemIndex);
end;

procedure TMainForm.btnClearClick(Sender: TObject);
begin
Memo1.Clear;
Edit1.SetFocus;
end;
sttauffen вне форума Ответить с цитированием
Старый 13.05.2009, 12:18   #2
sneakerfile332
Заблокирован
 
Регистрация: 23.04.2009
Сообщений: 7
Плохо Wholesale Brand Handbags

We offer you Brand Handbags related with products,the Wholesale Brand Handbags picture-related products,poor prices and other information,wholesale or retail,and the Brand Handbags related products introduced, related products, please contact with sneaker-file@hotmail.com
sneakerfile332 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с работой COM порта на Delphi7 sttauffen Помощь студентам 3 11.05.2009 15:02
компонет memo kate158 Компоненты Delphi 4 01.11.2008 15:35
Как получить данные с COM-порта или другого любого порта? DeLure Общие вопросы C/C++ 5 20.09.2007 00:50