Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie kann ich eine string Variable aus Siemens S7-1500 mit S7.Net Biblitohek lesen?
Goofigoofi
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

Wie kann ich eine string Variable aus Siemens S7-1500 mit S7.Net Biblitohek lesen?

beantworten | zitieren | melden

Hallo zusammen,

ich benutze die S7.Net Bibliothek um Variablen aus eine S7-1500 Steuerung zu lesen. Bei Int, Bool oder DInt klappt das super aber ich bekomme es nicht hin einen String auszulesen.

Weiß zufällig jemand wie das gehen könnte?

Gruß
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

S7 kennt keine Strings.
Du musst Bytes auslesen und selbst in einen String formen.
private Nachricht | Beiträge des Benutzers
Goofigoofi
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

beantworten | zitieren | melden

Hallo Abt,

ja habe ich versucht.
Der String in der Steuerung fängt bei DB2.DBB10 an.
in DBB10 steht die länge des Strings (254).
ab DBB12 bekomme ich immer eine Null.

was mache ich falsch?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

Dir ist aber bewusst, dass wir Deinen aktuell verwendeten Code nicht erraten können?
[Hinweis] Wie poste ich richtig?
private Nachricht | Beiträge des Benutzers
Spook
myCSharp.de - Member



Dabei seit:
Beiträge: 233
Herkunft: Esslingen a.N.

beantworten | zitieren | melden

Hallo Goofigoofi,

wenn ich das richtig sehe, hast du einen String mit als Längen-Information.
Das erste Byte stellt die maximale Länge des Strings in Bytes dar.
Das zweite Byte die tatsächliche Länge des Strings in Bytes.
Danach folgen die N Bytes des Strings (nicht verwendete Bytes sollten mit 0x00 gefüllt sein).

Du solltest schauen, was in DBB11 steht.

(Alternativ scheint es dafür schon eine Hilfsmethode in der von dir verwendeten Lib zu geben: StringEx.FromByteArray. Hier müsstest du alle Bytes, inklusive Header, in ein Byte-Array kopieren und dann die Methode aufrufen.)

Grüße spooky
private Nachricht | Beiträge des Benutzers
Goofigoofi
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

beantworten | zitieren | melden

Hallo Spook,

vielen Dank für die Info das hört sich vielversprechend an! Werde es am Montag ausprobieren.

Gruß Goofigoofi
private Nachricht | Beiträge des Benutzers
Goofigoofi
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

beantworten | zitieren | melden

irgendwie klappt das nicht so ganz. In DB2000.DBB11 steht eine "0".
private Nachricht | Beiträge des Benutzers
Goofigoofi
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

beantworten | zitieren | melden

Hier ist mein aktueller Code.

namespace S7.Net
{
    public partial class Form1 : Form
    {

        private Plc plc = null;
        public void Open()
        {
            plc.Open();
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.DataSource = Enum.GetNames(typeof(CpuType));
        }

        //Verbinden
        private void button1_Click(object sender, EventArgs e)
        {
            CpuType cpu = (CpuType)Enum.Parse(typeof(CpuType), comboBox1.SelectedValue.ToString());

            plc = new Plc(CpuType.S7300, "192.168.50.10", 0, 1);
            plc.Open();

            if (plc.IsConnected)
            {
                textBox6.Text = "Verbunden";
            }
        }

        //Trennen
        private void button2_Click(object sender, EventArgs e)
        {
            plc.Close();
            textBox6.Text = "Getrennt";
        }

        //Lesen
        private void button3_Click(object sender, EventArgs e)
        {
            string adress = textBox7.Text;
            object result = plc.Read(adress);
            textBox4.Text = string.Format("{0}", result.ToString());
        }

        //Schreiben
        private void button4_Click(object sender, EventArgs e)
        {
            //string adress = textBox7.Text;
            //object setpoint = textBox5.Text;
            //plc.Write(adress, setpoint);
        }
    }

Ich lese einfach die Eingegebene Adresse. warum bekomme ich bei DBB11 eine "0" ?

Checks nicht.
private Nachricht | Beiträge des Benutzers
Spook
myCSharp.de - Member



Dabei seit:
Beiträge: 233
Herkunft: Esslingen a.N.

beantworten | zitieren | melden

Zitat von Goofigoofi
in DBB10 steht die länge des Strings (254).
ab DBB12 bekomme ich immer eine Null.
Zitat von Goofigoofi
In DB2000.DBB11 steht eine "0".

Die Daten sind konsistent:
[254][0][0]
Maximale Länge: 254
Tatsächliche/Benutzte Länge: 0
Erstes Byte: 0

Also ist der String leer.
Vermutlich steht einfach nichts drinnen. Das solltest du prüfen.
private Nachricht | Beiträge des Benutzers
Goofigoofi
myCSharp.de - Member



Dabei seit:
Beiträge: 23

Themenstarter:

beantworten | zitieren | melden

Alles klar. Ich Intelligenzbestie.
private Nachricht | Beiträge des Benutzers