Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New S7-1500 S7-1200 data types #153

Open
HerrJensen81 opened this issue Oct 14, 2022 · 9 comments
Open

New S7-1500 S7-1200 data types #153

HerrJensen81 opened this issue Oct 14, 2022 · 9 comments

Comments

@HerrJensen81
Copy link

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
Copy link
Contributor

Is there any link to some specs for the datatypes?

@HerrJensen81
Copy link
Author

Helfen die Beschreibungen?

@Apollon77
Copy link
Contributor

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
Copy link
Author

HerrJensen81 commented Dec 30, 2022 via email

@Apollon77
Copy link
Contributor

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
Copy link

Patt2k commented May 2, 2023

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
Copy link

feuh commented Aug 7, 2023

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

@fu-zhou
Copy link

fu-zhou commented Jan 13, 2024

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.

@fu-zhou fu-zhou mentioned this issue Jan 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants