lazarus obsługa portów COM / wysyłanie SMS

lazarus obsługa portów COM / wysyłanie SMS
S0
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 13 godzin
0

Witajcie.
Chciałem napisać programik, który będzie wysyłał SMS. Po długiej lekturze forów stwierdziłem, że najlepiej będzie obsługiwać modem GSM komendami AT.
Następny problem, to obsługa portów COM przez lazarusa. I tu również na forach znalazłem odpowiednie pakiety/komponenty: 5dpo oraz lazserial.

Po podłączeniu starego telefonu do komputera (przez USB) w menadżerze urządzeń pojawił mi się nowy port COM (COM7) oraz modem (COM8). Poprzez putty sprawdziłem, ze mam komunikacje zmodemem (odpowiadał na komendy AT). Skompilowałem przykładowy projekt z 5dpo (sertest)

screenshot-20220717195945.png

Kopiuj
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, SdpoSerial,
  StdCtrls;

type

  { TFMain }

  TFMain = class(TForm)
    BSend: TButton;
    BOpen: TButton;
    BClose: TButton;
    CBDTR: TCheckBox;
    EditSend: TEdit;
    Memo: TMemo;
    Serial: TSdpoSerial;
    procedure BCloseClick(Sender: TObject);
    procedure BOpenClick(Sender: TObject);
    procedure BSendClick(Sender: TObject);
    procedure CBDTRChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure SerialRxData(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  FMain: TFMain;

implementation

{ TFMain }

procedure TFMain.FormCreate(Sender: TObject);
begin

end;

procedure TFMain.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Serial.active := false;
end;

procedure TFMain.FormShow(Sender: TObject);
begin
//  Serial.Active := true;
end;


procedure TFMain.BSendClick(Sender: TObject);
begin
  Serial.WriteData(EditSend.Text);
end;

procedure TFMain.CBDTRChange(Sender: TObject);
begin
  Serial.SetDTR(CBDTR.Checked);
end;

procedure TFMain.BOpenClick(Sender: TObject);
begin
  Serial.Open;
end;

procedure TFMain.BCloseClick(Sender: TObject);
begin
  Serial.Close;
end;

procedure TFMain.SerialRxData(Sender: TObject);
begin
  Memo.Lines.Add(Serial.ReadData);
end;


initialization
  {$I main.lrs}

end.

Ustawiłem parametry portu COM8 dokładnie na takie same jak w putty.
Niestety program nie zadziałał. W polu Memo po prawej stronie okna miały pojawiać się komunikaty zwrotne z modemu (Memo.Lines.Add(Serial.ReadData)), ale niestety albo nie pojawia się nic, albo pojawiają się tylko stringi, które wysyłam. Nie wiem czy moje komendy docierają do modemu i problem jest tylko z czytaniem odpowiedzi, czy komponent w ogóle nie działa
Czy ktoś ma doświadczenie z pakietem 5dpo? I może mi pomóc.

Pozdrawiam Sc0li0sis

edytowany 1x, ostatnio: flowCRANE
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

Ustawiłem parametry portu COM8 dokładnie na takie same jak w putty.

  • Gdzie ustawiłeś te parametry? (nie zaszkodziłby kod źródłowy albo screenshot dla porównania z Putty)
  • Gdy uruchamiasz Twój program, Putty jest zamknięte, c'nie? (aby nie było sytuacji, w której obydwa programy próbują komunikować się z tym samym urządzeniem)

edytowany 1x, ostatnio: Patryk27
S0
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 13 godzin
1

putty jest zamknięty, gdyby był otwarty program w lazarusie nie otworzyłby portu.
Ale, w między czasie znalazłem rozwiązanie. Nie uwierzycie po prosty trzeba dodać do stringu z okienka "terminator" #1310.

Kopiuj
procedure TFMain.BSendClick(Sender: TObject);
begin
  Serial.WriteData(EditSend.Text + ''#13#10);
end;

I wszystko działa :-) - Wątek do zamknięcia
Pozdrawiam i dziękuję

edytowany 1x, ostatnio: flowCRANE

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.