Wie werden Daten zum Eingabegerät gesendet?

TWedge V2

Lösung: Für diesen Zweck bietet TWedge die JavaScript Funktion WriteToDevice () an. Diese Funktion akzeptiert zwei Parameter:

  • Der erste Parameter gibt an, welche Daten zum Gerät gesendet werden.
  • Der zweite Parameter gibt das Timeout (in Millisekunden) für diese Operation an.

Das folgende Beispiel sendet zwei Zeilen Text (die erste Zeile fordert das Gerät auf den Usernamen zu akzeptieren, die zweite Zeile sendet den Usernamen an das Gerät). Jede Zeile schließt mit einem Zeilenumbruch ab \n).

WriteToDevice ("user\n", 1000);
WriteToDevice ("sysadmin\n", 1000);

TWedge V3

Lösung: Für diesen Zweck bietet TWedge die JavaScript Member-Funktion WriteData () an. Diese Funktion gibt es in zwei Varianten mit unterschiedlichen Parametern:

  • Integer WriteData (Array arrData, Integer nTimeout)
  • Integer WriteData (String sData, Integer nTimeout, String sEncoding = "Latin1")

Das folgende Beispiel sendet einmal die Daten als Binär-Array und einmal als String (Zeichenkette). In der Stringvariante können Sie mit der Escape-Folge \n einen Zeilenumbruch kodieren.

var arrSend = [0x48, 0x65, 0x6c, 0x6c, 0x6f]; 
hConn.WriteData (arrSend, 200);
hConn.WriteData ("Hello\n", 1000);
hConn ist die aktuelle Verbindung.

Das Eingabegerät ignoriert alle Kommandos

Warum werden alle Kommandos von dem Eingabegerät ignoriert?

Lösung: Wenn die Funktion WriteToDevice () (bzw. WriteData ()) zum Senden von Konfigurations- oder Startkommandos verwendet wird, überprüfen Sie bitte, ob Zeilenumbrüche notwendig sind. Das ist besonders dann wichtig, wenn das Gerät ein Protokoll wie TELNET verwendet. Ein Zeilenumbruch wird mit der Escapesequenz \n angegeben.

Das folgende Beispiel sendet den Text "user" - gefolgt von einem Zeilenumbruch - an das Gerät:

// TWedge 2:
WriteToDevice ("user\n", 1000);

// TWedge 3:
hConn.WriteData ("user\n", 1000);

Hier ist eine Liste mit den gebräuchlichsten Escapesequenzen:

  • \' Einfaches Anführungszeichen.
  • \" Doppeltes Anführungszeichen. Verwenden Sie diese Escape-Sequenz, wenn Sie es als Teil eines Zeichens angeben.
  • \\ Ein einfaches Backslash Zeichen.
  • \b Backspace.
  • \n Zeilenvorschub (Line Feed).
  • \r Wagenrücklauf (Carriage Return). In DOS Systemen wird ein Zeilenumbruch üblicherweise durch die Zeichenkombination \r (Wagenrücklauf) und \n (Zeilenvorschub) kodiert. Meistens reicht aber auch ein \n (statt \r\n).
  • \t Horizontaler Tabulator.
  • \f Seitenvorschub (für Drucker).

Das USB-Gerät verliert die Verbindung, wenn es längere Zeit nicht benutzt wird

Problem: Mein USB-Gerät (mit virtuellem COM-Anschluss) verliert die Verbindung, wenn es eine längere Zeit nicht benutzt wird.

Die Energieverwaltung ist eine häufige Ursache für Probleme mit USB-gesteuerten Geräten. Um Strom zu sparen, schaltet Windows die Stromversorgung der USB-Ports automatisch ab. Dies kann zu Problemen mit Zusatzgeräten und dadurch zu einem Verlust der Verbindung führen, wenn Sie Ihr Gerät längere Zeit nicht benutzen.

Workaround: Hier sind einige Maßnahmen, welche Sie Schritt für Schritt ausprobieren können, bis dieses Problem nicht mehr auftritt:

a) Verhindern, dass Windows USB-Geräte ausschaltet.

  1. Öffnen Sie den Gerätemanager, indem Sie auf Start klicken und im Suchfeld Gerätemanager eingeben.
  2. Im Gerätemanager erweitern Sie den Bereich Universal Serial Bus Controllers, Doppelklick auf das Gerät USB Root Hub und wählen Sie Energieverwaltung aus.
  3. "Dem Computer erlauben, Geräte auszuschalten, um Strom zu sparen" deaktivieren, indem Sie das Häkchen bei der Checkbox entfernen.
  4. Mit dem OK-Button bestätigen.

