Laden...

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

Erstellt von Goofigoofi vor 3 Jahren Letzter Beitrag vor 3 Jahren 2.435 Views
G
Goofigoofi Themenstarter:in
25 Beiträge seit 2020
vor 3 Jahren
Wie kann ich eine string Variable aus Siemens S7-1500 mit S7.Net Biblitohek lesen?

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ß

16.806 Beiträge seit 2008
vor 3 Jahren

S7 kennt keine Strings.
Du musst Bytes auslesen und selbst in einen String formen.

G
Goofigoofi Themenstarter:in
25 Beiträge seit 2020
vor 3 Jahren

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?

16.806 Beiträge seit 2008
vor 3 Jahren

Dir ist aber bewusst, dass wir Deinen aktuell verwendeten Code nicht erraten können?
[Hinweis] Wie poste ich richtig?

S
248 Beiträge seit 2008
vor 3 Jahren

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

G
Goofigoofi Themenstarter:in
25 Beiträge seit 2020
vor 3 Jahren

Hallo Spook,

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

Gruß Goofigoofi

G
Goofigoofi Themenstarter:in
25 Beiträge seit 2020
vor 3 Jahren

irgendwie klappt das nicht so ganz. In DB2000.DBB11 steht eine "0".

G
Goofigoofi Themenstarter:in
25 Beiträge seit 2020
vor 3 Jahren

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.

S
248 Beiträge seit 2008
vor 3 Jahren

in DBB10 steht die länge des Strings (254).
ab DBB12 bekomme ich immer eine Null.

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.

G
Goofigoofi Themenstarter:in
25 Beiträge seit 2020
vor 3 Jahren

Alles klar. Ich Intelligenzbestie.