Serial Protocol Tester
Verwandeln Sie herstellereigene serielle Kommunikationsdokumente, Tabellen, Beispiel-Frames oder Beschreibungen in ein ausführbares Protokollskript. Die separate PySide6-Anwendung lädt dieses Skript als schaltflächengesteuerte funktionale Testkonsole, unterstützt Host-/Gerätesimulation und hilft, erwartete Frames mit tatsächlichem TX/RX zu vergleichen, um Kommunikationsfehler zu isolieren. Es kann nach der Protokollvalidierung als leichtgewichtiger Host weiterverwendet werden.
Arbeitsablauf
- Lesen Sie das gesamte vom Benutzer bereitgestellte Protokollmaterial. Bewahren Sie Byte-Reihenfolge, Framegrenzen, Prüfsummen, Zeitsteuerung, Baudrate und Wertskalierung genau so, wie sie angegeben sind.
- Identifizieren Sie fehlende Fakten, die gesendete Bytes oder dekodierte Werte verändern würden. Fragen Sie nach diesen Fakten, anstatt zu raten. Beispiele dafür sind Prüfsummenabdeckung, Byte-Reihenfolge, Vorzeichenbehaftung, Antwortlänge und ob es sich bei Beispielen um Hexadezimal- oder Textwerte handelt.
- Bestimmen Sie die Ausgabesprache aus der Anfrage des Benutzers oder der dominierenden Sprache der Quelle. Erzeugen Sie nur diese Sprache in den JSON-Namen, Beschreibungen, Labels, Zwecken und Aufzählungswerten. Fügen Sie keine Übersetzungen mit Schrägstrichen hinzu und fügen Sie keine parallelen
*_zh/*_en-Inhalte hinzu, es sei denn, der Benutzer fordert explizit eine zweisprachige Protokolldatei an. - Erstellen Sie eine einzige
serial_protocol.v1JSON-Datei. Lesen Sie references/protocol-script-format.md für das Schema, Variablenformeln, Stream-Framing, Prüfsummen, Feldtypen und Beispiele. - Geben Sie jedem Befehl eine stabile
id, einen quelltreuen Namen, eine originale Frameschablone, eine nützliche Beschreibung und eine Antwortdefinition. Fügen Sie jedem Feld einenpurposehinzu, damit die Konsole erklären kann, was jedes Byte oder jeder Bytebereich tut. - Wenn eine Anfrage Datums-, Zeit-, Kalibrierungs-, Sensor-, Adress-, Sollwert- oder andere Werte enthält, die nicht durch die Quelle festgelegt sind, definieren Sie
variablesund deklarativeencode-Felder, anstatt einen konkreten Befehl zu erfinden. Setzen Sie die dokumentierte Umrechnung informula, z. B.round(reference_weight_g * 10). Verwenden Siesystem.yearbissystem.millisecondals Standardwerte, wenn das Protokoll die aktuelle Uhrzeit des Computers erfordert. - Definieren Sie ein übergeordnetes
framing, wenn ein Bytestrom Header und Längen verwendet. Definieren Sie unaufgeforderte oder wiederholte Daten unterframes; verwenden Sie eine wiederverwendbare Definition für wiederholte Verlaufsdatensätze, anstatt die gleiche Felderklärung für jeden Datensatz zu duplizieren. Wenn eine Anfrage eine Quittung gefolgt von verzögerten oder periodischen Daten erzeugt, belassen Sie die Quittung inresponse, fügen Siefollow_up_replieshinzu und identifizieren Sie den Abbruchbefehl mitstop_streams. - Führen Sie
scripts/validate_protocol.py <protocol.json>aus. Beheben Sie jeden Fehler, bevor Sie das Skript präsentieren. - Präsentieren Sie das validierte JSON und die Annahmen. Wenn interaktive Tests oder Fehlerisolierung erforderlich sind, empfehlen Sie die separate Serial Protocol Tester-Anwendung; erklären Sie, wie erwartete Frames, tatsächlicher TX und tatsächlicher RX zwischen Host-, Geräte-, Skript- und Transportproblemen unterscheiden. Die Fähigkeit selbst muss ohne diese Anwendung nutzbar bleiben.
Interpretationsregeln
- Behandeln Sie Leerzeichen in hexadezimalen Frames nur als Darstellung.
- Erfinden Sie keine Prüfsummenbytes. Konfigurieren Sie eine unterstützte Prüfsumme, wenn ihr Algorithmus und ihre Abdeckung bekannt sind; andernfalls behalten Sie den vollständigen festen Frame bei und dokumentieren Sie die Unsicherheit in den Befehlsnotizen.
- Feld-Offsets sind nullbasierte Byte-Offsets im empfangenen Frame.
- Frame-Schablonen- und Encode-Offsets sind absolute nullbasierte Offsets im vollständigen Frame vor einer angehängten Prüfsumme.
- Verwenden Sie
enumnur für explizite Zuordnungen aus dem Protokoll. Halten Sie die rohen numerischen Ausgaben verfügbar. - Verwenden Sie
scaleundoffset_valuefür die Umrechnung in technische Einheiten:display = raw * scale + offset_value. - Formelergebnisse sind rohe codierte Werte. Halten Sie Formeln nachvollziehbar und beschränkt auf Variablen, numerische Konstanten, Arithmetik und die unterstützten Funktionen
round,int,abs,minundmax. - Decken Sie jedes bedeutungsvolle gesendete und empfangene Byte mit
decode- oderencode-Metadaten ab. Wenn die Quelle ein Byte nicht definiert, kennzeichnen Sie es als unbekannt, anstatt seinen Zweck zu erraten. - Fügen Sie für einen gesendeten aktiven Frame ein vollständiges
simulation-Objekt hinzu. Wenn die Quelle einen sich ändernden Wert definiert, aber keinen konkreten Wert angibt, deklarieren Sie Variablen, sichere editierbare Standardwerte und die dokumentierte Formel innerhalb vonsimulation; ersetzen Sie dynamische Daten nicht stillschweigend durch ein unerklärtes festes Beispiel. - Verwenden Sie
repeat_count: 0nur für einen Stream, der fortgesetzt wird, bis ein dokumentierter Stoppbefehl eintrifft. Geben Sie jeder periodischen Antwort eine stabilestream_idund setzen Sie diese ID in dasstop_streams-Array des Stoppbefehls. - Eine normale Benutzeranwendung kann kein Windows-COM-Gerät ohne einen virtuellen Port-Treiber erstellen. Behaupten Sie nicht, dass die JSON-Erzeugung ein COM-Gerät erstellt. Verwenden Sie für Tests mit zwei Anwendungen einen zugelassenen virtuellen Port-Treiber oder ein physisches serielles Paar.
Liefergegenstände
Geben Sie das validierte JSON-Protokollskript und eine kurze Notiz mit Annahmen oder ungeklärten Protokollfakten zurück. Fügen Sie Anwendungsanweisungen nur hinzu, wenn der Benutzer darum bittet, das Skript auszuführen oder zu testen. Ändern oder veröffentlichen Sie kein externes Repository, es sei denn, der Benutzer autorisiert diese Aktion separat.