# Bytes sichtbar lesen mit eCOCKPIT



## M.S (23 April 2020)

Hallo,

ich habe einen Baustein in eCOCKPIT mit dem ich per HTTP_GET "Seiten lesen kann"


```
PROGRAM PLC_PRGVAR
    FbHTTP_Get1: WagoAppHTTP.FbHTTP_Get;
    sURI: STRING(1023) := 'https://www.google.de';
    sUser: STRING(1023);
    sPassword: STRING(1023);
    sHeader: STRING(1023);
    abRxBuffer: ARRAY [0..700] OF BYTE;
    tTimeout: TIME := t#5s;
    xTrigger: BOOL;
    xBusy: BOOL;
    xError: BOOL;
    oStatus: WagoSysErrorBase.FbResult;
    udiRxNBytes: UDINT;
END_VAR
```


in dem Fall zeigt er mir unter abRxBuffer die Bytes (momentan nur 700 aus Testzwecken) die per Ascii umgewandelt werden müssten um diese lesbar zu bekommen .. 

Beispiel von den ersten paar Bytes über Google


```
60 33 100 111 99 116 121 112 101 32 104 116 109 108 62
```
in Ascii

```
<!doctype html>
```

Wie könnte ich es am besten realisieren um die Bytes mir nun im eCOCKPIT direkt lesbar anzeigen zu lassen & am besten nur die Bytes, welche ich benötige (pointer)?
Die realen Daten die ich benötige kommen von einer JSON aus dem lokalen Netz, sollte das eine Rolle spielen.

Wäre um Denkanstöße dankbar.


----------



## oliver.tonn (23 April 2020)

Die Daten werden immer so angezeigt, weil die Variable halt vom Type Byte ist. Man kann lediglich die Ansicht zwischen dezimal, hexadezimal und binär umschalten. 
Um das Ganze als String angezeigt zu bekommen müsstest Du eine Variable vom Typ String anlegen, die die selbe Größe wie das Arrayhat​ oder, falls nicht alles benötigt wird, entsprechend weniger und dann die Daten mit MEMCPY umkopieren (alles oder nur den Teil den Du haben möchtest). Strings müssen mit 0hex abgeschlossen werden, daher müsstest Du am Ende diese noch anhängen, oder, falls das Array mit 0hex automatisch am Ende gefüllt wird und du alle Daten haben möchtest einfach ein Byte mehr kopieren als Du empfangen hast.


----------



## Tobsucht (23 April 2020)

Hallo,

um den Inhalt lesen zu können, könntest Du einen Pointer to String anlegen:

pText  : POINTER TO STRING(255);

Im Programm weist Du dann die Adresse des Byte Arrays dem Pointer zu:

pText := ADR(abRxBuffer);

pText^; // dereferenziert den Pointer

Wenn Du dich einloggst solltest Du beim Pointer den Inhalt des Arrays als Text lesen können.

Grüße


----------



## Thruser (24 April 2020)

Hallo,


M.S schrieb:


> Wie könnte ich es am besten realisieren um die Bytes mir nun im eCOCKPIT direkt lesbar anzeigen zu lassen & am besten nur die Bytes, welche ich benötige (pointer)?
> Die realen Daten die ich benötige kommen von einer JSON aus dem lokalen Netz, sollte das eine Rolle spielen.


woher sollen wir denn wissen welche Bytes Du benötigst?

In diesem Unterforum findest Du zu JSON findest Du hier: https://www.sps-forum.de/wago/92728...iner-xml-datei-auszulesen.html?highlight=json
ein paar Anregungen.

Und dann gibt es noch bei e!cockpit eine JSON Bibliothek, wozu Du bei den Beispielprojekten und auf der Wago Seite unter den Anwendungshinweisen Informationen findest.

Gruß


----------



## M.S (24 April 2020)

Hallo und danke für eure Antworten.

Leider kann ich nur die JSON Variante hernehmen, für zukünftige dinge die eingefügt werden.

@Thruser:

Danke für den Link - die Bib. habe ich auch gefunden ist aber auch scheinbar eine sehr kurze Doku geworden.
Auf die schnelle habe ich es nicht hinbekommen da er mit dem ARRAY vom abRxBuffer nicht klar kommt.

Bytes werden erst mal alle benötigt. Nachträglich möchte ich gerne nur bestimmte Schnipsen angezeigt bekommen.. Beispiel Byte 44-70 welches z.B ein Datum mit Zeit und Beginn / Ende eines Events anzeigt.

Werde mich kommende Woche in Ruhe dran hocken und es weiter probieren mit deinem Link..

Danke an alle!


----------

