3 Phasen Stromzähler SDM630M DC alle Werte auslesen !!!! Nativ auslesen !!!

Hi,
Who can help me with this?

The SDM has for instance Input registers that count the total amount of Power used since the last reset. For example parameters 37 ‘Import Wh since last reset (2)’ (48) is one that gives you a total based on the last ‘Clr’ action. Others tell you the maximum current or power used, it would be nice to read and then reset these daily.

I also read that trough the Modbus we can reset or Clr the SDM630 remotely. I think it would be nice to reset or clear the SDM630 maybe once a year for the Totals of Energy used, for example every (new year) or every month. The demand maximums maybe reset them daily or weekly.

I have no idea how to write this code, who can help? I found this:

The holding register parameters may be viewed or changed using the Modbus Protocol. Each parameter is held in two consecutive 4X registers. Modbus Protocol Function Code 03 is used to read the parameter and Function Code 16 is used to write. Write to only one parameter per message.

|40217|109|Reset
|—|---|
Logged
Data|00|D8|Write code to reset data group.
Code 1 for Energy. Code 2 for
Demand Maximums. Code 3 for
Demand Maximums and
Demand Time. |r/w|

Some parameters can only be altered when the password is set. I have no idea if this is the case for clearing the SDM630.

Can it be so simple to write a 2 on 216 and the reset is done?

Robert

Hallo,

habe folgendes Problem:

Bisher lief die Datenübermittlung von meinem SDM630 Modbus perfekt. Eingerichtet mit Client Socket, wo auch noch regelmäßig Daten des Zählers ankommen (im Log ersichtlich). Dazu das Modbus Gateway (RTU over TCP) installiert, IP und Port stimmen, es werden keinerlei Fehler bei übergeordneter Instanz angezeigt. Trotzdem steht im Log immer nur: Wait Error; Waiting; Transmit. Diese Meldung erscheint alle 5 Sekunden. Daten werden nicht mehr geloggt.

Zufällig einer eine Ahnung, woran das liegen kann?

IPS-Version: IP-Symcon 4.20, 17.05.2017, fb43dc84e35e

Viele Grüße,

Burkhard

Zähler antwortet nicht.
Parameter im Adapter oder Zähler nicht korrekt eingestellt oder Kabel ab?
Michael

Hallo Michael,

also ich nenn sowas ja immer „Hardware-Bug“ vor dem Monitor.:D:D

Hatte an meiner Elektro-Verteilung gearbeitet und unter Anderem das Signal-Kabel vom SDM ausgewechselt, weil zu lang. War mir hundert prozentig sicher, die auch wieder richtig angeschlossen zu haben.:cool:

Aber da hat mich wohl der Fehler-Teufel erwischt Kabel genau falsch angeschlossen.:banghead::banghead:

Jetzt läuft Alles wieder. :o

Vielen Dank für den richtigen Wink.:o

Viele Grüße,

Burkhard

Die Information, dass du an deinem Elektroverteiler gearbeitet und die Datenleitung vom SDM getauscht hast, wäre im ersten Beitrag von dir aber auch schon sehr sinnvoll gewesen :rolleyes:
Aber gut, dass wir hier Leute haben, welche Meister im Raten sind :smiley:

Oh, du heilige Glaskugel :smiley:
Michael

Hallo BeLo,

Du hast sicherlich recht. Hätte ich schreiben können, aber wie gesagt, der Bug saß vorm Monitor. Ich hatte da selber nicht mehr dran gedacht. Sorry. :o

Viele Grüße,

Burkhard

Klarer Fall von Technikurlaub angesagt… [emoji6]

Gruß

Gesendet von meinem SM-G935F mit Tapatalk

Hi,

Thanks for the script that creates all the 173 variables. After running I noticed that some key variables where missing in the script. Especially the ones that keep track of the used power per phase (L1,L2 and L3). Thanks to B+G E Tech GmbH for there manual I was able to add the missing registers to the script. It now goes to 191 variables!

