SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Websites optimieren für Google & Co.

Websites optimieren für Google & Co. zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Thema geschlossen
 
Themen-Optionen Ansicht
  #1  
Alt 12.03.2013, 11:27:21
Datta90 Datta90 ist offline
Anfänger
 
Registriert seit: Mar 2013
Alter: 30
Beiträge: 11
Mit PHP auf Simatic.net OPC Server zugreifen (XML SOAP)

Hallo ihr Wissenden,
ich möchte die Prozessdaten meiner Steuerung via Browser schreiben und anzeigen. Habe hierfür einen Simatic.net(!!!) OPC Server und den xampp Webserver auf ein und demselben PC. Nun möchte ich mir einen(SOAP-)Client in PHP schreiben, welcher auf die DA-XML Schnittstelle des OPC Servers zugreift. Obwohl ich schon etliche Internetseiten durchforstet habe, sind meine Kenntnisse bezüglich PHP und SOAP noch(!) recht begrenzt. Mit folgendem Codeschnipsel habe ich mir erstmal die Funktionen und Typen aus der WSDL gelesen:

PHP-Code:
<?php
error_reporting
(-1);
ini_set('display_errors'TRUE);

$wsdl 'C:\Program Files\Siemens\SIMATIC.NET\opc2\samples\xml\sync\we b references\localhost\sopcweb.wsdl';
$soapclient = new SoapClient($wsdl);

?>
<h1>Funktionen</h1>
<pre> <?php var_dump($soapclient->__getFunctions())?> </pre>
<h1>Typen</h1>
<pre> <?php var_dump($soapclient->__getTypes())?> </pre>
Nun fehlt mir leider ein bisschen der Start. Hat von euch einer ein bisschen Code, wo ich erstmal was sehe, also vielleicht mal eine Prozessvariable auslesen oder zum Server verbinden (bezogen auf Simatic.Net)?
Vielen Dank im Voraus.
Liebe Grüße!

PS1: Falls benötigt stelle ich auch gern die Antwort der wsdl online
PS2: Bitte keine Verweise auf google und co. ich habe wirklich schon gesucht wie ein Großer=)
  #2  
Alt 13.03.2013, 12:37:46
Datta90 Datta90 ist offline
Anfänger
 
Registriert seit: Mar 2013
Alter: 30
Beiträge: 11
Fatal error: Server was unable to process request. ---> Value cannot be null

Hallo Freunde der Programmiersprache PHP=)
Ich versuche verzweifelt Daten von einem OPC Server (Soap/xml) zu lesen und erhalte folgende Fehlermeldung:

Fatal error: Uncaught SoapFault exception: [soap:Server] Server was unable to process request. ---> Value cannot be null. Parameter name: Item List in B:\xampp\htdocs\meine\testb.php:22 Stack trace: #0 B:\xampp\htdocs\meine\testb.php(72): SoapClient->__soapCall('read', Array) #1 {main} thrown in B:\xampp\htdocs\meine\testb.php on line 33

Nun also erstmal mein bisschen PHP-Code:
<?php
error_reporting(-1);
ini_set('display_errors', TRUE);

$wsdl = 'http://192.168.38.1/OPC.Simatic.NET/SOPCWeb.asmx?WSDL';

$werte=array();
$werte["Options"]=array(
"RequestDeadline"=>"",
"ReturnErrorText"=>"",
"ReturnDiagnosticInfo"=>True,
"ReturnItemTime"=>"",
"ReturnItemPath"=>True,
"ReturnItemName"=>"",
"ClientRequestHandle"=>"",
"LocaleID"=>""
);
$werte["Itemlist"]=array(
"Items"=>array("ItemPath"=>"",
"ReqType"=>"",
"ItemName"=>"S7:[OPC_1]MX1.0",
"ClientItemHandle"=>"",
"MaxAge"=>""
),
"ItemPath"=>"",
"ReqType"=>"",
"MaxAge"=>""
);



$client = new SoapClient($wsdl);
$result = $client->__soapCall("read",$werte);

echo $result->RItemList->Items->Quality; /*DAS IST LINE 33*/

?>


Hier die zugerhörige wsdl(SOAP)-Datei: (könnt ihr erstmal überspringen unten stehts übersichtlicher)
POST /OPC.Simatic.NET/SOPCWeb.asmx HTTP/1.1
Host: localhost
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<Read xmlns="http://opcfoundation.org/webservices/XMLDA/1.0/">
<Options RequestDeadline="dateTime" ReturnErrorText="boolean" ReturnDiagnosticInfo="boolean" ReturnItemTime="boolean" ReturnItemPath="boolean" ReturnItemName="boolean" ClientRequestHandle="string" LocaleID="string" />
<ItemList ItemPath="string" ReqType="q1:QName" xmlns:q1="http://tempuri.org/SampleNamespace" MaxAge="int">
<Items ItemPath="string" ReqType="q1:QName" ItemName="string" ClientItemHandle="string" MaxAge="int" />
<Items ItemPath="string" ReqType="q1:QName" ItemName="string" ClientItemHandle="string" MaxAge="int" />
</ItemList>
</Read>
</soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<ReadResponse xmlns="http://opcfoundation.org/webservices/XMLDA/1.0/">
<ReadResult RcvTime="dateTime" ReplyTime="dateTime" ClientRequestHandle="string" RevisedLocaleID="string" ServerState="running or failed or noConfig or suspended or test or commFault" />
<RItemList Reserved="string">
<Items ItemPath="string" ItemName="string" ClientItemHandle="string" Timestamp="dateTime" ResultID="q1:QName" xmlns:q1="http://tempuri.org/SampleNamespace" ValueTypeQualifier="q1:QName">
<DiagnosticInfo>string</DiagnosticInfo>
<Value />
<Quality QualityField="bad or badConfigurationError or badNotConnected or badDeviceFailure or badSensorFailure or badLastKnownValue or badCommFailure or badOutOfService or badWaitingForInitialData or uncertain or uncertainLastUsableValue or uncertainSensorNotAccurate or uncertainEUExceeded or uncertainSubNormal or good or goodLocalOverride" LimitField="none or low or high or constant" VendorField="unsignedByte" />
</Items>
<Items ItemPath="string" ItemName="string" ClientItemHandle="string" Timestamp="dateTime" ResultID="q1:QName" xmlns:q1="http://tempuri.org/SampleNamespace" ValueTypeQualifier="q1:QName">
<DiagnosticInfo>string</DiagnosticInfo>
<Value />
<Quality QualityField="bad or badConfigurationError or badNotConnected or badDeviceFailure or badSensorFailure or badLastKnownValue or badCommFailure or badOutOfService or badWaitingForInitialData or uncertain or uncertainLastUsableValue or uncertainSensorNotAccurate or uncertainEUExceeded or uncertainSubNormal or good or goodLocalOverride" LimitField="none or low or high or constant" VendorField="unsignedByte" />
</Items>
</RItemList>
<Errors ID="q1:QName" xmlns:q1="http://tempuri.org/SampleNamespace">
<Text>string</Text>
</Errors>
<Errors ID="q1:QName" xmlns:q1="http://tempuri.org/SampleNamespace">
<Text>string</Text>
</Errors>
</ReadResponse>
</soap12:Body>
</soap12:Envelope>


Mal ein bisschen übersichtlicher dargestellt mit var_dump((client->_getFunctions()) bzw. getTypes:
Funktionen:
[0]=>
string(50) "GetStatusResponse GetStatus(GetStatus $parameters)"
[1]=>
string(35) "ReadResponse Read(Read $parameters)"
[2]=>
string(38) "WriteResponse Write(Write $parameters)"
(..... noch ein paar mehr....)


Typen:
(..... noch ein paar mehr....)
[6]=>
string(71) "struct Read {
RequestOptions Options;
ReadRequestItemList ItemList;
}"
[7]=>
string(231) "struct RequestOptions {
dateTime RequestDeadline;
boolean ReturnErrorText;
boolean ReturnDiagnosticInfo;
boolean ReturnItemTime;
boolean ReturnItemPath;
boolean ReturnItemName;
string ClientRequestHandle;
string LocaleID;
}"
[8]=>
string(101) "struct ReadRequestItemList {
ReadRequestItem Items;
string ItemPath;
QName ReqType;
int MaxAge;
}"
[9]=>
string(117) "struct ReadRequestItem {
string ItemPath;
QName ReqType;
string ItemName;
string ClientItemHandle;
int MaxAge;
}"
[10]=>
string(90) "struct ReadResponse {
ReplyBase ReadResult;
ReplyItemList RItemList;
OPCError Errors;
}"
[11]=>
string(60) "struct ReplyItemList {
ItemValue Items;
string Reserved;
}"
[12]=>
string(208) "struct ItemValue {
string DiagnosticInfo;
anyType Value;
OPCQuality Quality;
string ItemPath;
string ItemName;
string ClientItemHandle;
dateTime Timestamp;
QName ResultID;
QName ValueTypeQualifier;
}"
(..... noch ein paar mehr....)

Daraus wird erkennbar das die read Funktionen alles in arrayform (struct) serviert haben möchte.

Fällt euch was auf was ich falsch mache? (Vielleicht falscher Aufbau der arrays?) Werdet ihr aus den Fehlermeldungen schlauer oder könnt ihr mir anders weiterhelfen?
Vielen Dank im Voraus!
  #3  
Alt 13.03.2013, 13:44:24
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 12
Beiträge: 2.269
AW: HILFE! Fatal error: Server was unable to process request. ---> Value cannot be nu

PHP-Code:
$werte["Itemlist"// falsch
$werte["ItemList"// besser 



PHP-Code:
$client = new SoapClient($wsdl);
$result $client->Read($werte); 


Zitat:
(..... noch ein paar mehr....)
Die Struktur Items hast du leider verschluckt.
  #4  
Alt 13.03.2013, 14:03:43
Datta90 Datta90 ist offline
Anfänger
 
Registriert seit: Mar 2013
Alter: 30
Beiträge: 11
AW: HILFE! Fatal error: Server was unable to process request. ---> Value cannot be nu

Hallo DokuLeseHemmung,
bei deinem post:
PHP-Code:
$werte["Itemlist"// falsch
$werte["ItemList"// besser 
sehe ich leider keinen unterschied =0

die read Funktion so aufzurufen (also nicht mit soapCall) dürfte keinen Unterschied bringen befürchte ich.

Und die Struktur Items habe ich eigentlich nicht verschluckt. Diese stehen unter dem Teil
Zitat:
Mal ein bisschen übersichtlicher dargestellt mit var_dump((client->_getFunctions()) bzw. getTypes:
Beispielsweise
Code:
string(208) "struct ItemValue {
string DiagnosticInfo;
anyType Value;
OPCQuality Quality;
string ItemPath;
string ItemName;
string ClientItemHandle;
dateTime Timestamp;
QName ResultID;
QName ValueTypeQualifier;
}"
Trotzdem vielen Dank
  #5  
Alt 13.03.2013, 14:05:19
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 12
Beiträge: 2.269
AW: HILFE! Fatal error: Server was unable to process request. ---> Value cannot be nu

Crossposting!

Mannoo....
Keinen Anstand im Leib?
  #6  
Alt 13.03.2013, 14:13:53
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 12
Beiträge: 2.269
AW: HILFE! Fatal error: Server was unable to process request. ---> Value cannot be nu

OK, das mit den Items ist jetzt erkannt.

Zitat:
sehe ich leider keinen unterschied =0
Augen auf!
((-: das lohnt sich :-))


Zitat:
die read Funktion so aufzurufen (also nicht mit soapCall) dürfte keinen Unterschied bringen befürchte ich.
Natürlich nicht!
Ist aber schöner.
  #7  
Alt 13.03.2013, 14:15:48
Datta90 Datta90 ist offline
Anfänger
 
Registriert seit: Mar 2013
Alter: 30
Beiträge: 11
AW: HILFE! Fatal error: Server was unable to process request. ---> Value cannot be nu

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
Crossposting!

Mannoo....
Keinen Anstand im Leib?
Wie? Was? Hab ich was falsch gemacht?
  #8  
Alt 13.03.2013, 14:25:49
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 12
Beiträge: 2.269
AW: HILFE! Fatal error: Server was unable to process request. ---> Value cannot be nu

Einmal muss es ja gesagt werden:
Du belästigst mehrere Foren mit der gleichen Frage!
Das fasse ich als Missachtung/Beleidigung auf. Mag sein, dass du das nicht so gemeint hast. Aber so kommt es an.
  #9  
Alt 13.03.2013, 14:31:50
Datta90 Datta90 ist offline
Anfänger
 
Registriert seit: Mar 2013
Alter: 30
Beiträge: 11
AW: HILFE! Fatal error: Server was unable to process request. ---> Value cannot be nu

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
Einmal muss es ja gesagt werden:
Du belästigst mehrere Foren mit der gleichen Frage!
Das fasse ich als Missachtung/Beleidigung auf. Mag sein, dass du das nicht so gemeint hast. Aber so kommt es an.
Oh das war wirklich nicht so gemeint, wusste garnicht das das nicht gewünscht ist (und auch nicht das das nachvollziehbar ist) wenn ich auf einer völlig anderen Seite die gleiche Frage stelle.
Tut mir Leid!

Weiter im Text: Nachdem ich mir die Brille geputzt habe und nun ItemList schreibe, ändert sich auch sofort die Fehlermeldung zu einer anderen ^^

Fatal error: Uncaught SoapFault exception: [soap:Client] Server was unable to read request. ---> There is an error in XML document (2, 177). ---> The string '' is not a valid AllXsd value. in B:\xampp\htdocs\meine\testb.php:72 Stack trace: #0 B:\xampp\htdocs\meine\testb.php(72): SoapClient->__call('read', Array) #1 B:\xampp\htdocs\meine\testb.php(72): SoapClient->read(Array) #2 {main} thrown in B:\xampp\htdocs\meine\testb.php on line 72

Vielleicht kann mir jemand sagen was nun diese wieder zu bedeuten hat?!
Hier nochmal mein Code:
PHP-Code:
<?php
error_reporting
(-1);
ini_set('display_errors'TRUE);

$wsdl       'http://192.168.38.1/OPC.Simatic.NET/SOPCWeb.asmx?WSDL';

$werte=array();
$werte["Options"]=array(
         
"RequestDeadline"=>"",
         
"ReturnErrorText"=>"",
         
"ReturnDiagnosticInfo"=>True,
         
"ReturnItemTime"=>"",
         
"ReturnItemPath"=>True,
         
"ReturnItemName"=>"",
         
"ClientRequestHandle"=>"",
         
"LocaleID"=>""
);
$werte["ItemList"]=array(
         
"Items"=>array("ItemPath"=>"",
                        
"ReqType"=>"",
                        
"ItemName"=>"S7:[OPC_1]MX1.0",
                        
"ClientItemHandle"=>"",
                        
"MaxAge"=>""
                        
),
         
"ItemPath"=>"",
         
"ReqType"=>"",
         
"MaxAge"=>""
 
);

$client = new SoapClient($wsdl);
$result $client->read($werte);


echo 
$result->RItemList->Items->Quality;
?>
Danke Danke!
  #10  
Alt 13.03.2013, 14:37:22
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 12
Beiträge: 2.269
AW: HILFE! Fatal error: Server was unable to process request. ---> Value cannot be nu

Einer deiner Parameter ist ein leerer String.
Und das ist an der Stelle falsch.
Thema geschlossen

Stichworte
array übergeben, opc, server, simatic, soap, wsdl, xml, xml php


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
extrem langsame Abfrage.. Daktari MySQL/MySQLi 14 30.01.2015 16:14:49
COUNT mit JOINs und sub-queries kriechend langsam droehn MySQL/MySQLi 26 07.11.2010 14:25:36
XML aus MySQL auslesen atomicbunny MySQL/MySQLi 44 13.04.2010 14:54:03
Datenimport mit ODBC odie MySQL/MySQLi 4 27.11.2006 15:28:18
Datum nur einmal auslesen Soeren PHP Grundlagen 9 02.08.2005 12:50:06


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:03:02 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.


© 2001-2021 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt