วันจันทร์ที่ 19 มิถุนายน พ.ศ. 2560

Intro to SCADA using Vijeo Citect



SCADA – Supervise Control and Data Acquisition
โหลดโปรแกรม SoMachine Basic 1.5 จาก
1.      เรียกโปรแกรม SoMachine Basic 1.5


2.       ตรวจสอบการเชื่อมต่อระหว่าง PC กับ PLC

กรณีที่ 1 : ใช้ สาย USB Cable


กรที่ 2 : ใช้ สาย LAN
·      Refresh Device > ตรวจสอบค่า IP
·      Change IP Address > เพื่อกำหนด IP ให้กับ PLC
·      Start Flashing LEDs > เพื่อทดสอบว่า IP ที่คลิกอยู่นี้คือตัวไหน เมื่อกด LED บน PLC จะกระพริบ
3.       Create a new project

4.       เมื่อเข้ามาใน Project จะมี 5 Page หลัก
    ·      Properties à รายละเอียดผู้พัฒนา Project
·      Configuration à กำหนดเกี่ยวกับ PLC ที่ใช้
·      Programming à การเขียนโปรแกรม
·      Display à การจำลองการทำงาน
·      Commissioning à การอัพโหลดโปรแกรมไปยัง PLC
5.       ในหน้า Configuration ให้เราลาก TM221CE16R มาใส่

6.       ให้เราไปหน้า Programming เพื่อใช้

·      ลาก Contact(F4) เข้ามาใส่ แล้วตั้ง Address เป็น %I0.0
·      ลาก Coil(Crlt+F9) เข้ามาใส่ แล้วตั้ง Address เป็น %Q0.0
7.       ไปที่หน้า Commission กดปุ่ม Login กับ IP ของตัวที่ต้องการอัพข้อมูลใส่
·      เมื่อ Login แล้ว ตัว PLC จะมีข้อความแจ้งเราว่า โปรแกรมของเรากับใน PLC เป็นตัวเดียวกันหรือไม่ ตอนนี้เราเลือกได้ 2 อย่างคือ
1.       PC to Controller(download) > อัพโปรแกรมจาก PC ของเราลงไปใน PLC
2.       Controller to PC(upload) > โหลดโปรแกรมจาก PLC เข้าสู่ PC ของเรา
·      เมื่อเราอัพโหลดจาก PC ลง PLC เสร็จแล้ว จะมีข้อความแจ้งว่า โปรแกรมเป็นตัวเดียวกันแล้ว ถ้าเราต้องการให้ PLC เริ่มทำงานตามโปรแกรมของเราก็กด Start Controller ได้เลย
·      ทีนี้ เมื่อเรามีการแก้ไขโปรแกรมของเราเช่น เปลี่ยน Address ของ Coil จะขึ้นสีส้มเพื่อเตือนว่ามีการแก้ไขโปรแกรมภายใน Rung นั้น ๆ
·      หากเราย้ายไปหน้า Commission ทั้งที่ Rung ยังเป็นสีส้มอยู่ จะขึ้นหน้าต่างแจ้งเตือนเราว่า โปรแกรมมีการปรับปรุงต้องการอัพโหลดไปยัง PLC หรือไม่
·      ปุ่ม Stop Controller > หยุดการทำงานของ PLC ตัวนั้น
         ·      ปุ่ม Logout > จะทำการบันทึกและตัดการเชื่อมต่อกับ PLC ตัวนั้น