Have fun with the 18 extra variables!

Robert


<?
/*----------------------------Ausleseadressen--------------------------------*/

/* Anlegen Setzen auf    0  Um die entsprechende Instanz nicht anzulegen oder zu löschen. 
                                1    Um die entsprechende Instanz anzulegen bzw. nicht zu löschen. 
                                2    Wie 1, es wird zusätzlich die Variable unter der Instanz benannt 
                                    mit $Bezeichnung 
                                    oder, wenn $VarName existiert, mit $VarName Siehe Beispiel unter Spannung L1 
                                     
                                3  wie 1 zusätzlich werden WFE Links erstellt. 
                                4    wie 2 zusätzlich werden WFE Links erstellt. */ 
                                     
/* Auskommentieren des Profils bewirkt, das der Variable kein Variablenprofil zugewiesen wird. 
    Profile ohne "Tilde" müssen, wenn gewünscht, vorher selbst angelegt werden. 
   Die Jeweils erste Kommentarzeile ist die Beschreibung aus dem Handbuch, 
    die Bezeichnung ist von mir teilweise übersetzt und kann natürlich frei gewählt werden */ 
     
/*    TextVor -Nach Kann Frei gelassen werden. */ 

/*--------------------------------Config-------------------------------------*/ 
$ParentId = 47198 /*[Hardware\ModBus\SDM630]*/; //Dort werden die Instanzen angelegt.
$SplitterId = 35396 /*[ModBus SDM630 Gateway]*/; //Id des Modbus RTU Spliters
$WFEId = 17908; // Nur relevant bei $Anlegen > 2 
$TextVor = "";    // z.B. $TextVor = "UV_EG"; 
$TextNach = ""; 

/*----------------------------Ausleseadressen--------------------------------*/ 

//Phase 1 line to neutral volts 
$Anlegen[1] = 2; 
$Bezeichnung[1] = "Voltage L1"; 
//$VarName[1] = "Variablen Name"; 
$Profil[1] = "~Volt"; 


//Phase 2 line to neutral volts 
$Anlegen[2] = 2; 
$Bezeichnung[2] = "Voltage L2"; 
$Profil[2] = "~Volt"; 


//Phase 3 line to neutral volts 
$Anlegen[3] = 2; 
$Bezeichnung[3] = "Voltage L3"; 
$Profil[3] = "~Volt"; 


//Phase 1 current 
$Anlegen[4] = 2; 
$Bezeichnung[4] = "Current L1"; 
$Profil[4] = "~Ampere"; 

//Phase 2 current 
$Anlegen[5] = 2; 
$Bezeichnung[5] = "Current L2"; 
$Profil[5] = "~Ampere"; 

//Phase 3 current 
$Anlegen[6] = 2; 
$Bezeichnung[6] = "Current L3"; 
$Profil[6] = "~Ampere"; 

//Phase 1 Power 
$Anlegen[7] = 2; 
$Bezeichnung[7] = "Power L1"; 
$Profil[7] = "~Watt.3680"; 

//Phase 2 Power 
$Anlegen[8] = 2; 
$Bezeichnung[8] = "Power L2"; 
$Profil[8] = "~Watt.3680"; 

//Phase 3 Power 
$Anlegen[9] = 2; 
$Bezeichnung[9] = "Power L3"; 
$Profil[9] = "~Watt.3680"; 

//Phase 1 volt amps 
$Anlegen[10] = 0; 
$Bezeichnung[10] = "ScheinPower L1"; 
//$Profil[10] = "VoltAmpere"; 

//Phase 2 volt amps 
$Anlegen[11] = 0; 
$Bezeichnung[11] = "ScheinPower L2"; 
//$Profil[11] = "VoltAmpere"; 

//Phase 3 volt amps 
$Anlegen[12] = 0; 
$Bezeichnung[12] = "Scheinleistung L3"; 
//$Profil[12] = "VoltAmpere"; 

//Phase 1 volt amps reactive 
$Anlegen[13] = 0; 
$Bezeichnung[13] = "Blindleistung L1"; 
//$Profil[13] = "VAr"; 

//Phase 2 volt amps reactive 
$Anlegen[14] = 0; 
$Bezeichnung[14] = "Blindleistung L2"; 
//$Profil[14] = "VAr"; 

//Phase 3 volt amps reactive 
$Anlegen[15] = 0; 
$Bezeichnung[15] = "Blindleistung L3"; 
//$Profil[15] = "VAr"; 

//Phase 1 power factor (1) 
$Anlegen[16] = 0; 
$Bezeichnung[16] = "Power Faktor L1"; 
//$Profil[16] = "None"; 

//Phase 2 power factor (1) 
$Anlegen[17] = 0; 
$Bezeichnung[17] = "Power Faktor L2"; 
//$Profil[17] = "None"; 

//Phase 3 power factor (1) 
$Anlegen[18] = 0; 
$Bezeichnung[18] = "Power Faktor L3"; 
//$Profil[18] = "None"; 

//Phase 1 phase angle 
$Anlegen[19] = 0; 
$Bezeichnung[19] = "Phase Angel L1"; 
//$Profil[19] = "Degrees"; 

//Phase 2 phase angle 
$Anlegen[20] = 0; 
$Bezeichnung[20] = "Phase Angel L2"; 
//$Profil[20] = "Degrees"; 

//Phase 3 phase angle 
$Anlegen[21] = 0; 
$Bezeichnung[21] = "Phase Angel L3"; 
//$Profil[21] = "Degrees"; 

//Average line to neutral Volts 
$Anlegen[22] = 0; 
$Bezeichnung[22] = "Average to neutral Volts"; 
$Profil[22] = "~Volt"; 

//Average line current 
$Anlegen[24] = 2; 
$Bezeichnung[24] = "Average Current"; 
$Profil[24] = "~Ampere"; 

//Sum of line Currents 
$Anlegen[25] = 2; 
$Bezeichnung[25] = "Sum Currents"; 
$Profil[25] = "~Ampere"; 

//Total system power 
$Anlegen[27] = 2; 
$Bezeichnung[27] = "Total Sytem Power"; 
$Profil[27] = "~Watt.14490"; 

//Total system volts amps 
$Anlegen[29] = 0; 
$Bezeichnung[29] = "Scheinleistung Insgesamt"; 
//$Profil[29] = "VA"; 

//Total system VAr 
$Anlegen[31] = 0; 
$Bezeichnung[31] = "Blindleistung Insgesamt"; 
//$Profil[31] = "VAr"; 

//Total system power factor 
$Anlegen[32] = 0; 
$Bezeichnung[32] = "Power Faktor Insgesamt"; 
//$Profil[32] = "None"; 

//Total system phase angle 
$Anlegen[34] = 0; 
$Bezeichnung[34] = "Phasenwinkel Insgesamt"; 
//$Profil[34] = "Degrees"; 

//Frequency of supply voltages 
$Anlegen[36] = 0; 
$Bezeichnung[36] = "Frequency of supply voltages"; 
//$Profil[36] = "Hz"; 

//Import Wh since last reset(2) 
$Anlegen[37] = 2; 
$Bezeichnung[37] = "Total Consumption"; 
$Profil[37] = "~Electricity"; 

//Export Wh since last reset(2) 
$Anlegen[38] = 0; 
$Bezeichnung[38] = "Export Wh since last reset(2)"; 
//$Profil[38] = "kWh/MWh"; 

//Import VArh since last reset(2) 
$Anlegen[39] = 0; 
$Bezeichnung[39] = "Import VArh since last reset(2)"; 
//$Profil[39] = "kVArh/MVArh"; 

//Export VArh since last reset(2) 
$Anlegen[40] = 0; 
$Bezeichnung[40] = "Export VArh since last reset(2)"; 
//$Profil[40] = "kVArh/MVArh"; 

//VAh since last reset(2) 
$Anlegen[41] = 0; 
$Bezeichnung[41] = "VAh since last reset(2)"; 
//$Profil[41] = "kVAh/MVAh"; 

//Ah since last reset(3) 
$Anlegen[42] = 2; 
$Bezeichnung[42] = "Ah since last reset(3)"; 
//$Profil[42] = "Ah/kAh"; 

//Total system power demand (4) 
$Anlegen[43] = 2; 
$Bezeichnung[43] = "Total system power demand (4)"; 
$Profil[43] = "~Watt.14490"; 

//Maximum total system power 
$Anlegen[44] = 2; 
$Bezeichnung[44] = "Maximum total system power"; 
$Profil[44] = "~Watt.14490"; 

//Total system VA demand 
$Anlegen[51] = 0; 
$Bezeichnung[51] = "Total system VA demand"; 
//$Profil[51] = "VA"; 

//Maximum total system VA demand 
$Anlegen[52] = 0; 
$Bezeichnung[52] = "Maximum total system VA demand"; 
//$Profil[52] = "VA"; 

//Neutral current demand 
$Anlegen[53] = 0; 
$Bezeichnung[53] = "Neutral current demand"; 
$Profil[53] = "~Ampere"; 

//Maximum neutral current demand 
$Anlegen[54] = 0; 
$Bezeichnung[54] = "Maximum neutral current demand"; 
$Profil[54] = "~Ampere"; 

//Line 1 to Line 2 volts 
$Anlegen[101] = 0; 
$Bezeichnung[101] = "Spannung zwischen L1 und L2"; 
$Profil[101] = "~Volt"; 

//Line 2 to Line 3 volts 
$Anlegen[102] = 0; 
$Bezeichnung[102] = "Spannung zwischen L2 und L3"; 
$Profil[102] = "~Volt"; 

//Line 3 to Line 1 volts 
$Anlegen[103] = 0; 
$Bezeichnung[103] = "Spannung zwischen L1 und L3"; 
$Profil[103] = "~Volt"; 

//Average line to line volts 
$Anlegen[104] = 0; 
$Bezeichnung[104] = "Spannung zwischen den Phasen durchschnittlich"; 
$Profil[104] = "~Volt"; 

//Neutral current 
$Anlegen[113] = 0; 
$Bezeichnung[113] = "Strom auf dem Neutralleiter"; 
$Profil[113] = "~Ampere"; 

//Phase 1 L/N volts THD 
$Anlegen[118] = 0; 
$Bezeichnung[118] = "Phase 1 L/N volts THD"; 
//$Profil[118] = "%"; 

//Phase 2 L/N volts THD 
$Anlegen[119] = 0; 
$Bezeichnung[119] = "Phase 2 L/N volts THD"; 
//$Profil[119] = "%"; 

//Phase 3 L/N volts THD 
$Anlegen[120] = 0; 
$Bezeichnung[120] = "Phase 3 L/N volts THD"; 
//$Profil[120] = "%"; 

//Phase 1 Current THD 
$Anlegen[121] = 0; 
$Bezeichnung[121] = "Phase 1 Current THD"; 
//$Profil[121] = "%"; 

//Phase 2 Current THD 
$Anlegen[122] = 0; 
$Bezeichnung[122] = "Phase 2 Current THD"; 
//$Profil[122] = "%"; 

//Phase 3 Current THD 
$Anlegen[123] = 0; 
$Bezeichnung[123] = "Phase 3 Current THD"; 
//$Profil[123] = "%"; 

//Average line to neutral volts THD 
$Anlegen[125] = 0; 
$Bezeichnung[125] = "Average line to neutral volts THD"; 
//$Profil[125] = "%"; 

//Average line current THD 
$Anlegen[126] = 0; 
$Bezeichnung[126] = "Average line current THD"; 
//$Profil[126] = "%"; 

//Total system power factor (5) 
$Anlegen[128] = 0; 
$Bezeichnung[128] = "Total system power factor (5)"; 
//$Profil[128] = "Degrees"; 

//Phase 1 current demand 
$Anlegen[130] = 0; 
$Bezeichnung[130] = "Phase 1 current demand"; 
$Profil[130] = "~Ampere"; 

//Phase 2 current demand 
$Anlegen[131] = 0; 
$Bezeichnung[131] = "Phase 2 current demand"; 
$Profil[131] = "~Ampere"; 

//Phase 3 current demand 
$Anlegen[132] = 0; 
$Bezeichnung[132] = "Phase 3 current demand"; 
$Profil[132] = "~Ampere"; 

//Maximum phase 1 current demand 
$Anlegen[133] = 2; 
$Bezeichnung[133] = "Maximum phase 1 current demand"; 
$Profil[133] = "~Ampere"; 

//Maximum phase 2 current demand 
$Anlegen[134] = 2; 
$Bezeichnung[134] = "Maximum phase 2 current demand"; 
$Profil[134] = "~Ampere"; 

//Maximum phase 3 current demand 
$Anlegen[135] = 2; 
$Bezeichnung[135] = "Maximum phase 3 current demand"; 
$Profil[135] = "~Ampere"; 

//Line 1 to line 2 volts THD 
$Anlegen[168] = 0; 
$Bezeichnung[168] = "Line 1 to line 2 volts THD"; 
//$Profil[168] = "%"; 

//Line 2 to line 3 volts THD 
$Anlegen[169] = 0; 
$Bezeichnung[169] = "Line 2 to line 3 volts THD"; 
//$Profil[169] = "%"; 

//Line 3 to line 1 volts THD 
$Anlegen[170] = 0; 
$Bezeichnung[170] = "Line 3 to line 1 volts THD"; 
//$Profil[170] = "%"; 

//Average line to line volts THD 
$Anlegen[171] = 0; 
$Bezeichnung[171] = "Average line to line volts THD"; 
//$Profil[171] = "%"; 

//Total active energy 
$Anlegen[172] = 0; 
$Bezeichnung[172] = "Total active energy"; 
$Profil[172] = "~Electricity"; 

//Total reactive energy 
$Anlegen[173] = 0; 
$Bezeichnung[173] = "Total reactive energy"; 
//$Profil[173] = "kVarh"; 

// L1 Import Total kWh
$Anlegen[174] = 2; 
$Bezeichnung[174] = "L1 Import Total kWh"; 
$Profil[174] = "~Electricity"; 

// L2 Import Total kWh
$Anlegen[175] = 2; 
$Bezeichnung[175] = "L2 Import Total kWh"; 
$Profil[175] = "~Electricity"; 

// L3 Import Total kWh
$Anlegen[176] = 2; 
$Bezeichnung[176] = "L3 Import Total kWh"; 
$Profil[176] = "~Electricity"; 

// L1 Export Total kWh
$Anlegen[177] = 0; 
$Bezeichnung[177] = "L1 Export Total kWh"; 
$Profil[177] = "~Electricity"; 

// L2 Export Total kWh
$Anlegen[178] = 0; 
$Bezeichnung[178] = "L2 Export Total kWh"; 
$Profil[178] = "~Electricity"; 

// L3 Export Total kWh
$Anlegen[179] = 0; 
$Bezeichnung[179] = "L3 Export Total kWh"; 
$Profil[179] = "~Electricity"; 

// L1 Total kWh
$Anlegen[180] = 2; 
$Bezeichnung[180] = "L1 Total kWh"; 
$Profil[180] = "~Electricity"; 

// L2 Total kWh
$Anlegen[181] = 2; 
$Bezeichnung[181] = "L2 Total kWh"; 
$Profil[181] = "~Electricity"; 

// L3 Total kWh
$Anlegen[182] = 2; 
$Bezeichnung[182] = "L3 Total kWh"; 
$Profil[182] = "~Electricity"; 

// L1 Import Total kVarh 
$Anlegen[183] = 0; 
$Bezeichnung[183] = "L1 Import Total kVarh"; 
//$Profil[183] = "kVarh"; 

// L2 Import Total kVarh 
$Anlegen[184] = 0; 
$Bezeichnung[184] = "L2 Import Total kVarh"; 
//$Profil[184] = "kVarh"; 

// L3 Import Total kVarh 
$Anlegen[185] = 0; 
$Bezeichnung[185] = "L3 Import Total kVarh"; 
//$Profil[185] = "kVarh"; 

// L1 Export Total kVarh 
$Anlegen[186] = 0; 
$Bezeichnung[186] = "L1 Export Total kVarh"; 
//$Profil[186] = "kVarh"; 

// L2 Export Total kVarh 
$Anlegen[187] = 0; 
$Bezeichnung[187] = "L2 Export Total kVarh"; 
//$Profil[187] = "kVarh"; 

// L3 Export Total kVarh 
$Anlegen[188] = 0; 
$Bezeichnung[188] = "L3 Export Total kVarh"; 
//$Profil[188] = "kVarh"; 

// L1 Total kVarh 
$Anlegen[189] = 0; 
$Bezeichnung[189] = "L1 Total kVarh"; 
//$Profil[189] = "kVarh"; 

// L2 Total kVarh 
$Anlegen[190] = 0; 
$Bezeichnung[190] = "L2 Total kVarh"; 
//$Profil[190] = "kVarh"; 

// L2 Total kVarh 
$Anlegen[190] = 0; 
$Bezeichnung[190] = "L2 Total kVarh"; 
//$Profil[190] = "kVarh"; 

// L3 Total kVarh 
$Anlegen[191] = 2; 
$Bezeichnung[191] = "L3 Total kVarh"; 
//$Profil[191] = "kVarh"; 

/*---------------------------------------------------------------------------*/  

