Factory Cast version 3.1 Webbaserad HMI Web services 2006-07-03
INNEHÅLLSFÖRTECKNING 1 BAKGRUND...3 2 FACTORY CAST 3.1 OCH WEB SERVICES...3 2.1 EXEMPEL PÅ ANVÄNDNINGSOMRÅDE...4 3 PROGRAMEXEMPEL MED C# OCH WEBBTJÄNSTEN SYMBOLICXMLDA...5 3.1 UNITY PRO PROJEKTET...5 3.2 FACTORY CAST CONFIGURATOR...6 3.3 C# PROJEKTET, EN ENKEL KLIENT...8 3.3.1 Ange en webbreferens...9 3.3.2 C# projektets kod...10 Huvudkontor Centrallager Säljkontor Säljkontor Säljkontor Schneider Electric AB Schneider Electric AB Schneider Electric AB Schneider Electric AB Schneider Electric AB Djupdalsv 17-19 Brogetorp Skönsbergsv. 3 Datavägen 21 B Jägersrovägen 160 191 29 SOLLENTUNA 642 83 FLEN 856 41 SUNDSVALL 400 92 GÖTEBORG 212 37 MALMÖ Tel: 08-623 84 00 Tel: 0157-652 00 Tel: 060-57 27 00 Tel: 031-748 35 00 Tel: 040-22 75 40 Fax: 08-623 84 85 Fax: 0157-652 50 Fax: 060-57 27 03 Fax: 031-68 35 40 Fax: 040-94 31 70
1 BAKGRUND Internet och www har gått från statiska webbdokument (html) till dynamiska dokument som ASP, Java Applet o.s.v. Det tredje steget är nu "Web Services". Man kan se en XML webbtjänst som en maskin eller en komponent som erbjuder klienter någon typ av praktisk funktion och dessutom med global räckvidd. Till skillnad från andra objektmodellspecifika protokoll som DCOM, RMI o.s.v. används det välkända standardiserade protokollet HTTP och ett dataformat baserat på XML. SOAP SOAP (Simple Object Access Protocol) är det protokoll som klienter använder för att utföra förfrågningar hos en XML Web tjänst. SOAP är ett protokoll som kompletterar HTTP protokollet. Här definieras en XML grammatik för att specificera namn på de metoder, returvärden och parametrar som en klient vill köra på en webbtjänst. Om en klient vill göra en förfrågan hos en webbtjänst måste den ange metod och parametrar med just denna XML grammatik. Specifikationen av SOAP definierar många saker, några av de vikigaste är: Formatet Hur data ska kodas Hur meddelandet ska skickas Hur svar ska tas emot WSDL Huvuddelen av ett SOAP meddelande är XML och webbservern (FactoryCast modulen) förväntar sig att klienten ska använda en viss uppsättning XML taggar för att koda parametrar till metoderna. Klienten behöver inte ha tillgång till XML schemat då en webbtjänst förväntas vara självbeskrivande. Allt klienten behöver göra är att skicka frågesträngen "wsdl", svaret från webbservern kallas för Web Service Description och det schema som används kallas Web Service Description Language. Beskrivningen innehåller tillräckligt med information för att en klient ska klara att konstruera ett SOAP meddelande i ett format som webbtjänsten kan hantera. 2 FACTORY CAST 3.1 OCH WEB SERVICES Factory Cast definierar två webbtjänster: ModbusXMLDA Dataaccess till Modbus variabler (Modbus-adressering) SymbolicXMLDA Dataaccess till variabelnamn (addressallokerade) Schneider Electric AB 3 (12)
2.1 Exempel på användningsområde Ekonomisystem som t.ex. SAP kan hantera webbtjänster. Produktionshanteringssystem, Ekonomisystem Pocket PC Produktionsutrustning Lager Produktionsutrustning Exempel där flera klienter kan tänkas vilja använda webbtjänsten. En klientapplikation vill kunna justera värden under maskincykeln, en databas vill logga kördata, en Pocket PC används av underhållspersonal och nästa maskin i produktionskedjan vill ha data för att kunna justera receptdata. Klientapplikation Databasloggning Recepthantering Pocket PC Produktionsmaskin Produktionsmaskin Schneider Electric AB 4 (12)
3 PROGRAMEXEMPEL MED C# OCH WEBBTJÄNSTEN SYMBOLICXMLDA 3.1 Unity Pro projektet Exportera Unity Pro projektets variabellista i XVM format. I dialogen välj namn och format XVM. Schneider Electric AB 5 (12)
3.2 Factory Cast Configurator Starta en ny 'Configuration" FactoryCast modulens IP adress Sökvägen till den exporterade variabelfilen (MyTags.XVM) Klicka 'OK' och i nästa dialog 'Add'. Schneider Electric AB 6 (12)
Klicka 'Apply' och Ok Kryssa de variabler som ska vara möjliga att skriva till med hjälp av knappen 'Attributes'. För över taglistan med menyval 'Transfer Namespace' Schneider Electric AB 7 (12)
3.3 C# projektet, En enkel klient Starta upp ett vanligt C# Windowsapplication projekt. Projektnamnet i exemplet är 'fctb'. I startformuläret definieras följande kontroller Klick händelsen ska hämta tag namn och lista tagnamnen i Listboxen 'Tagnamn' Listboxens dubbelklick händelse tar valt tagnamn och hämtar tagnamnets aktuella värde Valt tagnamn kan skrivas, det värde som ska skrivas anges i textboxen. Skrivning sker då knappen 'Skriv' klickas Schneider Electric AB 8 (12)
3.3.1 Ange en webbreferens Via menyn 'Project Web reference' öppnas dialogen 'Add Web Reference' 1 2 5 3 4 6 1. Ange adressen till FactoryCast modulen och klicka 'Go' 2. I modulens startsida klicka 'Documentation' 3. Klicka 'Web Services' 4. Välj vilken av de två Web services som modulen erbjuder. I detta exempel väljs 'SymbolicXMLDA' 5. Ange ett namn på just denna webbreferens 6. Klicka 'Add Reference' I 'Solution Explorer' ska nu referensen synas, här fick referensen namnet webrefsymblist Schneider Electric AB 9 (12)
Om Visual Studio.Net Object Browser öppnas kan man se alla klasser och dess metoder som Visual Studio.Net autogenererar då webbreferensen upprättas Vidare i exemplet kommer några av de metoder som finns definierade i klassen 'SymbolXmlDa' att användas 3.3.2 C# projektets kod 3.3.2.1 Hämta taglistan Ett objekt av typen webrefsymblist.symbolicxmlda definieras globalt för klassen 'Form1'. Objektet ger sedan tillgång till de metoder som behövs för att klara formulärets uppgift. Ett objekt av typen webrefsymblist.descriptions deklareras public partial class Form1 : Form webrefsymblist.symbolicxmlda symbs = new fctb.webrefsymblist.symbolicxmlda(); webrefsymblist.descriptions[] descs; string msg = "Ett fel inträffade"; Under 'Lista' knappens klickhändelse hämtas tagnamnen och läggs in i Listboxen private void cmdlist_click(object sender, EventArgs e) // Radera alla ev. tidigare inmatningar i listboxen lsttags.items.clear(); try // Metoden Browse returnerar en array av 'Descriptions' Schneider Electric AB 10 (12)
descs = symbs.browse(); // Loopa samlingen och lägg in varje Description // objekts egenskap 'Name' i listboxen foreach (webrefsymblist.descriptions desc in descs) lsttags.items.add(desc.name); catch (System.Web.Services.Protocols.SoapHeaderException exsoaph) MessageBox.Show(exSoapH.Message, msg); catch (System.Web.Services.Protocols.SoapException exsoap) MessageBox.Show(exSoap.Message, msg); catch (System.Net.WebException exweb) MessageBox.Show(exWeb.Message, msg); catch (SystemException ex)messagebox.show(ex.message, msg); 3.3.2.2 Listboxens dubbelklick händelse Här ska det namnet som dubbelklickades i listboxen användas som argument till 'Read' metoden. Metoden Read returnerar en array av Item objekt. I exemplet returneras ett Item objekt vars egenskap 'IntValue' innehåller värdet och som läggs i labelkontrollen private void lsttags_doubleclick(object sender, EventArgs e) // Sträng som ska innehålla tagnamnet string[] sname = new string[1]; // En arry av items, metoden 'Read' // returnerar en Item array webrefsymblist.items[] itms; // Koll något är valt i listan if (lsttags.selecteditem!= null) // Ta valt tagnamn sname[0] = lsttags.selecteditem.tostring(); // Anropa Read metoden try itms = symbs.read(sname); // Loopa igenom Item arrayen // (ett index då ett namn skickades med Readmetoden) // Lägg över Item egenskapen 'IntValue' i stringform // till label kontrollen foreach (webrefsymblist.items itm in itms) lblval.text = itm.intvalue.tostring(); catch (System.Web.Services.Protocols.SoapHeaderException exsoaph) MessageBox.Show(exSoapH.Message, msg); catch (System.Web.Services.Protocols.SoapException exsoap) MessageBox.Show(exSoap.Message, msg); catch (System.Net.WebException exweb) MessageBox.Show(exWeb.Message, msg); catch (SystemException ex) MessageBox.Show(ex.Message, msg); Schneider Electric AB 11 (12)
3.3.2.3 Skriva ett värde Under knappen 'Skriv' kan ett värde skickas till den variabel som är markerad i listboxen private void cmdok_click(object sender, EventArgs e) // Ta det värde som ska skrivas int ival = 0; // Skapa en Itemarray med ett index då Write metoden // kräver ett Itemarray arg webrefsymblist.items[] itms = new fctb.webrefsymblist.items[1]; ; // Skapa Item itms[0] = new fctb.webrefsymblist.items(); // Koll att det finns något valt i listboxen if (lsttags.selecteditem!= null) try // Konvertera det i textboxen önskade värdet som ska skrivas ival = Int32.Parse(txtNewVal.Text); // Sätt Item egenskaper itms[0].intvalue = ival; // Värdet itms[0].name = lsttags.selecteditem.tostring(); // Tagnamn itms[0].symboltype = "4"; // Typ // Anropa write metoden symbs.write(itms); catch (System.Web.Services.Protocols.SoapHeaderException exsoaph) MessageBox.Show(exSoapH.Message, msg); catch (System.Web.Services.Protocols.SoapException exsoap) MessageBox.Show(exSoap.Message, msg); catch (System.Net.WebException exweb) MessageBox.Show(exWeb.Message, msg); catch (System.InvalidCastException exc) MessageBox.Show(exC.Message, msg); catch (SystemException ex) MessageBox.Show(ex.Message, msg); Schneider Electric AB 12 (12)