DotNetSiemensPLCToolbox - Baustein in CPU Schreiben ?

nekron

Level-2
Beiträge
332
Reaktionspunkte
30
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin moin,

ist es möglich, in der Toolbox (dann hab ichs wohl uebersehen :) ) nicht nur einen Baustein zu lesen (via .PLCGetBlockInMC7("xx") ) sondern diesen auch wieder zurückzuschreiben und zu aktivieren ?

danke & gruss,
michael
 
PLCGetBlockInMC7 ruft ja die Funktion _dc.getProgramBlock(Helper.GetPLCBlockTypeForBlockList(blk), nr, buffer, ref readsize); auf.
Genauso gibt es eine Funktion _dc.davePutProgramBlock32(blablabla) in libnodave.net.cs.
Dise Funktion ist aber nicht getestet. Ich habe Sie größtenteils von Zottels Beispiel programm übernommen. Deshalb ist diese auch noch nicht in PLCConnection eingefügt. Hab daran nicht weiter gemacht, da ich wenig Zeit hatte, und auch noch eine Umwandlung von AWL in MC7 fehlt.

Du kannst ja mal testen, und mir dann bescheid geben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Achso, eine implementierung in PLCConnetion könnt viel. so aussehen:

Code:
public void PLCPutBlockFromMC7toPLC(string BlockName, byte[] buffer)
        {
            if (AutoConnect && !Connected)
                Connect();

            if (_dc != null)
                lock (_dc)
                {
                    string tmp = BlockName.ToUpper().Trim().Replace(" ", "");
                    string block = "";
                    int nr = 0;
                    if (tmp.Length > 3 && tmp.Substring(0, 3) == "SDB")
                    {
                        block = tmp.Substring(0, 3);
                        nr = Int32.Parse(tmp.Substring(3));
                    }
                    else
                    {
                        block = tmp.Substring(0, 2);
                        nr = Int32.Parse(tmp.Substring(2));
                    }
                    DataTypes.PLCBlockType blk = DataTypes.PLCBlockType.AllBlocks;

                    switch (block)
                    {
                        case "FC":
                            blk = DataTypes.PLCBlockType.FC;
                            break;
                        case "FB":
                            blk = DataTypes.PLCBlockType.FB;
                            break;
                        case "DB":
                            blk = DataTypes.PLCBlockType.DB;
                            break;
                        case "OB":
                            blk = DataTypes.PLCBlockType.OB;
                            break;
                        case "SDB":
                            blk = DataTypes.PLCBlockType.SDB;
                            break;
                    }
                    if (blk == DataTypes.PLCBlockType.AllBlocks || nr < 0)
                        throw new Exception("Unsupported Block Type!");

                    int readsize = buffer.Length;
                    int ret = _dc.putProgramBlock(Helper.GetPLCBlockTypeForBlockList(blk), nr, buffer, ref readsize);

                    if (ret == 53825)
                        throw new Exception("PLC is Password Protected, unlock before downloading Blocks!");
                    else if (ret != 0)
                        throw new Exception("Fehler Code:"+ret.ToString());
                }
            
        }

(alles ungetestet)
 
Zuletzt bearbeitet:
Moin Moin Jochen ...

Super ... Tausend Dank, in der libnodave hab ich mich nicht direkt ans suchen gemacht ...

Ist eigentlich der Binärcode zwischen den CPUs kompatibel ? Oder unterscheiden so sich vom Aufbau je nach Firmware ?

Ich werde den Code am Montag mal auf einer WinAC testen und dann mal berichten ... Vielleicht komisch auch noch dazu das mal auf ein paar andern zu probieren.

Gruß,
Michael
 
Moin Moin Jochen ...

Super ... Tausend Dank, in der libnodave hab ich mich nicht direkt ans suchen gemacht ...

Ist eigentlich der Binärcode zwischen den CPUs kompatibel ? Oder unterscheiden so sich vom Aufbau je nach Firmware ?

Ich werde den Code am Montag mal auf einer WinAC testen und dann mal berichten ... Vielleicht komisch auch noch dazu das mal auf ein paar andern zu probieren.

Gruß,
Michael

In der orginalen libnodave ist das so aber nicht drinn, nur in meiner Version!
Jo, der mc7 code sollte bei allen cpus gleich sein.
 
Zurück
Oben