คำถาม
แล้วถ้าหากว่าเราต้องการที่จะมี Input 4 ตัว เพื่อไปออก Output 4 ตัว จะต้องทำยังไง โดยที่
·      Input ที่ I0.0    Output ออกที่ Q0.0
·      Input ที่ I0.1    Output ออกที่ Q0.1
·      Input ที่ I0.2    Output ออกที่ Q0.2
·      Input ที่ I0.3    Output ออกที่ Q0.3
(แต่ละ Rung จะไม่สามารถมีสมการได้มากกว่า 1 สมการ ** Hint Add/Insert New Rung) 
วิธีทำ
1.      ขั้นแรกเราจะต้อง Add Rung ขึ้นมาก่อน เพราะ เรามีสมการมากกว่า 1 ทำให้ Rung เดียวไม่สามารถทำได้
2.      เมื่อเราเพิ่ม Rung ขึ้นมาเป็น 4 อันเพื่อรองรับการทำงานแล้ว ให้เราทำสมการในทุกๆ Rung ให้สมบูรณ์ คือให้ Input ไปออก Output ที่ต้องการจนครบ ตามรูปตัวอย่าง

        หากต้องการทำคำถามข้างต้นไปใส่ SCADA
                  เราต้องมีโปรแกรม Vijeo Citect 2015 ซะก่อน โดยสามารถไปโหลดได้จาก
        ***จะแปลงจาก %I0.0 > %M0 , %I0.1 > %M1 , %I0.2 > %M2 , %I0.3 > %M3
                            %Q0.0 > %M100 , %Q0.1 > %M101 , %Q0.2 > %M102 , %Q0.3 > %M103
        เพราะในการทำงานใน SCADA ไม่สามารถนำ Input Output มาโชว์บนโปรแกรมได้
        1.       ลงโปรแกรมให้เรียบร้อย แล้วเปิดโปรแกรมขึ้นมา
        2.       จะหน้าต่างเด้งขึ้นมา 3 หน้า คือ Citect Project Editor, Citect Graphic Builder, Citect Explorer
        3.       เราจะไป New Project ที่หน้า Citect Explorer
        4.       หลังจากสร้างโปรเจ็คขึ้นมาแล้วให้ไปที่โปรแกรม Citect Project Editor เพื่อเชื่อมต่อโปรเจ็คเรากับ PLC โดยเลือก Comunication > Express Wizard
        5.       กด Next ไปเรื่อยๆ จนกระทั่งถึงหน้าที่ให้เราเลือกโมเดล ให้เราเลือก Modbus/TCP(Ethernet) IP Address คือ
        6.       หน้าข้อมูลการเชื่อมต่อ IP Address ในช่องนี้คือ IP Address ของ PLC ที่เราจะเชื่อมต่อ ส่วน Port ให้เช็ตเป็น 502
        7.       เมื่อเสร็จสิ้นจากการเชื่อมต่อกับ PLC แล้ว ให้เราไปตั้งชื่อตัวแปรที่ใช้กับ PLC ทุกตัวที่เราใช้ กรณีนี้ต้องตั้งให้ M0,M1,M2,M3,M100,M101,M102,M103
        ·      Tag Name > ชื่อที่จะใช้เรียกค่า Address ตัวนั้น ๆ
        ·      Address > ตำแหน่งที่อยู่ของข้อมูล
        ·      I/O Device > อุปกรณ์
        ·      Data Type > ชนิดของข้อมูลตัวที่กำลังจะตั้ง

        8.       โปรแกรม Citect Graphic Builder จะสร้าง Page ใหม่
        9.       เลือก Template : Normal , Style : swx_style_1 แล้วกด OK

        10.       สร้างปุ่มกดขึ้นมาตามจำนวน Input ของเรา ( 4 ปุ่ม )

        11.       เมื่อสร้างครบ ให้คลิกเข้าไปในปุ่มเพื่อแก้ไข Input ตามตัวอย่างคือแก้ไขปุ่ม M0 โดยสั่งให้เมื่อมีการกดปุ่มให้กลับค่าที่อยู่ใน M0

        ·      Action > เกิดขึ้นเมื่อทำอะไรกับปุ่ม
        ·      Command > คำสั่งที่ให้ทำ หลังจากเกิด Action นั้น ๆ

         12.       เมื่อทำปุ่มเสร็จแล้ว ให้เราสร้างหลอดไฟ เพื่อแสดง Output โดยจะสร้างทั้งสิ้น 4 หลอด

        13.       เมื่อสร้างครบ ให้คลิกเข้าไปในหลอดไฟเพื่อแก้ไขว่าหลอดไฟยังสว่างเมื่อไหร่ (ON symbol when) เราก็จะใส่ไล่ไปจนครบคือ M100,M101,M102,M103

         14.       เมื่อแก้ไขเสร็จหมดแล้ว ให้ Compile(Alt+F10) เพื่อเช็คว่ามีตรงไหนผิดหรือไม่ เมื่อ Compile เสร็จ ก็สั่ง Run ไปเลย
        ***การ Compile ครั้งแรก เราจะต้องตั้งชื่อ Page ให้มันด้วย ครั้งต่อไปจะ Compile ทันที
        15.       เมื่อโปรแกรม Startup ถูกเปิด (เป็นแบบ Demo สามารถใช้งานได้ 15 นาทีก่อนที่จะปิดตัวเองลงไป) เราจะเปิดไปยัง Page ของเรา โดยคลิกที่ Page List จะมีชื่อ Page ขึ้นมา เราก็เลือกชื่อ Page ที่เราตั้งเอาไว้
        16.       เมื่อกดที่ปุ่ม
        ·       M0 Input       Output ออกที่ดวงที่ตั้งเป็น M100
        ·       M1 Input       Output ออกที่ดวงที่ตั้งเป็น M101
        ·       M2 Input       Output ออกที่ดวงที่ตั้งเป็น M102
        ·       M3 Input       Output ออกที่ดวงที่ตั้งเป็น M103

        17.       เป็นอันเสร็จสิ้น




วันพฤหัสบดีที่ 25 พฤษภาคม พ.ศ. 2560

ส่งค่าข้อมูลจาก ESP8266(HDC1080) ไปยัง Google Sheets ผ่าน PushingBox API

ส่งค่าจาก ESP8266(HDC1080) ไป Google Sheets ผ่าน PushingBox API

ในบล๊อกนี้เราจะพาไปสู่การเขียนโปรแกรมและการเตรียม Google Sheet เพื่อรับค่าที่จะถูกส่งมาจาก ESP8266

  • อย่างแรกเลยคือให้เราล๊อกอิน Gmail ของเรา แล้วเข้าไปจัดการเอกสารของเรา

  • เมื่อเข้ามาตอนแรกจะอยู่ที่เอกสารให้เราเลือกไปจัดการที่ "ซีต"


  • เมื่อเข้ามาในซีตก็ให้เราสร้างไฟล์ใหม่ แล้วเก็บ URL ที่อยู่ระหว่าง /d/ กับ /edit เสร็จแล้วให้เราไปที่ "เครื่องมือ > โปรแกรมจัดการสคริป"

  • Copy โค้ดส่วนนี้แล้วนำไปวาง แล้วแก้ไข ในส่วนของ var id = '  ';  โดย id มาจากส่วนของ URL ตามภาพข้างบนมาใส่



  • เมื่อแก้ไขเรียบร้อยแล้วให้เราบันทึกโค้ดส่วนนี้ : File > Save All
  • แล้วให้เราเผยแพร่เป็นเว็บแอป โดยไปที่ เผยแพร่ > ใช้งานเป็นแอปพลิเคชั่นเว็บ...


  • จะมีหน้าต่างขึ้นมาเด้งขึ้นมา ให้เราเก็บ URL ของเว็บแอปพลิเคชั่นนี้เอาไว้
    • ในส่วนของการเรียกใช้แอปพลิเคชั่น ให้เปลี่ยนเป็น ฉัน(YOU_EMAIL)
    • ในส่วนของใครสามารถเข้าถึงแอปพลิเคชั่น ให้เปลี่ยนเป็น ทุกคน รวมถึงผู้ใช้ไม่ระบุชื่อ


          เสร็จสิ้นกันไปกับการเตรียมการในส่วนของ Google Sheet ต่อไปเราจะไปเตรียมการที่ PushingBox.com เข้าไปก็ให้เราทำการสมัคร PushingBox account ด้วย Gmail ของเราไปเลย
  • ขั้นตอนแรกใน PushingBox ของเรา ให้เราไปที่ My Service แล้วให้เราเลิอก Add a service > CustomURL  


  • จะเด้งหน้าต่างนี้ขึ้นมา เราก็ทำการตั้งชื่อไปเลย ส่วน Root URL นั้น มาจาก URL ที่ไว้ติดต่อกับ
    เว็บแอปพลิเคชั่น ที่ได้ให้เก็บเอาไว้ในก่อนหน้านี้


  • หลังจากนั้นให้ไปที่หน้า My Scenario แล้วทำการตั้ง Scenario ตรงกล่อง Create a scenario or add a device แล้วจะได้หน้าตามตัวอย่างข้างล่างออกมา
  • แล้วกดปุ่ม Add an Action แล้วเลือก Service ที่จะเชื่อมต่อ แล้วให้ใส่
    ?humidityData=$humidityData$&tempData=$tempData$ ลงไปในกล่อง Data


ก็เสร็จสิ้นกันไปกับการเตรียมการใน PushingBox API แล้วถ้าหากว่า เราต้องการทดสอบว่า ที่เราเตรียมมาทั้งหมดนั้น ใช้งานได้หรือไม่ ให้เราพิมพ์
http://api.pushingbox.com/pushingbox?devid=(YOUR-DEV_ID)&humidityData=56&tempData=28
ไปในช่อง URL ข้อมูลก็จะไปเด้งใน Google Sheet แล้ว


       หลังจากเสร็จสิ้นทุกส่วนแล้ว ต่อไปเราจะจัดการนำโค้ดส่วนนี้ไปใส่เอาไว้ใน ESP8266 เพื่อติดต่อ PushingBox ให้ส่งข้อมูลไปยัง Google Sheet เปลี่ยน devid ตาม Devid ใน My Scenario



อ่านค่าอุณภูมิความชื้น(HDC1080) ส่งไป Thing Speak


          Thinkspeak คืออะไร

          Thingspeak เป็นเว็ปที่ให้การบริการ PaaS สำหรับ Internet of Thing มีบริการ Open API เชื่อมต่อกับอุปกรณ์ผ่าน REST API, บริการในการเก็บข้อมูล และสามารถแสดงข้อมูลแบบ real-time, แสดงข้อมูล geolocation, ประมวลผลข้อมูล, แสดงข้อมูลกราฟ, สถานะของอุปกรณ์ และ plugins เสริมสำหรับเชื่อมต่อกับบริการอื่นๆ เช่น Google Chart ได้ 
           ซึ่งเราสามารถ update ข้อมูล หรือจะเรียกดูข้อมูลได้ตลอดเวลา ที่ไหนก็ได้ เพราะทำงานบน cloud ซึ่ง thingspeak สร้างมาเพื่อต้องการให้ตอบโจทย์ของ IoT อยู่แล้ว ส่วนข้อมูลที่เก็บอยู่บน cloud นั้นก็ขึ้นอยู่กับเราว่าจะใช้ยังไง รูปแบบไหน ในการจะส่งข้อมูล data ไปไว้บน cloud ทาง thingspeak มี api ในการติดต่อไว้เรียบร้อยแล้ว 
https://thingspeak.com/

เปิดใช้งาน Thingspeak

    • อันดับแรกคือจะต้องสมัครสมาชิกใก้เรียบร้อยก่อน
    • จากนั้นก็สร้าง channel ขึ้นมา โดยกดไปที่ My Channels แล้วกด New Channel
    • หลังจากที่ New Channel ขึ้นมาแล้ว ก็ป้อนข้อมูลเข้าไป
    • อย่าลืมติก Make Public
    • เสร็จแล้วกด Save Channel
    • เมื่อสร้างเสร็จแล้ว จะแสดงหน้าต่างที่มีการแสดงข้อมูลเป็นแบบกราฟ ซึ่งตอนนี้ไม่มีข้อมูลเพราะยังไม่มีข้อมูลใดๆ ถูกส่งมา


การ Update ข้อมูลไปยัง Cloud ผ่าน API ของ thingspeak

  • เราต้องเข้าไปดู API Keys ของเราก่อน
    • Write API Key          I6MPC6303SSADW9W
    • Read API Key           XIIN62C9O0NOYTQQ

  • ในการ update ข้อมูล จะเป็นการส่ง HTTP Request ไปยัง server เพื่อ update ข้อมูลที่ต้องการตาม field ต่าง ๆ ที่เรากำหนดเอาไว้ วีธีการ update จะส่งข้อมูลแบบนี้
                 https://api.thingspeak.com/update?key=I6MPC6303SSADW9W&field1=0
  • มาดูผลลัพธ์ได้ที่แถบ Private View


โค้ดสั่ง Arduino ส่งค่าขึ้นไป Thinkspeak

นำโค้ดข้างล่างนี้ไปแก้ไข SSID , PASSWORD , CHANNEL_NUMBER , API_KEY แล้วโหลดลงไปในบอร์ดก็จะสามารถส่งค่าข้อมูลขึ้น Thingspeakได้เรียบร้อย

อ้างอิง

วีดีโอต้นฉบับ : https://www.youtube.com/watch?v=_ZF71GhXCjc&feature=youtu.be