While oder For Schleife zum senden von TCP kommandos + ändern von Dateinamen

  • Hallo zusammen,

    ich bräuchte mal eure Hilfe.

    Und zwar versuche ich unserem Programm(eine Drucker Print Engine) Kommandos über TCP/IP zu schicken um eine Produktion eines Kunden zu simulieren.
    Da mir deren übergeordnetes System nicht zur Verfügung steht dachte ich AutoIt ist dafür ja eigentlich prädestiniert :thumbup:

    Autoit soll folgendes tun:

    - Starten von Telnet localhost 8000 <-- Ja geht auch über TCPconnect, aber so sehe ich was an unser Programm geschickt wird, ohne zusätzliche GUI laufen zu haben. Das hab ich nach bisschen rumprobieren auch hinbekommen:

    AutoIt
    Send("{LWINDOWN}r")
    send("{LWINUP}")
    WinWaitActive("Ausführen")
    Send("telnet localhost 8000")
    send("{Enter}")
    WinWaitActive("telnet localhost 8000")


    Nun sollte die Schleife beginnen und für eine bestimmte Anzahl laufen und das hier abarbeiten:

    AutoIt
    Send("statusprint{Enter}")
    Send("loadPrint c:\layout\5095600_V1.3.dsn{Enter}")
    Sleep(2000)
    Send( "StartPrint{Enter}")
    Sleep(2000)

    Mein Programm legt mir im C:\temp Ordner dann ein output_000.tiff file ab. Das File sollte dann umbenannt werden in zum Beispiel 1.tiff. Da wenn die Schleife funktioniert das Output file jedesmal überschrieben wird, ich aber jedes Bild brauche um Fehler analysieren zu können :S

    Dies hätte ich dann theoretisch mit FileExist abgefragt ob die Datei vorhanden ist und dann mit FileCopy umbenannt. Bei mir scheitert es nun aber dabei den Dateinamen variable als Zähler von 1 - xxxx einzufügen...
    So z.B.:

    AutoIt
    $rename_outfile = FileExists("C:\temp\output_000.tiff")
    	If $rename_outfile = 1 Then
    	FileCopy("C:\temp\output_000.tiff", "C:\temp\" & $zahl &".tiff")
    	EndIf

    Aber wie lege ich fest das AutoIt für $zahl den richtigen Wert bzw. die richtige Zahl einsetzt??

    Für die While Schleife hab ich folgendes versucht:

    AutoIt
    $i = 0
    While $i <= 1000 ; Beispiel Wert
    
    
    ; dann kommen die Kommandos und das umbenennen der Out files
    
    
    $i = $i + 1
    WEnd

    Aber irgendwie klappt es nicht :cursing:

    Es öffnet sich Telnet und das wars dann ?(

    Ich hoffe das ist einigermaßen verständlich was ich machen möchte...

    Vielen Dank schon mal für eure Hilfe bin in Sachen programmieren totaler Anfänger.

    LG
    BadCompany

  • Egal welche Schleife du nutzt, das sind 2 unterschiedliche Probleme. Du musst die TCP Geschichte debuggen weil die Schleife funktioniert sofern du es richtig schreibst.

    Irgendwie klappt es nicht ist keine Aussage die uns weiterbringt. Wird eine Verbindung aufgebaut?
    Zeig das Script im "ganzen" sodass wir sehen können was dann passieren soll.


    AutoIt
    $i = 0
    While $i <= 1000 ; Beispiel Wert
    	ConsoleWrite("FilenameXYZ_" & $i & ".tiff" & @CRLF)
    	$i = $i + 1
    WEnd

    Grüße Yaerox

    Grüne Hölle

  • Hi,

    Danke für die schnelle Antwort.

    Also ich bekomme das Telnet Fenster geöffnet. Nur das Senden der Kommandos LoadPrint, Startprint... geht nicht. Wenn ich aber über die Tastatur oder Copy/Paste die Kommandos schicke, geht es. Also Verbindung steht :)

    Wenn das oben richtig verstanden habe schickst du per ConsoleWrite den Befehl über TCP zum ändern der Datei bzw. des Dateinamens!? Richtig?

    So geht das bei mir leider nicht.

    Ich muss wie folgt vorgehen

    Ich sende folgende Befehlsreihenfolge an meine Print Engine:

    1. Loadprint C:\<Pfad zu meiner Datei die drucken möchte>
    2. Startprint <-- um drucken zu starten.

    Nun fängt meine Software an zu drucken. Aber anstatt das Bild an den Drucker zu schicken wird es als Bild unter C:\temp als output_000.tiff abgelegt.

    Und den Name muss ich eben von Output_000.tiff in xx.tiff ändern.

    Ist der Dateiname geändert soll Schleife wieder von vorne beginnen. Meine SW gibt jedesmal beim starten das output file aus.

    Ich hab das ganze nun mit ConsoleWrite versucht aber er will die Kommandos einfach nicht übertragen ;(



    Wenn ich anstatt ConsoleWrite den Send- Befehl verwende hab ich das selbe Ergebnis.

  • Also ich bekomme das Telnet Fenster geöffnet. Nur das Senden der Kommandos LoadPrint, Startprint... geht nicht. Wenn ich aber über die Tastatur oder Copy/Paste die Kommandos schicke, geht es. Also Verbindung steht :)


    Wenn das oben richtig verstanden habe schickst du per ConsoleWrite den Befehl über TCP zum ändern der Datei bzw. des Dateinamens!? Richtig?

    Wenn du sagst Telnet-Verbindung steht, Befehl abschicken funktioniert aber nicht, ist das schonmal ein Anfangspunkt. Zum ConsoleWrite-Befehl solltest du einfach mal die Hilfe aufrufen Ich nutze den Befehl zum debuggen. Das solltest du übrigens auch häufiger tun. Da ich prinzipiel kein Freund dieser Send- und Klickgeschichten bin, würde ich das via Kommandozeile erledigen. Ich wette da gibt es andere möglichkeiten, Tipp: Putty hat extra ein Commandline-Tool. Da kannst du Texte sogar auswerten/auslesen.

    Wenn du wieder auf Send oder was auch immer umsteigst, müssen wir wissen, was geschieht. Siehst du die Eingabe im Telnet-Fenster ja/nein? Wenn ja, wird der Befehl abgearbeitet, ja/nein? Starte dein Tool während du Debugging-Informationen schreibst, und zeige uns diese. Wir wissen stets noch nicht an welcher Stelle wir uns wirklich befinden ...

    Grüße Yaerox

    Grüne Hölle

  • So jetzt hab ich nochmal komplett neu geschrieben.

    Debug(an verschiedenen Stellen ausprobiert) zeigt keine Fehler. Es scheint auch das die Schleife durchläuft da die Zeit wie lange das Script läuft mit den "Sleep" Zeiten zusammen passt.


    Aber es kommt immer noch nichts an der anderen Software an :S

    Dort wird im Log files sämtliche TCP/IP Eingänge mit geschrieben.

    TCPSend ist doch das gleiche wie wenn ich die IP + Port manuell aufrufe und die Befehle mit der Tastatur eingebe.


    Bin langsam echt am verzweifeln ?(?(

    Nachtrag: vor WEnd hab ich noch mal den ConsoleWrite Debug Teil rein und das kommt bei raus:
    >"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Users\liebgott\Projects\Fernsteuerung PE\FB Telnet_3.au3" /UserParams
    +>15:08:28 Starting AutoIt3Wrapper v.14.801.2025.0 SciTE v.3.4.4.0 Keyboard:00000407 OS:WIN_7/Service Pack 1 CPU:X64 OS:X64 Environment(Language:0407)
    +> SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE UserDir => C:\Users\liebgott\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\liebgott\AppData\Local\AutoIt v3\SciTE
    >Running AU3Check (3.3.14.0) from:C:\Program Files (x86)\AutoIt3 input:C:\Users\liebgott\Projects\Fernsteuerung PE\FB Telnet_3.au3
    +>15:08:29 AU3Check ended.rc:0
    >Running:(3.3.14.0):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\Users\liebgott\Projects\Fernsteuerung PE\FB Telnet_3.au3"
    --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
    @@ Debug(67) : 0 = 0
    >Error code: 0
    @@ Debug(67) : 0 = 0
    >Error code: 0
    @@ Debug(67) : 0 = 0
    >Error code: 0
    +>15:08:50 AutoIt3.exe ended.rc:0
    +>15:08:50 AutoIt3Wrapper Finished.
    >Exit code: 0 Time: 21.94


    ============================================================================

    Ich hab keine Ahnung warum aber jetzt funktioniert es mit dem zuletzt geposteten Script.

    Vielen Dank für die Hilfe!


    LG
    Bad

    Einmal editiert, zuletzt von BadCompany (23. Juli 2015 um 08:08) aus folgendem Grund: Nachtrag 2