Home ICONICS (SCADA)
ทิปการใช้ GENESIS32 : การนับค่าสัญญาณเก็บไว้ใน Database PDF Print E-mail
Wednesday, 21 September 2011 17:39

ถ้าต้องการเก็บผลรวมของสัญญาณตัวเดียวเดี่ยว ๆ ไว้ในฐานข้อมูล เช่น ผลรวมแบบ Totalizer เป็นต้น เพื่อให้สามารถดึงสัญญาณมาแสดงแบบรายงานใน Excel หรือแอพลิเคชั่นต่าง ๆ ในภายหลังได้ วันนี้มีทิปเพื่อสร้าง Totalizer โดยตรงบน MS SQL มาฝากครับ

เมื่อเรารับสัญญาณเข้ามาเช่นจาก PLC และต้องการเอาค่ามารวมกับค่าก่อนหน้านี้ที่อ่านได้เช่น

10:00:00 AM  อ่านได้ 5   ได้ผลรวม Totalizer = 5
10:00:01 AM  อ่านได้ 30  ได้ผลรวม Totalizer = 35

ถ้ามีความต้องการแบบนี้เราสามารถทำได้บน TrendWorX32 Configurator อยู่แล้ว โดยสามารถเก็บค่าไว้ในฐานข้อมูลเช่น MS SQL, MySQL, MS Access เป็นต้น เพื่อนำมาแสดงย้อนหลังหรือนำไปทำรายงานด้วย Trend Report โดยมีการกำหนดให้เก็บแบบ Totalizer ดังรูปที่ 1

image

รูปที่ 1

แต่ถ้าหากเราต้องการเก็บในรูปแบบตารางง่าย ๆ แถวเดียว ในฐานข้อูมูล ไม่ใช่ข้อมูลหลายแถวที่มีการแสดงเวลาของข้อมูลในแต่ละแถว แต่มีแถวเดียวและบวกเพิ่มค่าในฟิลด์นั้นไปเรื่อย ๆ (เพื่อเอามาแสดงผลแบบง่าย ๆ ใน แอพต่าง ๆ) ก็มีอีกวิธีหนึ่งดังนี้

1. สร้างตาราง totaliz ในฐานข้อมูลให้มีฟิลด์ที่แสดงค่าปัจจุบันของสัญญาณ PLC (CurrentV) และฟิลด์ที่เก็บค่า Totalizer (TotalV) โดยสร้างฟิลด์ชื่อ ID เพื่อใช้เป็น Key ในการค้นข้อมูล แล้วใส่ข้อมูลเบื้องต้นตามรูป

ID CurrentV TotalV
1 0 0


2. สร้างจุดเชื่อมโยงฐานข้อมูลเพื่อชี้ไปยังฟิลด์ข้อมูลที่เก็บค่าในฐานข้อมูล MS SQL ตามปกติ โดยชี้ไปที่ฟิลด์ CurrentV ที่ใช้แสดงค่าปัจจุบันที่รับค่าจาก PLC

3. สร้าง Register ใน DataWorX โดยกำหนดให้ Input เป็นสัญญาณจาก PLC ตัวที่เราต้องการ
และให้ Output เป็นสัญญาณ DataMining ที่เราสร้างขึ้นในข้อ 1 คือ CurrentV

4. สร้าง Trigger ใน MS SQL ให้มีการบวกค่า CurrentV กับ TotalV แล้วเก็บไว้ใน TotalV ดังนี้

CREATE TRIGGER [dbo].[totalizTrigger]
ON [dbo].[totaliz]
FOR INSERT, UPDATE
AS
IF UPDATE (CurrentV)
UPDATE [totaliz] set [TotalV] = [TotalV] + [CurrentV]

 

จากข้อ 4 เราสร้าง Trigger ชื่อ totalizTrigger ขึ้นมาเพื่อตรวจสอบตารางชื่อ totaliz
เมื่อมีการอัพเดทข้อมูลใหม่เข้ามาให้ CurrentV โดย DataWorX เช่นเปลี่ยนจากจากเดิม 0 ไปเป็น 5
ก็จะมีการบวกค่าเดิมคือ 0 (TotalV) กับค่าใหม่(CurrentV) คือ 5 แล้วเก็บไว้ใน TotalV

เพียงเท่านี้เราก็จะได้ Totalizer เก็บค่าไว้ในตารางข้อมูลให้เราแล้วครับ

image

รูปที่ 2

และถ้าจะเอาค่า TotalV มาแสดงใน GENESIS32 ก็ทำได้ผ่าน DataMining เช่นกันครับ

ดู VDO ขั้นตอนการทำทั้งหมด

 

สิ่งที่น่าสนใจ

Paperless Recorder จาก M-System