b) Motherboard: Falls Ihr BIOS die Einstellung 'Deep Sleep Control' hat, dann deaktivieren Sie es.

c) "hybrid sleep option" deaktivieren (falls möglich):

  • Gehen Sie in den Systemeinstellungen unter Energieverwaltung 🡒 Standardeinstellungen ändern 🡒 Erweiterte Energieeinstellungen ändern 🡒 Ruhezustand 🡒 "Allow hybrid sleep" und setzen Sie es auf AUS.

d) "USB selective suspend" deaktivieren (falls möglich):

  • Gehen Sie in den Systemeinstellungen unter Power options -> Change plan settings 🡒 Change advanced power settings 🡒 USB-Einstellungen 🡒 "Selective suspend" und deaktivieren Sie es.
Speziell für virtuelle COM-Ports bietet TWedge eine Überwachungsmöglichkeit, um verloren gegangene Verbindungen zu erkennen und um sich wieder automatisch mit dem Gerät zu verbinden (siehe TWedge-Schnittstellenoptionen). Sie können diese Überwachungs-Optionen gerne ausprobieren.

Wie kann ich einen Zeilenvorschub an meine Daten anhängen?

Dazu müssen Sie das Script im OnData bzw. processData Event Code modifizieren. Ein Zeilenvorschub kann über die Escapesequenz \r (Carriage Return) oder \n (Line Feed) an die Eingangsdaten angehängt werden. Die Verkettung der Daten erfolgt in Javascript mit dem + Zeichen.

Menü (TWedge V2) Konfiguration ➞ Script Editor: OnData

Menu (TWedge V3) Gerät ➞ Konfigurieren ➞ Erweitert ➞ Script-Editor: processData

Ändern Sie die folgende Codezeile und fügen Sie das + "\n" wie folgt hinzu.

// V2 (OnData function):
SendKeyStrokes(DATA.replace (/\x00/g, " ") + "\n");

// V3 (processData function):
SendKeyStrokes (sData.replace(/\x00/g, " ") + "{ENTER}")

Siehe vorige FAQ für eine Liste der gebräuchlichsten Escapesequenzen.

Keyboard Wedge funktioniert nicht, wenn TWedge als Dienst läuft

Problem: Sogenannte Dienste werden als separater Prozess ausgeführt, ohne dass eine Benutzersitzung angeschlossen ist, somit kann Windows nicht erkennen, wohin die Tastenanschläge gesendet werden sollen.

Lösung: Sie können versuchen, ob die Einstellung “Erlauben Sie dem Dienst die Interaktion mit dem Desktop” einen Unterschied ausmacht, üblicherweise kann die Tastenanschlagsimulation aber nicht verwendet werden, wenn TWedge als Dienst läuft.

Workaround: Schreiben Sie in eine CSV-Datei (siehe Aktionsvorlagen). Der Dateiname könnte auf dem aktuellen Datum basieren, damit Sie jeden Tag eine neue Datei erhalten (erfordert eine kleine Änderung im Skript). CSV-Dateien können auch in Excel geöffnet werden.

Wo finde ich eine detaillierte Bedienungsanleitung zu TWedge?

  • Sie können das zusammen mit TWedge installierte Handbuch mit dem Hilfe-Menü in TWedge (F1) öffnen.
  • Sie können das Handbuch auch im Dokumentations-Bereich der TWedge-Downloadseite herunterladen.
  • Die Skript-Referenz kann mithilfe des Buttons [Script Reference] am unteren Rand des Skript-Editors (CTRL-E) geöffnet werden.

SHIFT-Taste wird nicht als Tastenanschlag gesendet

Problem: Während dem Lesen von einem HID Gerät erscheint eine über SendKeyStroke(..) gesendete SHIFT-Taste (oder ein anderer Modifier) nicht als Tastenanschlag.

Lösung: Senden Sie die SHIFT-Tastenkombination etwas verzögert - siehe Beispiel-Code unten:

SetDelayCharacter ("#");
SetDelayTime (200);
if ( !SendKeyStrokes ("#{SHIFT+F7}"))
  NotifyWarning("Ignoring keystrokes sent to TWedge. Please set focus to the target application.");
Für HID-Geräte sind besondere Anweisungen zu beachten - siehe Benutzerhandbuch B.1.5 Send Keystrokes + B.1 USB HID-Gerät.

Javascript Befehle für gängige Operationen (processData)

Menu (TWedge V3) Device - Configure - Advanced - Script Editor - Edit Code in "processData"

