Skript Zugriff serielle Schnittstelle

  • VBScript

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Eierlein.

    Skript Zugriff serielle Schnittstelle

    Ich möchte für eine vorhandenen Applikation ein Skript erstellen welche via RS232 über COM6 mit einem Atmel Prozessor kommuniziert.
    Betriebssysteme Win7 32 Bit und Win 10 64 Bit
    Die Applikation läßt nur .vbs und .js Dateien zu.
    Dazu möchte ich vom PC aus alle 1000ms eine Anfrage an den Atmel schicken und die Antwort auswerten.
    Nach erfolgter Auswertung läuft dann die Applikation weiter.

    Bisher sind meine Scripting Versuche gescheitert.
    Bei diesem Kommando

    Set MSComm1=CreateObject("MSCOMMLib.MSComm")

    erhalte ich die Fehlermeldung daß kein Objekt erzeugt werden kann. MSComm32.ocx ist installiert und registriert.

    Die andere Variante

    Const ForWriting = 2
    Const ForReading = 1
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set com = fso.OpenTextFile("\\.\COM6", ForWriting) '<--
    com.Write("1")
    com.Close()

    war ebenfalls erfolglos.

    Ich habe VisualStudio 2017 und 2019 sowie VB6 zur Programmentwicklung installiert.
    Die Beiträge im Netz sind häufig älter als 10 Jahre und bilden damit vermutlich die neueren Betriebssysteme nicht ab.

    Gibt es die Möglichkeit in .NET ein Skript zu erstellen welches die .NET Objekte benutzt ? Oder irgendwie mit VB6.

    Es muß leider .vbs sein. Wenn ich es mit Umbenennen schaffe wäre das ausgezeichnet.

    Für Ratschläge und/oder Code wäre ich dankbar.

    viele Grüße
    Christian

    autoguider schrieb:

    Gibt es die Möglichkeit in .NET ein Skript zu erstellen welches die .NET Objekte benutzt ? Oder irgendwie mit VB6.

    Es muß leider .vbs sein.

    Das ergibt keinen Sinn. Entweder VB.NET, VB6 oder VBS. [Allgemein] VB.NET, VB6, VBA, VBS — Mit welcher Sprache programmiere ich eigentlich?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Ich habe mit Skripting (außer VBA) keine Erfahrung. Deshalb ist meine Ausdrucksweise vielleicht für das Forum nicht exakt genug.
    Hierfür bitte ich um Verständnis.

    Ich suche einen Schreib-/Lese Zugang zu einer seriellen Schnittstelle mittels einer lauffähigen Datei welche das Suffix .vbs hat.

    Die Applikation läßt in dem Dialog, in welchen die Skripte ausgewählt werden, nur Dateien mit der Endung vbs oder js zu.
    Ich nehme an daß der Interpreter oder was dafür zuständig ist, wissen muß um welche Art von Skript (VBS odre Java) es sich handelt.
    Das wird über das Suffix der Datei vemittelt.

    Kann die "Skript Maschine" von VBS Objekte von .NET verwenden ?
    Kann ein Skript welches in .NET formuliert wurde richtig interpretiert werden auch wenn es vom Suffix her .NET ist ?
    D.h. beispielsweise ein Skript in .NET verfassen und dann in xx.vbs umbenennen. Würde das Skript seine Aufgabe erfüllen ?

    Ginge VBA ?
    Modul in VBA formulieren,Text in eine Datei packen, mit der Endung vbs versehen und das Skript starten?

    autoguider schrieb:

    welche das Suffix .vbs hat

    Dann ist es auf jeden Fall VB Script, also VBS. D. h. das Unterforum hast du schon mal richtig gewählt. ;)

    autoguider schrieb:

    Java

    JavaScript. Ist ein großer Unterschied zu Java. Aber das nur am Rande.

    autoguider schrieb:

    Kann die "Skript Maschine" von VBS Objekte von .NET verwenden ?

    Nein.

    autoguider schrieb:

    Kann ein Skript welches in .NET formuliert wurde richtig interpretiert werden auch wenn es vom Suffix her .NET ist ?

    Auch nein.

    autoguider schrieb:

    D.h. beispielsweise ein Skript in .NET verfassen und dann in xx.vbs umbenennen. Würde das Skript seine Aufgabe erfüllen ?

    Auf keinen Fall. VB.NET und VBS sind sehr unterschiedlich.

    autoguider schrieb:

    Modul in VBA formulieren,Text in eine Datei packen, mit der Endung vbs versehen und das Skript starten?

    Auch nicht, auch VBA ist nicht VBS.

    Du wirst um einen echten VBS-Code nicht herum kommen.

    EDIT: Was hälst du von support.smartbear.com/testcomp…rking-with/com-ports.html ?

    Visual Basic-Quellcode

    1. Sub TestCOMPort
    2. Const ForWriting = 2, TriStateFalse = 0
    3. Dim fso, f
    4. Set fso = CreateObject("Scripting.FileSystemObject")
    5. Set f = fso.OpenTextFile("COM1:", ForWriting, False, TriStateFalse)
    6. ' Write data to the port
    7. f.Write Chr(26)
    8. f.Write Chr(32)
    9. f.Write Chr(27)
    10. f.Close
    11. End Sub

    Sehr ähnlich zu deinem Code, aber eben nicht identisch.

    EDIT 2: Darunter steht noch was, was mir nicht bewusst war. Und zwar, dass man tatsächlich .NET-Objekte in VBS verwenden kann (aber natürlich keinen .NET-Code). Allerdings steht da, dass es nur mit dem .NET-Framework 2.0 geht.

    Visual Basic-Quellcode

    1. Sub Test
    2. Dim Port, i, s
    3. Set Port = dotNET.System_IO_Ports.SerialPort.zctor_4("COM1", 9600)
    4. Port.Open
    5. ' Writing data to the port
    6. Port.Write "A " & Chr(27)
    7. ' Waiting for response
    8. aqUtils.Delay 1000
    9. ' Processing response
    10. If Port.BytesToRead <> 0 Then
    11. s = Port.ReadExisting
    12. Log.Message s
    13. Else
    14. Log.Warning "No data"
    15. End If
    16. Port.Close
    17. End Sub

    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    autoguider schrieb:

    Modul in VBA formulieren,Text in eine Datei packen, mit der Endung vbs versehen und das Skript starten?
    Du kannst ein VBS-Script mir leichten Anpassungen in der IDE von VBA debuggen.
    Wenn du es in VBA entwickelst, musst du aber darauf achten, dass du dich auf die VBS-Regeln beschränkst.

    Besser ist es jedoch eine eigens dafür vorgesehene Entwicklungsumgebung wie VBSEdit zu verwenden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich habe jetzt VbsEdit installiert und komme nicht weiter.
    Im Gerätemanager sind 4 COM Schnittstellen (COM3 - COM6) sichtbar.
    Ich sende über COM3 und bin mit einem Terminalprogramm an COM4

    Bei diesem Code

    Quellcode

    1. Const ForWriting = 2, TriStateFalse = 0
    2. Dim fso, f
    3. Set fso = CreateObject("Scripting.FileSystemObject")
    4. Set f = fso.OpenTextFile("COM3:", ForWriting, False, TriStateFalse)
    5. ' Write data to the port
    6. f.Write Chr(26)
    7. f.Write Chr(32)
    8. f.Write Chr(27)
    9. f.Close

    erhalte ich die Fehlemeldung in VbsEdit Erlaubnis verweigert, Code 800A0046 Lufzeitfehler in Microsoft VBScript
    Node: MDQDLIET.vbs URL: MDQDLIET.vbs (Weil im TMP-Verzeichnis)
    Der Remoteserver wurde angehalten oder wird gerade gestartet.
    Dieselbe Meldung gibt es wenn ich die Skriptdatei aus dem Explorer aufrufe.
    Output von VbsScript ist: Laufzeitfehler in Microsoft VBScript(5,3) : Erlaubnis verweigert.

    Eine Version für Schreiben und Lesen läuft in VbsScript durch. Es kommt nichts auf COM4 an.
    Beim Start aus dem Explorer heraus kommt wieder die Fehlermeldung mit Erlaubnis verweigert.
    Zeile 14 , Zeichen 3
    Hier die Zeile 14
    Set f = fso.OpenTextFile("COM3:", ForWriting, False, TriStateFalse)

    Hier der Code:

    Quellcode

    1. 'Global
    2. Dim fso, f
    3. Dim strChar
    4. Const ForWriting = 2, TriStateFalse = 0
    5. Const ForReading = 1
    6. Set fso = CreateObject("Scripting.FileSystemObject")
    7. Sub WriteCOMPort
    8. Set f = fso.OpenTextFile("COM3:", ForWriting, False, TriStateFalse)
    9. ' Write data to the port
    10. f.Write Chr(49)
    11. f.Write Chr(50)
    12. f.Write Chr(51)
    13. f.Close
    14. End Sub
    15. Sub ReadCOMPort
    16. Set f = fso.OpenTextFile("COM3:", ForReading, False, TriStateFalse)
    17. Do until strChar ="A"
    18. Do until f.AtEndOfStream
    19. strChar = f.Read(1)
    20. Wscript.Echo strChar
    21. loop
    22. loop
    23. End Sub
    24. Call WriteCOMPort
    25. Call ReadCOMPort



    Ich habe auch .net 2.0 installiert um die nächste Variante zu testen.
    In der Registry ist unter HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727 der install key mit dem Wert 1 versehen.

    Hier der Code des Scripts wie ich es in VbsScript gestartet habe

    Quellcode

    1. Dim Port, i, s
    2. Set Port = dotNET.System_IO_Ports.SerialPort.zctor_4("COM3", 9600)
    3. Port.Open
    4. ' Writing data to the port
    5. Port.Write "A " & Chr(27)
    6. ' Waiting for response
    7. aqUtils.Delay 1000
    8. ' Processing response
    9. If Port.BytesToRead <> 0 Then
    10. s = Port.ReadExisting
    11. Log.Message s
    12. Else
    13. Log.Warning "No data"
    14. End If
    15. Port.Close


    Fehlermeldung: Objekt erforderlich DotNET
    Code: 800A01A8

    Muss ich in VbsEdit unter References TypeLib path etwas auswählen ?

    Habt ihr noch Ideen was klappen könnte?

    viel Grüße
    Christian

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „autoguider“ ()

    Mit der Run-Methode kannst du per VBS eine EXE-Datei starten.





    Run-Methode

    Siehe auch
    WshShell-Objekt

    Führt ein Programm in einem neuen Prozess aus.

    object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
    Argumente
    object
    WshShell-Objekt.
    strCommand
    Zeichenfolgenwert, der die auszuführende Befehlszeile angibt. Es müssen alle
    Parameter angegeben werden, die an die ausführbare Datei übergeben werden
    sollen.
    intWindowStyle
    Optional. Ganzzahliger Wert, der das Erscheinungsbild des Fensters des
    Programms angibt. Beachten Sie, dass nicht alle Programme diese Informationen
    verwenden.
    bWaitOnReturn
    Optional. Boolescher Wert, der angibt, ob das Skript auf die Beendigung der
    Programmausführung warten soll, bevor mit der nächsten Anweisung im Skript
    fortgefahren wird. Falls dieses Argument auf true festgelegt ist, wird
    die Skriptausführung angehalten, bis das Programm beendet ist, und Run
    gibt den vom Programm zurückgegebenen Fehlercode zurück. Falls dieses Argument
    auf false festgelegt ist, kehrt die Run-Methode sofort nach dem
    Start des Programms zurück und gibt automatisch 0 zurück (dies ist nicht als
    Fehlercode zu interpretieren).
    Hinweise
    Die Run-Methode gibt eine ganze Zahl zurück. Die Run-Methode
    startet ein Programm, das in einem neuen Windows-Prozess ausgeführt wird. Das
    Skript kann so erstellt werden, dass vor dem Fortfahren auf die Beendigung der
    Ausführung des Programms gewartet wird. Hierdurch können Skripts und Programme
    synchron ausgeführt werden. Umgebungsvariablen im Argument strCommand
    werden automatisch erweitert. Wenn ein Dateityp ordnungsgemäß für ein bestimmtes
    Programm registriert wurde, wird das Programm ausgeführt, wenn Run mit einer
    Datei dieses Typs aufgerufen wird. Wenn beispielsweise Word auf dem
    Computersystem installiert ist, wird beim Aufrufen von Run mit einer
    DOC-Datei Word gestartet und das Dokument geladen. In der folgenden Tabelle sind
    die verfügbaren Einstellungen für intWindowStyle aufgeführt.

    intWindowStyle
    Beschreibung

    0
    Blendet das Fenster aus und aktiviert ein anderes
    Fenster.

    1
    Aktiviert ein Fenster und zeigt es an. Wenn das Fenster
    minimiert oder maximiert ist, stellt das System es mit seiner ursprünglichen
    Größe und Position wieder her. Eine Anwendung sollte dieses Flag angeben, wenn
    das Fenster zum ersten Mal angezeigt wird.

    2
    Aktiviert das Fenster und zeigt es als minimiertes Fenster an.

    3
    Aktiviert das Fenster und zeigt es als maximiertes Fenster an.

    4
    Zeigt ein Fenster in der jeweils aktuellen Größe und Position
    an. Das aktive Fenster bleibt aktiv.

    5
    Aktiviert das Fenster und zeigt es in der aktuellen Größe und
    Position an.

    6
    Minimiert das angegebene Fenster und aktiviert das Fenster auf
    der nächstniedrigen Ebene in der Z-Reihenfolge.

    7
    Zeigt das Fenster als minimiertes Fenster an. Das aktive Fenster
    bleibt aktiv.

    8
    Zeigt das Fenster in seinem aktuellen Zustand an. Das aktive
    Fenster bleibt aktiv.

    9
    Aktiviert das Fenster und zeigt es an. Wenn das Fenster
    minimiert oder maximiert ist, stellt das System es mit seiner ursprünglichen
    Größe und Position wieder her. Eine Anwendung sollte dieses Flag angeben, wenn
    ein minimiertes Fenster wiederhergestellt wird.

    10
    Legt den Anzeigezustand basierend auf dem Zustand des Programms
    fest, das die Anwendung gestartet hat.

    Beispiel 1
    Der folgende VBScript-Code öffnet eine Kopie des aktuell ausgeführten Skripts
    mit Editor.

    Quellcode

    1. Set WshShell = WScript.CreateObject("WScript.Shell")
    2. WshShell.Run "%windir%\notepad " & WScript.ScriptFullName

    Der folgende VBScript-Code führt die gleiche Aktion aus, mit der Ausnahme,
    dass er den Fenstertyp angibt, darauf wartet, dass Editor vom Benutzer
    geschlossen wird, und den von Editor nach dem Schließen zurückgegebenen
    Fehlercode speichert.

    Quellcode

    1. Set WshShell = WScript.CreateObject("WScript.Shell")
    2. Return = WshShell.Run("notepad " & WScript.ScriptFullName, 1, true)
    3. Beispiel 2

    Der folgende VBScript-Code öffnet ein MS-DOS-Fenster, ändert den Pfad in C:\
    und führt den Befehl DIR aus.

    Quellcode

    1. Dim oShell
    2. Set oShell = WScript.CreateObject ("WSCript.shell")
    3. oShell.run "cmd /K CD C:\ & Dir"
    4. Set oShell = Nothing

    Siehe auch
    Das ist richtig. Die Frage ist allerdings, ob die Applikation, von der aus du die EXE via VBS starten willst, das erlaubt. Kann ja sein, dass derartige Ausführungen dort verboten sind.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum