Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Moxa NPort 5150 mit IPSerial auf Windows Server 2008 (https://www.delphipraxis.net/179312-moxa-nport-5150-mit-ipserial-auf-windows-server-2008-a.html)

MatRo 26. Feb 2014 06:32

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:
nsio_init();
ip := Edit1.Text;
Val(Edit2.Text, pid, code);

ret := nsio_open(PChar(ip), pid, 3000);   // -2: Bad Parameter
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.

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

Union 26. Feb 2014 06:42

AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
 
Wie ist denn
Delphi-Quellcode:
nsio_open()
deklariert?

mkinzler 26. Feb 2014 06:56

AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
 
Im Beispiel des Manuals (Seite 85) hat nsio_open() nur 2 Parameter.

Welches Delphi (Unicode?)

Union 26. Feb 2014 07:03

AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
 
Auf jeden Fall steht dort
Code:
char
und nicht
Code:
wchar_t
. Deshalb wäre in Delphi > 2007
Delphi-Quellcode:
PAnsiChar
zu verwenden.

taveuni 26. Feb 2014 07:17

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.

MatRo 26. Feb 2014 08:14

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

Union 26. Feb 2014 08:25

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;

MatRo 26. Feb 2014 08:38

AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
 
Ich habs mal versucht mit dem umdeklarieren.

Delphi-Quellcode:
ip := PAnsiChar(Edit1.Text);
function nsio_open(server_ip: PAnsiChar; port_index: Longint; timeouts: Longint): Longint; stdcall;
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.?

taveuni 26. Feb 2014 08:45

AW: Moxa NPort 5150 mit IPSerial auf Windows Server 2008
 
Zitat:

Zitat von MatRo (Beitrag 1249660)

@Taveuni
Zweiteres trifft zu, konfiguriert als TCP-Server:

[..]

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?

Vermutlich liegt hier ein Verständnis Problem vor.
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?

MatRo 26. Feb 2014 08:54

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.
Seite 1 von 2  1 2      

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