Carrige Return / Line Feed entfernen
sData = sData.replace(/\x0D\x0A/g, "");  // remove CR/LF
Führende Leerzeichen / Whitespace entfernen
sData = sData.replace(/^\s+/, "");       // trim leading whitespace
Bestimmte Zeichen (über Hex Code) ersetzen
sData = sData.replace(/\x2E/g, ",");     // replace . => ,
Eine Zeichenfolge löschen
sData = sData.replace(/ d/, "");         // remove " d"
Einen Wert aus einer CSV Folge parsen
// sample data: 200,    177.50,mm   ,01
if (sData.indexOf(',') > 0)
{
  sData = sData.split(',');
  sData = sData[1];  // take 2nd value
  sData = sData.replace(/^\s+/, "");       // trim leading whitespace
}
// result will be 177.50
Einen numerischen Wert aus einer fixen Datenfolge parsen
// extract weight from scale data format: [STX] 13400 kg S Gross[CR]
var myRegexp = /^[\x02]\s(\d{1,5})\skg S Gross[\r\n]/;
var match = myRegexp.exec(sData);
if (match && match.length >= 2)
  Print("Weight: " + match[1]); // first group value
else
  Print("Weight does not match data format: [STX] nnnnn kg S Gross[CR]");
Eine kleine Zeitverzögerung einbauen
function onHotkey ()
{
  Print("onHotkey!");
  hInstance.Sleep (300); // wait 0.3 secs
  ...
}

Wie kann ich eine Dezimalzahl (Zahl mit Kommastellen) zu einer ganzen Zahl konvertieren?

Mein Gerät gibt 123,4 aus, ich brauche aber nur 123

Modifizieren Sie das Script im OnData Event Code (Ctrl - E). Ersetzen Sie die Codezeilen durch folgendes:

TWedge V2

var myData = Math.round(DATA).toFixed();
SendKeyStrokes(myData);

TWedge V3

var myData = DataToString(data);
myData = Math.round(myData).toFixed();
SendKeyStrokes(myData);

Dieser Code übernimmt die Rundung. Wenn Sie keine Rundung benötigen, ersetzen Sie Math.round durch Math.floor.

Meine Waage sendet Gramm, ich benötige aber Kilogramm

Modifizieren Sie den OnData Event Code durch folgendes:

TWedge V2

var myData = (parseInt(DATA)/1000).toFixed(3);
SendKeyStrokes(myData);

TWedge V3

var myData = DataToString(data);
myData = (parseInt(myData)/1000).toFixed(3);
SendKeyStrokes(myData);

Wie kann man Daten in einer Schleife lesen, ohne StartListen zu verwenden?

Nehmen wir an, Sie möchten von zwei Skripten aus auf einen bestimmten COM-Anschluss (nacheinander) zugreifen, können ihn aber nur von jeweils einem Skript aus öffnen. Sie können StartListen() nicht verwenden, da dies den Port die ganze Zeit über belegt, solange die Datenerfassung aktiv ist.

Im Folgenden zeigen wir Ihnen, wie Sie den Port öffnen, Daten synchron lesen und dann den Port wieder schließen, damit das andere Skript auf den Port zugreifen kann.

hConn2.Open(funcOnConnectionLost2);

var arr2Data = null;
retries2 = 60; // wait maximum 1 minute for data (60 * 1000 ms)
while (retries2-- > 0)
{
  try
  {
    Print ("Waiting for data from " + hConn2.Port);
    
    var currData = hConn2.ReadData(100, 1000); // try to read max 100 Bytes in 1 sec
   
    if (arr2Data == null)
      arr2Data = currData; // first data packet
    else
      arr2Data.concat(currData); // subsequent data packet -> append
  }
  catch (err)
  {
    // stop when we have data already (no data packet after successful read) 
    if (arr2Data != null)
      break;
  }
}

processData2 (arr2Data);
  
if (hConn2.IsOpen)
  closeConnection2();    

Wie verwendet man eine zweite Tastenkombination in Twedge?

Sie können eine weitere Tastenkombination wie folgt erstellen:

  1. Öffnen Sie das Javascript Edtior (CTRL-E)
  2. Kopieren Sie die bestehende Hotkey-Funktion (am Ende des Skripts) und benennen Sie es in onHotKey2 um
  3. function onHotkey2 ()
    {
      Print("onHotkey2! ");
    }
    
  4. Registrieren Sie die Funktion onHotkey2 für eine bestimmte Tastenkombination (z. B. F8) am Anfang des Skripts (nach dem generierten Skriptblock):
  5. hInstance.RegisterHotkey("F8", onHotkey2); 
    
  6. Wenn Sie F8 drücken, sollte die zweite, neu hinzugefügte Funktion aufgerufen werden.

COM Ports auf Citrix/Terminal Server

Problem: TWedge verbindet sich zum Server, nicht zum Client

Lösung: Sie müssen den COM Port des Clients einem virtuellen COM Port am Server zuweisen. Das wird als COM Port Weiterleitung bezeichnet.

Fehlermeldung "Zugriff verweigert" beim Starten von Twedge

Problem: Beim Starten von TWedge erhalten Sie die Fehlermeldung "Datei 'C:\ProgramData\TEC-IT\TWedge\3.5\twedge.bcopt' kann nicht gespeichert werden. Zugriff verweigert."

Lösung: Überprüfen Sie die Berechtigungen für das TWedge-Verzeichnis und die bcopt-Datei für das Benutzerkonto, bei welchem das Problem auftaucht.

C:\ProgramData\TEC-IT\TWedge\3.5

Die BCOPT-Datei speichert die Fenster-Einstellungen von TWedge. Das Startbenutzerkonto von TWedge muss Lese-/Schreibrechte für diese Datei haben.

Wie kann ich TWedge 3 als Dienst einrichten?

Für die manuelle Konfiguration folgen Sie den Anweisungen im Benutzerhandbuch Anhang D: TWedge als Dienst ausführen.

Für das Skripten dieser Konfigurationsschritte (z. B. als Teil einer benutzerdefinierten Einrichtung) folgen Sie der unten stehenden Anleitung:

Legen Sie die TWG-Datei fest, die beim Starten automatisch vom Dienst geöffnet werden soll:

  1. Navigieren Sie zur folgenden Datei:
    C:\ProgramData\TEC-IT\TWedge\3.6\twedge.bcopt
  2. Bearbeiten oder überschreiben Sie diese Datei mit Ihren Voreinstellungen.
  3. Geben Sie den vollständigen Pfad zur TWG-Konfigurationsdatei im dafür vorgesehenen XML-Element ein:
    <ServiceConfigFile>C:/Project/MyTWedgeConfig.twg</ServiceConfigFile>
  4. Nachdem Sie Änderungen an dieser Datei vorgenommen haben, muss der Dienst neu gestartet werden, wenn er bereits läuft. Dies kann mit den folgenden Befehlen erfolgen:
    net stop "TEC-IT TWedge"
    net start "TEC-IT TWedge"

Führen Sie den folgenden Befehl aus, um den Dienst beim Systemstart automatisch zu starten:

sc config "TEC-IT TWedge" start=auto

Es ist möglich, den Dienst so zu konfigurieren, dass er eine Interaktion mit dem Desktop ermöglicht, obwohl diese Funktionalität nicht garantiert werden kann. Verwenden Sie dazu den folgenden Befehl:

sc config "TEC-IT TWedge" type=interact type=own

Alle Befehle müssen mit Administratorrechten ausgeführt werden, z. B. über die Admin-Konsole.

Wie installiere ich die Software Wedge TWedge 2.x als Windows Dienst?

Wir empfehlen den Umstieg auf TWedge V3, wo ein Systemdienst bereits integriert ist. Sollte das nicht möglich sein, können Sie die nachfolgenden Schritte für TWedge V2 durchführen.
  1. Installieren Sie das Windows Resource Toolkit. Dieses können Sie sich von der Microsoft Webseite herunterladen.
  2. Öffnen Sie die Kommandozeile (Start -> Ausführen -> “cmd”), gehen Sie in das Installationsverzeichnis des Windows Resource Kits und geben Sie folgenden Befehl ein:
    Instsrv TWedge "C:\Program Files (x86)\Windows Resource Kits\Tools\srvany.exe".
    Kommandozeile: Installation des Windows Resource Toolkits
  3. Öffnen Sie den Registrierungseditor (Start -> Ausführen -> “regedit”) und suchen Sie nach folgendem Registrierungsschlüssel: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TWedge.
    Registrierungseditor: TWedge Registrierungsschlüssel
  4. Fügen Sie einen neuen Schlüssel mit dem Namen "Parameters" und den Wert "Application" hinzu. Dieser enthält den Pfad zur ausführbaren Datei von TWedge (standardmäßig: C:\Program Files (x86)\TEC-IT\TWedge2\Bin\TWedge.exe C:\TWedge.twi). Die Datei twedge.twi öffnet TWedge mit den vordefinierten Einstellungsparametern!
  5. Registrierungseditor: Neuen Registrierungsschlüssel Parameters hinzufügen
  6. Öffnen Sie den Eigenschaftsdialog des neuen TWedge Dienstes. Diesen finden Sie unter Systemeinstellungen -> Verwaltung -> Dienste.
  7. Gehen Sie zum “Anmelden” Reiter und überprüfen Sie ob die Kontrollbox “Datenaustausch zwischen Dienst und Desktop zulassen” aktiviert ist.
    Dienste: TWedge Eigenschaften
  8. Starten Sie den TWedge Dienst.