AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
Dies ist der richtige Weg.
Der Moxa setzt TCP/IP zu RS232 absolut zuverlässig um. Da müsst ihr in der Umsetzung des Herstellerprotokolls ein Problem haben. Was lief denn nicht wie erwartet? Was ist es denn für ein Protokoll? Ascii oder Binär. Und wie habt Ihrs versucht? Nachtrag: Einfacher Test: Eine Brücke an der seriellen Schnittstelle des Moxa RX und TX machen. Dann via TCP/IP etwas senden. Das Echo ist das gesendete an die serielle Schnittstelle. |
AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
Hier mal unser mittlerweile durch die ganzen Versuche verhunster Code um hoffentlich einen kleinen Einblick auf unsere Versuche zu bekommen.
Delphi-Quellcode:
Zurzeit angeschlossen ist ein riesen Switch, bei einer Eingabe wird der Login erfragt, so sehen wir ob was zurück kommt. Nach einer Zeit und einigen Passwort-Abfragen hängt sich die Anwendung auf und tut nichts mehr.
procedure TForm1.Button1Click(Sender: TObject);
var sSend: string; sRecieve: string; begin sSend := Edit1.Text + '#13'; IdTCPClient1.IOHandler.WriteLn(sSend); // sRecieve := IdTCPClient1.IOHandler.ReadLn(); // Memo1.Lines.Add(sRecieve); // sRecieve := IdTCPClient1.IOHandler.ReadLn(); // Memo1.Lines.Add(sRecieve); end; procedure TForm1.CloseButtonClick(Sender: TObject); begin IdTCPClient1.Disconnect(); end; procedure TForm1.FormCreate(Sender: TObject); begin Memo1.Clear(); end; procedure TForm1.IdIOHandlerStack1Status(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string); begin sleep(1000); end; procedure TForm1.IdTCPClient1Connected(Sender: TObject); begin Memo1.Lines.Add('Connected'); end; procedure TForm1.IdTCPClient1Disconnected(Sender: TObject); begin Timer1.Enabled := False; Memo1.Lines.Add('Disconnected'); end; procedure TForm1.OpenButtonClick(Sender: TObject); begin IdTCPClient1.Host := '10.20.40.220'; // IdTCPClient1.Port := 23; // Telnetport; IdTCPClient1.Port := 4001; IdTCPClient1.Connect(); sleep(1000); IdTCPClient1.IOHandler.WriteLn(chr(13)); Timer1.Enabled := True; end; procedure TForm1.Timer1Timer(Sender: TObject); var iInfo: integer; bInfo: boolean; sSend: string; sRecieve: string; I: integer; iBufSize: integer; begin Timer1.Enabled := False; // iInfo := IdTCPClient1.IOHandler.ReadTimeout; // ist immer 3000 (3sek) // bInfo := IdTCPClient1.IOHandler.ReadLnTimedout; // stürzt ebenfalls ab ??? // bInfo := IdTCPClient1.IOHandler.Readable(10); // stürzt ebenfalls ab ??? // label1.Caption := '0'; // if bInfo then // label1.Caption := '1'; // application.processmessages; // sleep(1000); // while bInfo do // begin // sRecieve := IdTCPClient1.IOHandler.ReadLnRFC(bInfo); // Memo1.Lines.Add(sRecieve); // end; // I := IdTCPClient1.IOHandler.ReadTimeout; // showmessage(IntToStr(I)); if IdTCPClient1.IOHandler.Readable() then begin // iBufSize := IdTCPClient1.IOHandler.RecvBufferSize; // sRecieve := IdTCPClient1.IOHandler.ReadLn(); sRecieve := IdTCPClient1.IOHandler.readString(100); // 6000 Memo1.Lines.Add(sRecieve); end; // IdTCPClient1.IOHandler.rea Timer1.Enabled := True; end; |
AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
Sieht ja abenteuerlich aus.
Aber mal davon abgesehen: Das was mit Button1 gesendet wird entspricht dem Protokoll des Subsystems? Demzufolge ist es ein Ascii Protokoll mit abschliessendem CR. Falls ja antwortet das System korrekt? Und was heisst hängt sich auf? Nachtrag: Lade Dir mal einen neutralen TCP Client herunter z.b. den Hercules. Benötigt kein Setup kann einfach gestartet werden. Sende mal mit dem Deine Anfrage(n) um andere Fehler auszuschliessen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz