Jetzt zu meiner Frage/meinem Problem:
Ist es normal, dass ich ohne ein eigenes Script die Solltemperatur nicht zur S7 schreiben kann?
Das ist eigentlich kein Problem, wird allerdings bei einer großen Anzahl an Variablen sehr unübersichtlich. Zudem ist es meiner Meinung nach recht sinnfrei sol viele Scripte mit lediglich einer Zeile Code zu schreiben…
Hallo Marc,
was hintert Dich daran eine Actionscript zuzuordnen welches den Schreibbefehl über die dazugehörige S7-Instanz durchführt ??
<?
/*
WEBFRONT-ACTION-SCRIPT fuer S7-Instanzen
Release: 0.1
ReleaseDate: 16.01.2014
ReleaseNote:
16.01.2014 - R0.1 - Gusenbauer
+ Scriptmuster erstellt
*/
if($_IPS['SENDER'] == "WebFront")
{
$S7_Instanz_ID = IPS_GetParent($_IPS['VARIABLE']);
if ($S7_Instanz_ID >= 1)
{
if (IPS_GetInstance($S7_Instanz_ID)['ModuleInfo']['ModuleID'] = "{932076B1-B18E-4AB6-AB6D-275ED30B62DB}")
{
//SIEMENS ADDRESS - Objekt
//Hier gehoert eigentlich zuerst geprueft ob die Verbindung zur PLC ueberhaupt besteht,
//ansosnten kommen dann Fehler beim Schreibversuch !!!
$S7_DataType = IPS_GetProperty($S7_Instanz_ID,"DataType");
if ($S7_DataType == 0)
{
$ret = S7_WriteBit($S7_Instanz_ID, _ConvertToBoolean($_IPS['VALUE']));
}
else if ($S7_DataType == 1)
{
$ret = S7_WriteByte($S7_Instanz_ID, $_IPS['VALUE']);
}
else if ($S7_DataType == 2)
{
$ret = S7_WriteWord($S7_Instanz_ID, $_IPS['VALUE']);
}
else if ($S7_DataType == 3)
{
$ret = S7_WriteDWord($S7_Instanz_ID, $_IPS['VALUE']);
}
else if ($S7_DataType == 4)
{
$ret = S7_WriteShortInt($S7_Instanz_ID, $_IPS['VALUE']);
}
else if ($S7_DataType == 5)
{
$ret = S7_WriteSmallInt($S7_Instanz_ID, $_IPS['VALUE']);
}
else if ($S7_DataType == 6)
{
$ret = S7_WriteInteger($S7_Instanz_ID, $_IPS['VALUE']);
}
else if ($S7_DataType == 7)
{
$ret = S7_WriteReal($S7_Instanz_ID, $_IPS['VALUE']);
}
else
{
$ret = false;
}
if ($ret == true)
{
//Schreiben erfolgreich
S7_RequestRead($S7_Instanz_ID);
//somit muesste ja jetzt die Variablenaktualisierung im WF passieren,
//wie wenn SetValue($_IPS['VARIABLE'], $_IPS['VALUE']) gemacht wird !!
}
else
{
//Fehler bei Schreiben der S7
IPS_LogMessage($_IPS['SELF'],
"Fehler bei schreiben zur S7 mit Typ " . $S7_DataType . " - Wert = " . $_IPS['VALUE']);
//InfoBox ans ERSTEN Webfront zu schreiben !!! (Testweise)
WFC_SendNotification(IPS_GetInstanceListByModuleID("{3565B1F2-8F7B-4311-A4B6-1BF1D868F39E}")[0],
$_IPS['SELF'] . " - " . IPS_GetName($_IPS['SELF']),
"Fehler bei schreiben zur S7 mit Typ " . $S7_DataType . " - Wert = " . $_IPS['VALUE'],
"Information",
3);
}
}
else
{
IPS_LogMessage($_IPS['SELF'], "Instanz ist kein SIEMENS ADDRESS - Objekt");
}
}
else
{
IPS_LogMessage($_IPS['SELF'], "Objekt hat keine Elternobjekt");
}
}
//SUBFUNCTIONS !!!!
function _ConvertToBoolean($Value)
{
$Value = strtoupper($Value);
if (in_array($Value,array('TRUE', 'YES', 'Y', '1', 'ON', 'EIN', 'J', 'JA', true, 1), true))
{
return true;
}
else
{
return false;
}
}
?>
Habe das mal Testweise probiert und funktioniert aus meiner Sicht
tgusi74

WF_S7_ACTIONSCRIPT.zip (1.25 KB)