หน้าเว็บ

วันจันทร์ที่ 8 กันยายน พ.ศ. 2557

ดึงค่าจากWebServiceมาแสดงในGENESIS64 SCADA

image
GENESIS64สามารถดึงข้อมูลจากWeb Serviceมาแสดงและใช้งานในSCADAได้
โดยเราจะต้องระบุในWorkbenchก่อนว่าจะใช้Web Srviceอะไรที่ไหน โดยหลังจากเปิดWorkBenchขึ้นมาแล้วให้เลือกWeb Servicesซึ่งเป็นโมดูลหนึ่งของGENESIS64 จากนั้นสร้าง New Web Serviceขึ้นมา
image
แล้วกรอกURLของWeb Serviceที่จะใช้งานลงไป จากนั้นคลิ้ก Connect ถ้าติดต่อได้จะพบคำว่าConnectedด้านล่างซ้ายของหน้าต่าง ถ้าWeb Serviceนั้นต้องใช้User Nameและ Passwordก็คลิ้ก Connection Propertiesเพื่อเข้าไปกำหนดได้
image
คลิ้ก OK
คลิ้ก Apply จะพบรายการ Web Methodที่สามารถใช้งานได้
image
ต่อจากนั้นเลือกว่าจะใช้Web Methodอะไรแล้วสร้างInstanceขึ้นมาเพื่อระบุพารามิเตอร์เช่นจากรูปเราจะสร้างInstanceเพื่อค่าZIPให้ได้ค่ารายงานสภาพอากาศกลับมา(ตัวอย่างใช้ได้เฉพาะในUSA)
image
จากรูปเราสามารถกรอกค่า Zip Codeของพื้นที่เข้าไป แล้วเลือกOutput(Property)ว่าต้องการค่าอะไร เช่น Temperature, Wind,…จากWeb Methodนั้น ๆ
image
คลิ้ก Apply

การนำไปใช้งาน

เราสามารถเอาค่าที่ได้จากโมดูลWeb Serviceที่คอนฟิกไว้ไปใช้งานในSCADAเช่นตัวอย่างนี้เอาไปใช้ในหน้าแสดงผลGraphWorX64โดยใช้Process Pointลิงค์กับWeb Service
image

จะเจอสัญญาณจากWeb Service
image
ผลลัพธ์เมื่อรันหน้าแสดงผลGENESIS64
image
ประโยชน์ของWeb Serviceจะทำให้เราดึงข้อมูลผ่านแพลตฟอร์มแบบWebที่มีอยู่แล้วหรือสร้างขึ้นมาใหม่ตามต้องการ ยิ่งกว่านั้นยังมีWeb Serviceทั้งแบบฟรีและทางการค้าให้เลือกใช้งานได้จำนวนมากเป็นการเปิดช่องทางการติดต่อกับแหล่งข้อมูลต่าง ๆ ได้มากขึ้น

บางWeb Serviceไม่สนับสนุนการใช้งานProperty

ถ้าWeb Serviceไม่สนับสนุนPropertyจะทำให้เราไม่สามารถใช้คอนฟิกกูเรชั่นในการแยกใช้Propertyทำให้ไม่มีOutput(Property)ให้เลือกดังรูป
image
และเวลาแสดงข้อมูลในGENESIS64ก็จะแสดงเป็นXML Textทั้งหมดดังรูป
image
แต่เราสามารถใช้ฟังก์ชั่นStringในExpressionเพื่อตัดเอาเฉพาะข้อมูลส่วนที่เราต้องการออกมาใช้งานได้ ซึ่งก่อนอื่นเราต้องดูลักษณะของXML Textที่ได้ก่อนซึ่งสามารถทดสอบในเว็บก่อนได้โดยใช้URLของWeb Serviceนั้นในการทดสอบเช่น http://www.webservicex.net/stockquote.asmx เป็นWeb Serviceในการเช็คราคาของหุ้นในตลาดหลักทรัพย์USA
image
เมื่อกรอกชื่อย่อของหุ้นแล้วคลิ้กInvoke จะได้ข้อมูลXMLกลับมาดังนี้
<string xmlns="http://www.webserviceX.NET/">
<StockQuotes><Stock><Symbol>FB</Symbol><Last>77.89</Last><Date>9/8/2014</Date><Time>4:15pm</Time><Change>+0.63</Change><Open>77.27</Open><High>78.17</High><Low>77.01</Low><Volume>28183156</Volume><MktCap>202.5B</MktCap><PreviousClose>77.26</PreviousClose><PercentageChange>+0.82%</PercentageChange><AnnRange>42.43 - 78.17</AnnRange><Earns>0.941</Earns><P-E>82.10</P-E><Name>Facebook</Name></Stock></StockQuotes>
</string>


จะพบว่ามูลค่าหุ้นล่าสุดจะอยู่ในแท็กLastเช่น <Last>77.89</Last>
ดังนั้นถ้าเราต้องการตัดเอาข้อมูลที่อยู่ระหว่าง<Last>และ</Last> สามารถใช้Expressionดังนี้
substring({{ws:My Web Services.StockQuote.GetQuote<FB>}}, indexof({{ws:My Web Services.StockQuote.GetQuote<FB>}}, "<Last>", 1)+6, indexof({{ws:My Web Services.StockQuote.GetQuote<FB>}}, "</Last>", 1)-indexof({{ws:My Web Services.StockQuote.GetQuote<FB>}}, "<Last>", 1)-6)
ซึ่งจะอยู่ในรูปแบบ
substring(แท็กจากเว็บเซอร์วิส, indexof(แท็กจากเว็บเซอร์วิส, "<Last>", 1)+ขนาดแท็กXML, indexof(แท็กจากเว็บเซอร์วิส, "</Last>", 1)-indexof(แท็กจากเว็บเซอร์วิส, "<Last>", 1)-ขนาดแท็กXML)
ซึ่งขนาดแท็กXMLในที่นี้เท่ากับ6(มาจาก<Last>นับได้6ตัวอักษร)
ผลลัพธ์จะได้ดังนี้
image

ถ้าไม่ต้องการใช้ชื่อแท็กWeb Serviceยาวก็สร้างแท็กWeb Serviceไว้ในGlobal Expressionก่อนแล้วค่อยนำมาใช้ก็ได้ครับ เช่นในตัวอย่างนี้
จากรูปได้สร้างGlobal Expressionไว้โดยใช้Web Service tagที่ต้องการ (สร้างในโมดูลUnified Data Manager ในกิ่ง Expressions)
image
จากนั้นจึงนำGlobal Expression Tagข้างต้นมาใช้ในExpressionอีกทีดังนี้
substring({{@exp64:FB.Value}}, indexof({{@exp64:FB.Value}}, "<Last>", 1)+6, indexof({{@exp64:FB.Value}}, "</Last>", 1)-indexof({{@exp64:FB.Value}}, "<Last>", 1)-6)

ประโยชน์

- ทำให้สามารถดึงข้อมูลมาใช้งานได้โดยไม่ต้องใช้OPC Serverหรือโปรโตคอลพิเศษ
- สามารถออกแบบWeb Serviceหรือใช้Web Serviceที่มีอยู่เดิมเพื่อนำมาใช้ประโยชน์ได้ เช่นงานระบบโทรมาตร งานตรวจสอบและแจ้งเตือนภัยธรรมชาติ งานธุรกิจอุตสาหกรรมในองค์กร ฯลฯ
- ไม่ติดขัดเรื่องความปลอดภัยเช่น Firewall และนโยบายด้านความปลอดภัย
- การตัดข้อมูลจากWeb Serviceเพื่อให้ได้ข้อมูลที่สนใจหลายค่า(จากWeb Serviceตัวเดียวกัน) จะไม่ถูกนับTagซ้ำซ้อน ทำให้ไม่เปลืองTag


ไม่มีความคิดเห็น:

แสดงความคิดเห็น