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ß
S7 kennt keine Strings.
Du musst Bytes auslesen und selbst in einen String formen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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?
Dir ist aber bewusst, dass wir Deinen aktuell verwendeten Code nicht erraten können?
[Hinweis] Wie poste ich richtig?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
Hallo Spook,
vielen Dank für die Info das hört sich vielversprechend an! Werde es am Montag ausprobieren.
Gruß Goofigoofi
irgendwie klappt das nicht so ganz. In DB2000.DBB11 steht eine "0".
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.
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.
Alles klar. Ich Intelligenzbestie.