Delphi-Version: XE
Moxa NPort 5150 mit IPSerial auf Windows Server 2008
Guten Tag,
wir versuchen im Moment unsere COM-Schnittstellen ans Netz zu bringen. Dafür nehmen wir den NPort 5150 von Moxa. Dieses Gerät ermöglicht es, die Daten der COM-Schnittstelle quasi als TCP-IP Dienst zu verwenden. Über Hyperterm kommen wir auch ohne Probleme auf das daran angeschlossene Gerät. Mit Delphi waren wir bisher leider nicht so erfolgreich. Es gibt ein Beispielprojekt welches leider auch überhaupt nicht funktioniert. Es scheitert direkt schon am Anfang:
Delphi-Quellcode:
Das sind die ersten Zeilen, es wird eine IP als ein null terminierter String übergeben, dazu der Port den wir auch mit Hyperterm getestet haben sowie der Timeout. Das nsio_open ist eine Methode aus der IPSerial.dll (wo wir auch verschiedene DLLs ausprobiert haben). Der Returncode ist -2 (Bad Parameter), ungültige Eingaben geben einen anderen Code zurück.
nsio_init();
ip := Edit1.Text; Val(Edit2.Text, pid, code); ret := nsio_open(PChar(ip), pid, 3000); // -2: Bad Parameter Ersteinmal die Frage: Hat jemand schonmal mit IPSerial bzw. eventuell auch NPort gearbeitet und einen Hinweis? Wenn ihr noch nicht damit gearbeitet habt, kennt ihr Alternativen um über TCP-IP auf die COM-Schnittstelle (wie Hyperterm) zuzugreifen? Die Indy-Komponente haben wir schon ausprobiert, da kriegen wir auch was zurück aber leider ist das nicht brauchbar und unzuverlässig. Beste Grüße Matthias |
AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
Wie ist denn
Delphi-Quellcode:
deklariert?
nsio_open()
|
AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
|
AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
Auf jeden Fall steht dort
Code:
und nicht
char
Code:
. Deshalb wäre in Delphi > 2007
wchar_t
Delphi-Quellcode:
zu verwenden.
PAnsiChar
|
AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
Mir ist nicht ganz klar was Ihr machen wollt.
Wir arbeiten seit Jahren mit Moxa N-Ports. Es gibt zwei Anwendungen (Voraussetzung: Das Subsystem kann nur RS232 oder RS485). 1. Ihr habt eine bereits entwickelte Software welche nur über RS232 kommunizieren kann: Dann wird auf dem Rechner der Moxa Treiber installiert und das Programm kommuniziert via Realcom. 2. Ihr entwickelt ein neues Programm: Der Moxa wird ausschliesslich als Protokollwandler gebraucht. Der Nport wird auf TCP Client oder Server konfiguriert. Auf dem Rechner wird keine Moxa Software installiert. Ihr setzt die Kommunikation auf TCP/IP Basis um. Der Moxa wandelt die Kommunikation auf RS232 oder RS485. |
AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
Hallo, danke für eure Antworten.
Also die init ist so deklariert: function nsio_open(server_ip: PChar; port_index: Longint; timeouts: Longint): Longint; stdcall; @Taveuni Zweiteres trifft zu, konfiguriert als TCP-Server: 2. Ihr entwickelt ein neues Programm: Der Moxa wird ausschliesslich als Protokollwandler gebraucht. Der Nport wird auf TCP Client oder Server konfiguriert. Auf dem Rechner wird keine Moxa Software installiert. Ihr setzt die Kommunikation auf TCP/IP Basis um. Der Moxa wandelt die Kommunikation auf RS232 oder RS485. Ich will nicht ausschließen, dass wir dann die falsche DLL bzw. die falsche IPSerial.pas zugeschoben bekommen haben. Die DLL ist vom 16.11.2010, 160kb (x86). Die andere (x64) ist 191 kb groß. Kann mir jemand denn ein passendes pärchen für Delphi XE 32 Bit inklusive der IPSerial.pas und der DLL zukommen lassen? Beste Grüße Matthias |
AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
Versuche mal, die Funktion so zu deklarieren. Vermutlich ist die IPSerial.pas noch für ältere Delphi-Versionen.
Delphi-Quellcode:
function nsio_open(server_ip: PAnsiChar; port_index: Longint; timeouts: Longint): Longint; stdcall;
|
AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
Ich habs mal versucht mit dem umdeklarieren.
Delphi-Quellcode:
Leider gleicher return value -2. Dann hab ich mal das timeout rausgenommen und habe eine Zugriffsverletzung bekommen. Wird immer die DLL aus dem Beispielverzeichnis benutzt oder sucht der vorher vllt in System32 etc.?
ip := PAnsiChar(Edit1.Text);
function nsio_open(server_ip: PAnsiChar; port_index: Longint; timeouts: Longint): Longint; stdcall; |
AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
Zitat:
Die Moxa ipSerial.dll ist ausschliesslich ein Wrapper für die RealCom RS232 Kommunikation. Ausserdem ist sie buggy und outdated. Diese Variante wäre also meine Variante 1. Also die Moxa Treiber sind auf dem Rechner installiert und simulieren einen realen Comport. Falls Ihr aus mir momentan nicht erschliessbaren Gründen die Kommunikation so entwickeln wollt - nehmt Asyncpro oder ähnliches. Für die TCP/IP Kommunikation kannst Du irgendeine Library wie ICS, Indy, Synapse usw. nehmen. Alles klar? |
AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
Also wie wir uns das vorgestellt haben:
Alte Geräte (Waage/Pata Nosta) die auf die COM-Schnittstelle bauen sollen über den NPort über das Netzwerk erreichbar sein. Die Clients sitzen auf verschiedenen Terminalservern und sollten durch unsere Lösung mit den COM Geräten kommunizieren können. D.h. eine Waage ist an den NPort angeschlossen und der Client kann z.B. das aktuelle Gewicht über unsere Delphi-Anwendung erfragen über das Netzwerk erfragen. Die Clients sind z.B. Thin Clients die selber über keinen Com Port mehr verfügen und nur eine RDP-Verbindung zu unseren Terminal Servern aufbauen. Da unser Netzwerk ziemlich groß ist brauchen wir auch pro Client verschiedene und manchmal auch keine Com Ports. Indy haben wir bereits probiert aber es lief nicht so wie erwartet. Wir kommen an den COM Port aber die Verbindung ist nicht zuverlässig, auch hier kann ich keine Fehler in der Programmierung ausschließen. Beste Grüße Matthias |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 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