Siemens Logo RCE 0BA7

  • Hi @ all

    Ich habe hier ein kleines Projekt, dass dem ein oder anderen nützlich sein kann, wenn er sich mit Hardware I/O's beschäftigt.

    Habe hier eine EXE namens LogAitDave geschrieben. ( in C )

    Welche via der libnodave.dll eine Kommunikation zur LOGORCE ( die mit Ethernet Anschluss ) aufbaut.
    Dann entsprechend einer Parametrisierung Werte in die LOGO schreibt oder liest.

    Zu der LogAitDave.exe habe ich natürlich eine AutoIt UDF geschrieben.

    Desweiteren um das ganze etwas besser zu beschreiben ein SimpleSample und Batch Beisiele.

    Und weil ich eh grad dran war noch eine komplette Visualisierung natürlich auch mit AutoIt ;)

    Wünsche / Anregungen / Änderungen / Tipps sind gerne gesehen.

    Interessant ist das Projekt vor allem für diejenigen unter euch, welche eine Art Gebäude / Haus oder Wohnung Automatisierung planen / umsetzen wollen.

    Eine Logo RCE ( 0BA7 ) gibt es schon für 200 € bietet 8 Eingänge und 4 Relais Ausgänge.

    Natürlich kann man mit Erweiterungsmodulen erweitern.

    PS: wenn jemand Erfahrungen zu libnodave.dl hat und sich an dem Projekt beteiligen will, ich suche noch eine Möglichkeit direkt aus AutoIt die LibnoDave anzusprechen.
    ( dann könnte man sich den Umweg um die LogAitDave sparen )

    Hab schon einiges diesbezüglich zusammengesammelt und verteile dass dann gern....

    Viel Spaß !!

  • Hi !

    ich habe auf der Basis von Funkey's UDF mal was Probiert -> LibNoDave_UDF

    und zwar das ->

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include "LibNoDave.au3"

    [/autoit] [autoit][/autoit] [autoit]

    Global $IPAddress = "172.18.65.201"
    _DaveInit()

    [/autoit] [autoit][/autoit] [autoit]

    $fds = DllStructCreate($_daveOSserialType)

    [/autoit] [autoit][/autoit] [autoit]

    $hSocket = _openSocket($IPAddress,102)
    DllStructSetData($fds, "rfd", $hSocket)
    DllStructSetData($fds, "wfd", $hSocket)

    [/autoit] [autoit][/autoit] [autoit]

    ;MsgBox(0,"$hSocket","= "& $hSocket)

    [/autoit] [autoit][/autoit] [autoit]

    $p_di = _daveNewInterface($fds,"IF1",0,$daveProtoISOTCP,$daveSpeed187k)
    ConsoleWrite("$p_di = " & $p_di & @CR)
    _daveInitAdapter($p_di)

    [/autoit] [autoit][/autoit] [autoit]

    ;_daveSetTimeout($p_di, 5000000)

    [/autoit] [autoit][/autoit] [autoit]

    ;$p_dc = _daveNewConnection($p_di, 2, 2, 0)
    $p_dc = _daveNewConnection($p_di, 1, 1, 0)
    ConsoleWrite("$p_dc = " & $p_dc & @CR)

    [/autoit] [autoit][/autoit] [autoit]

    If ( _daveConnectPLC($p_dc) = 0 ) then
    MsgBox(0,"CONNECTET",";-) ")

    [/autoit] [autoit][/autoit] [autoit]

    Else
    MsgBox(0,"dislike",_daveConnectPLC($p_dc))

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _closeSocket($hSocket)
    _DaveDeInit()

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit]

    das müsste eigentlich 1 zu 1 laufen ..

    da mein code in c so aus sieht ->

    Spoiler anzeigen


    socket = 102;

    // variablen für libnodave
    daveInterface * di;
    daveConnection * dc;
    _daveOSserialType fds;
    daveSetDebug(daveDebugPrintErrors);

    fds.rfd=openSocket(socket, ip);
    fds.wfd=fds.rfd;

    if (fds.rfd>0) {
    if(debug) printf("openSocket accept auf %d über %s\n",socket, ip);
    di =daveNewInterface(fds,"IF1",0, daveProtoISOTCP, daveSpeed187k);
    daveSetTimeout(di,timeout);
    dc =daveNewConnection(di,1,1, 0);

    if (0==daveConnectPLC(dc)) {
    if(debug) printf("PLC connectet\n");

    res=daveReadBytes(dc,daveInputs,0,0,3,NULL);


    USW .. .. ..


    aber ich verzweifel ... es tut sich einfach nix .. und ich bin zu blind den Fehler zu sehen ... ;(

  • Ich hab keine neue LOGO zum Testen ich weiß nur, dass '_daveNewConnection($p_di, 2, 2, 0)' mit der S7-300 funktioniert.
    Was aber definitiv unterschiedlich beim C-Programm und AutoIt ist, dass ich in AutoIt 'davePascalNewInterface' anstelle von 'daveNewInterface' vewendet habe.

  • Hei Funkey !! freut mich von dir zu lesen !

    meinst du damit , dass die UDF Funktion _daveNewConnection($p_di, 1, 1, 0) in Wirklichkeit auf davePascalNewInterface der DLL verweist =?

    mmmm .. das ist mal n Tip , wo man die Suche beginnen könnte .. ;) da hab ich ja schon Tage verbraten .. :cursing:

  • Also ich hab für eine Anlage bei uns auf der Arbeit eine Visu in AutoIt geschrieben. Diese kommuniziert über die libnodave.dll mit einer S7-1200. Und ich verwende daveNewInterface. Funktioniert alles prima. Sogar in DB's schreiben und lesen.

    Edit: Ah hab grad gesehen, dass sie in der UDF mit davePascalNewInterface im DllCall arbeitet.

    Spoiler anzeigen
    [autoit]

    Func _LibNoDave_NewInterface($fds, $nname = "IF1", $localMPI = 0, $protocol = $LNDAVE_PROTO_ISOTCP, $speed = $LNDAVE_SPEED_187K)
    If IsPtr($fds) Then
    Local $i_fds = $fds
    Else
    Local $i_fds = DllStructGetPtr($fds)
    EndIf
    Local $di = DllCall($__ghLNDDll, "HANDLE", "davePascalNewInterface", "ptr", $i_fds, "str", $nname, "int", $localMPI, "int", $protocol, "int", $speed)
    If @error Then Return SetError(1,@error,0)
    Return $di[0]
    EndFunc

    [/autoit]