ioBroker / ioBroker.s7

Connects iobroker with simatic S7 or logo
MIT License
16 stars 13 forks source link

New S7-1500 S7-1200 data types #153

Open HerrJensen81 opened 2 years ago

HerrJensen81 commented 2 years ago

Hello,

thank you for that nice adapter. I tried to add my DB's but i struggled because not all used generic data types are available. It seems that only the old S7 Classic data types are available.

Is it possible to add the missing data types? If I can help please let me know.

Greetings

Jens

Apollon77 commented 2 years ago

Is there any link to some specs for the datatypes?

HerrJensen81 commented 2 years ago

Hallo Ingo,

vielleicht klappt das ja so:

_Overview.pdf DATE.pdf DATE_AND_LTIME.pdf DATE_AND_TIME.pdf DINT.pdf DTL.pdf DWORD.pdf INT.pdf LINT.pdf LREAL.pdf LTIME.pdf LTIME_OF_DAY.pdf LWORD.pdf REAL.pdf S5TIME.pdf SINT.pdf STRING.pdf TIME.pdf TIME_OF_DAY.pdf UDINT.pdf UINT.pdf ULINT.pdf USINT.pdf WCHAR.pdf WORD.pdf WSTRING.pdf BOOL.pdf BYTE.pdf CHAR.pdf

Gruß

Jens

HerrJensen81 commented 2 years ago

Helfen die Beschreibungen?

Apollon77 commented 1 year ago

Generell ja ... Dann mal zur konkreten Frage: Welche Datentypen fehlen Dir denn speziell? Weil ginge ja auch darum das das jemand dann testen kann - oder kannst Du alle 28 testen ;-)

HerrJensen81 commented 1 year ago

Hallo, hatte garnicht mehr mit einer Rückmeldung gerechnet. Ich bin erst wieder ab dem 4.1. 23 zuhause dann kann ich schauen welcher Datentyp es genau war. Es war ein datum/Zeit Typ. Ichkann aber auch alle testen. Kann ja einfach einen DB mit allen Typen anlegen und testen. Wie funktioniert der Excel Import? Gibt es eine Möglichkeit aus TIA direkt nach Excel zu gehen oder muss man das alles neu tippen? Gruß Jens Einen guten Rutsch Am 30.12.22, 00:48 schrieb Ingo Fischer @.***>:

Generell ja ... Dann mal zur konkreten Frage: Welche Datentypen fehlen Dir denn speziell? Weil ginge ja auch darum das das jemand dann testen kann - oder kannst Du alle 28 testen ;-) —Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.***>

Apollon77 commented 1 year ago

Kein Stress, bei über 500 Adaptern und ein paar leuten die ca. 200 davon betreuen kann das schon mal passieren. Wenn es aber gelabelt ist sollte das nie vergessen werden. Deine Import Frage kann ich nicht beantworten weil ich nicht weiss was TIA ist (und auch keine S7 selbst habe). AM besten mach nen export aus dem adapter und vergleiche wie es aussieht

Patt2k commented 1 year ago

Hey Ich habe genau das gleiche Prob wollte ein LREAL übergeben und ging nicht. Wenn du willst kann ich die alle 28 Testen da ich eine TIA 1500 CPU habe.

feuh commented 1 year ago

Hallo, ich würde auch einige der neuen Typen benötigen. Stehe auch gerne zum testen zur Verfügung.

fu-zhou commented 9 months ago

Der Adapter nutzt node-Snap7 über die API https://github.com/mathiask88/node-snap7/blob/master/doc/client.md#data-functions D.h. es können wohl nur die in node-Snap7 vorgesehenen Datentypen genutzt werden, bzw. die. die von Javascript Buffer verarbeitet werden können: https://www.w3schools.com/nodejs/ref_buffer.asp Damit müsste der Adapter um die neuen Datentypen erweitert und in Buffer "übersetzt" werden, aktuell sind Folgende definiert und werden über den Buffer gelesen/ geschrieben (Auszug aus dem Adapter):

if (type === 'BOOL') {
        if (val === true || val === 1 || val === 'true' || val === '1') {
            buf = Buffer.from([1]);
        } else {
            buf = Buffer.from([0]);
        }
    } else if (type === 'BYTE') {
        buf = Buffer.alloc(1);
        buf[0] = parseInt(val, 10) & 0xFF;
    } else if (type === 'WORD') {
        buf = Buffer.alloc(2);
        buf.writeUInt16BE(parseInt(val, 10), 0, 2);
    } else if (type === 'DWORD') {
        buf = Buffer.alloc(4);
        buf.writeUInt32BE(parseInt(val, 10), 0, 4);
    } else if (type === 'INT') {
        buf = Buffer.alloc(2);
        buf.writeInt16BE(parseInt(val, 10), 0, 2);
    } else if (type === 'DINT') {
        buf = Buffer.alloc(4);
        buf.writeInt32BE(parseInt(val, 10), 0, 4);
    } else if (type === 'REAL') {
        buf = Buffer.alloc(4);
        buf.writeFloatBE(parseFloat(val), 0);
    } else if (type === 'STRING' || type === 'ARRAY') {
        if (typeof val === 'string' && val[0] === '{') {
            try {
                val = JSON.parse(val);
            } catch (err) {

            }
        }
        const len = parseInt(data.native.len);
        buf = Buffer.alloc(len);
        if ((iconvTo || iconvToL) && type === 'STRING' && typeof val === 'string') {
            const buffer1 = iconvTo ? iconvTo.convert(val) : iconvToL.encode(val, encoding);
            buffer1.copy(buf, 0, 0, buffer1.byteLength > len ? len : buffer1.byteLength);
        } else {
            let s1;
            for (s1 = 0; s1 < val.length && s1 < len; s1++) {
                buf[s1] = val[s1];
            }
            // zero end string
            if (type === 'STRING') {
                if (s1 >= len) {
                    s1--;
                }
                buf[s1] = 0;
            }
        }
    } else if (type === 'S7STRING') {
        const len = parseInt(data.native.len);
        buf = Buffer.alloc(len + 2);

S7String ist im Auszug oben nicht komplett. Aber in dem Stil könnte jemand, der eine S7 zum Testen und Ahnung von Javascript hat, den Adapter erweitern.