libnodave und PPI-Adapter (eBay)

HelmiMUC

Level-1
Beiträge
95
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich hoff ich bin hier richtig!

Ich verwende Libnodave und seit ich verstanden habe wie es funktioniert lieb ich es :)

Nur hab ich ein Problem mit einem PPI-Adapter.
Ich hab mir bei eBay einen PPI-Adapter gekauft (http://cgi.ebay.de/PPI-Kabel-fuer-S...29754QQcmdZViewItemQQ_trksidZp1742.m153.l1262)
mit Step7-MicroWin funktioniert er wunderbar - nur nicht mit Libnodave.
Ich hab schon alles ausprobiert, auch schon die Test-Exen (testPPI.exe) nur leider bekomm ich eine Verbindung zusammen.

Vielleicht kann mir jemand helfen um mit diesem PPI-Adapter und Libnodave mit einer S7-200 zu kommunizieren.
 
hallo,
zottel hat das mit den siemens adapter getestet, da könnte es sein das dein adapter nicht klappt.
 
hallo,
das kann dir vielleicht zottel erklären, vielleicht bring schon die automatische baudratenumschaltung alles durcheinander.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo,
das kann dir vielleicht zottel erklären, vielleicht bring schon die automatische baudratenumschaltung alles durcheinander.
Ich habe es mit dem vermutliche ältesten PPI Adapter von Siemens entwickelt. Auch dabei geht es nicht mit allen DIP-Schalter-Einstellungen, mit denen Microwin zurecht kommt.
Ich kann auch nur vermuten, wo bei anderen Einstellungen und/oder neueren Adaptern die Schwierigkeiten liegen:
Auf PC wird ja eine Baudrate vorgegeben. Wenn Microwin mit einer variable Baudrate arbeiten könnte, müßte es das so machen: Schnittstelle mit einer Baudrate öffnen, Testnachricht schicken, wenn antwort lesbar, ok, sonst andere Baudrate probieren. PC-Hardware bietet ja keine Unterstützung für Baudratenerkennung.
Ich vermute eher, das die Schwierigkeiten mit etwas anderem zu tun haben, nämlich der Richtungsumschaltung: Auf der Seite der CPU dienen zwei Adern abwechselnd zum Senden und zum Empfang. Durch irgendetwas muß der Adapter jeweils die komplemetäre Richtung einstellen. Dieses "Etwas" ist wohl entweder ein automatisches Schema (Wenn PC auf RS232 sendet, dann senden. Nach Ende des Zeichens noch eine Zeit lang auf senden bleiben, es könnten ja noch Zeichen folgen. Läuft diese Zeit ab, dann auf Empfang schalten) oder die Richtung wird über die Steuerleitungen (RTS,DTR) vom PC bzw. Microwin umgeschaltet. Das wird von Libnodave von hause aus nicht unterstützt.
Entweder probierst du nun, ob dein Adapter mit irgendeiner Einstellung der Schalter funktioniert oder du ergänzt Libnodave.
Dazu müßte die Schnittstelle in Windows anders geöffnet werden (Du kannst das ohne weiteres mit openComm() aus dem WinAPI machen, statt setPort() aus Libnodave zu verwenden!).
Ferner müßte vor und nach jedem Senden durch Libnodave die Richtung umgeschaltet werden. Libnodave benutzt intern einen Zeiger (di->ifwrite) auf die Sendefunktion für einzelne Zeichen. Du kannst eine eigene Sendefunktion benutzen, ohne die DLL zu verändern, indem du nach Erstellen des di dessen Zeiger auf die eigene Funktion abänderst.
Du wirst dazu C programmieren müssen.
 
Du wirst dazu C programmieren müssen.
Das ist nur bedingt richtig. Aus einem anderen Thread weiß ich, das HelmiMUC in Delphi programmiert. Delphi kann man AFAIK mit "cdecl" beibringen, in Funktionen die Aufruf-Konventionen von C zu verwenden, was ein Implementieren der notwendigen Funktionen in Delphi ermöglichen sollte.

Ausprobiert habe ich das aber noch nicht, ich arbeite in dem Fall auch lieber mit C, da es IMHO besser ist, sowas in C zu machen, weil sich die entsprechenden Änderungen dann ggf. leichter in libnodave übernehmen lassen.


Gruß Axel
 
Das ist nur bedingt richtig. Aus einem anderen Thread weiß ich, das HelmiMUC in Delphi programmiert. Delphi kann man AFAIK mit "cdecl" beibringen, in Funktionen die Aufruf-Konventionen von C zu verwenden, was ein Implementieren der notwendigen Funktionen in Delphi ermöglichen sollte.
Das "wirst" sollte auch eher eine Vermutung ausdrücken. Und auch die bezog sich mehr darauf, daß man es besser nicht mit VB oder .NET machen sollte.
Ausprobiert habe ich das aber noch nicht, ich arbeite in dem Fall auch lieber mit C, da es IMHO besser ist, sowas in C zu machen, weil sich die entsprechenden Änderungen dann ggf. leichter in libnodave übernehmen lassen.
Wenn es jemand zum Funtionieren bringt, ist es mir egal, in welcher Sprache.
 
Zurück
Oben