for ($i = 1; $i <=191; $i++) 
            { 
            $InstanzId = @IPS_GetObjectIDByIdent ($i , $ParentId); 
            if($InstanzId != false) 
                  { 
                  $ChildIds = IPS_GetChildrenIDs($InstanzId); 
                  IPS_SetName($InstanzId, "$TextVor $Bezeichnung[$i] $TextNach"); 
                  if(isset($Profil[$i])) 
                                    IPS_SetVariableCustomProfile($ChildIds[0], $Profil[$i]); 
                                     
                  if(isset($VarName[$i]) && ($Anlegen[$i] === 2 || $Anlegen[$i] === 4)) 
                                    { 
                                     IPS_SetName ($ChildIds[0], $VarName[$i]); 
                            echo ("$Bezeichnung[$i]: Bezeichnungen aktualisiert 
"); 
                                    }elseif (isset($Anlegen[$i]) && ($Anlegen[$i] === 2 || $Anlegen[$i] === 4)) 
                                          { 
                                          IPS_SetName ($ChildIds[0], "$TextVor $Bezeichnung[$i] $TextNach"); 
                                          echo ("$Bezeichnung[$i]: Bezeichnungen aktualisiert 
"); 
                                          } 
                                           
               if(isset($VarName[$i]) && $Anlegen[$i] >=3) 
                                    SetLinkByName($WFEId, $VarName[$i], $ChildIds[0], "BGETechInstall$i"); 
                            elseif (isset ($Anlegen[$i]) && $Anlegen[$i] >=3) 
                                  SetLinkByName($WFEId, $Bezeichnung[$i], $ChildIds[0], "BGETechInstall$i"); 
                  } 
            if(isset($Anlegen[$i]) && $Anlegen[$i] >= 1) 
                    { 
                    if ($InstanzId === false) 
                            { 
                            $InstanzId = IPS_CreateInstance("{CB197E50-273D-4535-8C91-BB35273E3CA5}"); 
                            IPS_SetParent ($InstanzId, $ParentId); 
                            IPS_SetName($InstanzId, "$TextVor $Bezeichnung[$i] $TextNach"); 
                            IPS_SetIdent ($InstanzId, $i); 
                            IPS_SetProperty ($InstanzId , "WriteAddress", 0); 
                            IPS_SetProperty ($InstanzId , "EmulateStatus", false); 
                            IPS_SetProperty ($InstanzId , "ReadAddress", ($i-1)*2); 
                            IPS_SetProperty ($InstanzId , "DataType", 7); 
                            IPS_SetProperty ($InstanzId , "ReadFunctionCode" , 4);
                            IPS_SetProperty ($InstanzId , "WriteFunctionCode" , 0);
                            IPS_SetProperty ($InstanzId , "Poller", 5000);
                            IPS_DisconnectInstance($InstanzId); 
                            IPS_ConnectInstance ($InstanzId, $SplitterId); 
                            IPS_ApplyChanges($InstanzId); 
                            $ChildIds = IPS_GetChildrenIDs($InstanzId); 
                             
                            if(isset($Profil[$i])) 
                                    IPS_SetVariableCustomProfile($ChildIds[0], $Profil[$i]); 
                                     
                     if(isset($VarName[$i]) && ($Anlegen[$i] === 2 || $Anlegen[$i] === 4)) 
                                    { 
                                     IPS_SetName ($ChildIds[0], $VarName[$i]); 
                                    }elseif (isset($Anlegen[$i]) && ($Anlegen[$i] === 2 || $Anlegen[$i] === 4)) 
                                          IPS_SetName ($ChildIds[0], "$TextVor $Bezeichnung[$i] $TextNach"); 
                                           
                     if(isset($VarName[$i]) && $Anlegen[$i] >=3) 
                                    SetLinkByName($WFEId, $VarName[$i], $ChildIds[0], "BGETechInstall$i"); 
                            elseif ($Anlegen[$i] >=3) 
                                  SetLinkByName($WFEId, $Bezeichnung[$i], $ChildIds[0], "BGETechInstall$i"); 
                                   
                            echo ("$Bezeichnung[$i]: Instanz erfolgreich angelegt 
"); 
                            }elseif($Anlegen[$i] >= 1) 
                                    echo ("$Bezeichnung[$i]: Instanz schon vorhanden 
"); 
                    }elseif (isset($Anlegen[$i]) && !$InstanzId === false && $Anlegen[$i] === 0) 
                    { 
                          IPS_DeleteLink (IPS_GetObjectIDByIdent ("BGETechInstall$i", $WFEId )); 
                          foreach ($ChildIds as $ChildId) 
                                    IPS_DeleteVariable($ChildId); 
                            if (IPS_DeleteInstance ($InstanzId)); 
                                    echo ("$Bezeichnung[$i]: Instanz gelöscht 
"); 
                    } 
            } 
function SetLinkByName($parentID, $name, $targetID, $Ident) 
        { 
         $LinkId = @IPS_GetObjectIDByIdent ($Ident, $parentID ); 
         if($LinkId === false) 
             { 
                $LinkId = IPS_CreateLink();       //Link anlegen 
                IPS_SetLinkTargetID($LinkId, $targetID); 
              IPS_SetParent($LinkId, $parentID); 
              IPS_SetIdent ($LinkId, $Ident); 
                } 
        IPS_SetName($LinkId, $name);         //Link benennen 
        return $LinkId; 
         }  
?>

Hi,

I succeeded in unlocking the SDM630 by sending the password, in my case it’s still the default password 1000. Sadly when trying to clear the memory of the SDM630 by sending a value I get an error: ILLEGAL_FUNCTION. Modbus address is on Write Multiple registers (16) with address 216. I tried them all: Einheit (Nur-Lesen deaktiviert) = Byte, Word, DWord, ShortInt, SmallInt, Integer, Float. Always the same result: ILLEGAL_FUNCTION. What am I doing wrong?


<?

 //Unlock SDM630 by sending the Password (default 1000) to Holding register address 24 
ModBus_WriteRegisterReal(22299 /*[Hardware\ModBus\SDM630\Password]*/, 1000);

// Read if SDM630 is Unlocked by checking Address 14 of the Holding register
$Unlocked = Getvalue(49625 /*[Hardware\ModBus\SDM630\Password Locked\Value]*/);

If ($Unlocked == 1) { 
	// Try to reset by writing Address 216 with a reset value (Code 1, Code 2 or Code 3)
	ModBus_WriteRegisterReal(24558 /*[Hardware\ModBus\SDM630\Reset SDM 630]*/, 1);
	
	// Result ILLEGAL_FUNCTION in script on line 10
}

?>

Any ideas? What can they mean with sending Code 1, Code 2 or Code 3?
Robert

Moin,

wollte nach einiger Zeit meinen SDM630 wieder in IPS in Betrieb nehmen bzw. die Anbindung in IPS erweitern, denn das lief schon mal. Nun bekomme ich allerdings überhaupt keine Werte mehr aus dem Zähler. Habe noch einen zweiten Zähler DRS210C. Auch diesem kann ich keine Daten mehr entlocken. Ich habe auch verschiedene RS485-USB-Adapter versucht, verschiedene Kabel, zwei IPS-Installationen.

Wie kann ich die Anbindung prüfen?

Hallo Andreas,
es ist schwierig in diesem Fall den richtigen Tipp abzugeben.:o
Ist ein Oszilloskop parat, kann kontrolliert werden ob der USB-RS485 was raus schickt,
ein sauberes Rechtecksignal vorhanden ist und eventuell was vom Stromzähler kommt.
Wie lange ist das Kabel, eventuell geschirmt?
Ist ein Busabschluss vorhanden ( z.B. 350Ohm )?
Der Abschlusswiderstand ist je nach Leitungslänge zu verringern ( im Netz nachlesen ).
Bei mir hat auch mal die Kommunikation nicht funktioniert nach einem Umbau.
Ein vertauschen an einer Seite bei der A- und B-Leitung, war da meine Lösung.
Und natürlich die Schnittstelleneinstellung muss auch übereinstimmen.
Baudrate, Datenbits, Stopbits und Parität.

Da gibt es einige mögliche Fehlerquellen.:wink:

Hallo,

dank den Hinweisen im Beitrag https://www.symcon.de/forum/threads/38239-Raspberry-PI-RS232-Serial-to-Ethernet-Converter?p=369920#post369920
konnte ich den „virtuellen Com Port“ stanzen und
nur über TCP auf den Stromzähler zugreifen.
Somit ist ein Umzug von Windows auf Linux bald möglich.
:slight_smile:

Hallo.

Ich habe alles so gemacht wie von drapple in diesem und dem Anderen Thread beschrieben.
Genutzt habe ich so ein USR… Teil aus China.

Es kommen auch Werte an und werden im WF angezeigt.

Leider gibt es da noch immer das Problem, dass die ausgelesenen Daten immer wieder mal total falsch werden und daher
alles angezeigte nicht stimmt.

Baudrate, Stoppbit usw hab ich alle genau so eingestellt wie von euch beschrieben. Da das Kabel nur ca. 50cm lang ist, hab ich nicht terminiert. Ich kann mir auch nicht vorstellen, dass es daran liegt, ich bekomme ja Daten…

Hat jemand noch nen Tipp??

Danke auf jeden Fall für eure Arbeit!!

Wie hast du den USR eingestellt?
Einige können wandeln zwischen ModBus TCP und ModBus RTU. Das hat letztens bei jemanden zu Problemen geführt.
Umgestellt auf Modus RAW und in IPS auf ModBus RTU over TCP und der Spuck war vorbei.
Michael