ก่อนที่จะทำการสร้าง OPC file ของอุปกรณ์ Modbus ต้องรู้อะไรบ้าง

Modbus เป็นโปรโตคอลที่ใช้งานมากที่สุด ไม่จำเพาะใน PLC และ Temperature Controller แต่รวมถึงอุปกรณ์เช่น Power Meter, Drive, Remote I/O, Circuit Breaker, ฯลฯ เมื่อเราต้องการต่อกับ SCADA Software ผ่าน OPC Server เราต้องมีการพิจารณาหลักการบางอย่างเพื่อให้สามารถกำหนดคุณสมบัติของ OPC Server ให้เหมาะกับอุปกรณ์นั้น ๆ ซึ่งในที่นี้จะหมายรวม Modbus ทั้งแบบ Modbus TCP, Modbus RTU และ Modbus ASCII ครับ ลองอ่านบทความนี้แล้วท่านจะไม่สงสัยเลยว่าทำไมใช้ Modbus Register Address ตามคู่มืออุปกรณ์แล้วยังไม่สามารถติดต่ออุปกรณ์ได้

1. Zero หรือ One Based Address

เราต้องดูคู่มือว่าอุปกรณ์ Modbus นั้นใช้ Zero หรือ One based (ทีมงานของผมโดนประจำในเรื่องนี้ครับแม้แต่ตัวผมเองก็ตามเถอะ เช่นในคู่มือบอกว่า 40005 แต่เมื่อนำไปใช้ค่าที่ได้กลับไม่ตรงกับอุปกรณ์ ต้องใช้ 40006 ถึงจะตรงนั่นก็ไม่ต้องสงสัยครับว่าเป็น one based ) ดังนั้นถ้าหากอุปกรณ์มีการเรียง Address แบบ One base เราควรเอาเครื่องหมายถูกออกจาก Use Zero based addressing ของ OPC Server ส่วน Setting (Kepware KEPServerEx) ของ Device ไม่เช่นนั้น Address จะถูกเลื่อนไป 1 ดังนั้นถ้าไม่เซตตรงนี้ก็จำเป็นต้องเลื่อน Address ไปหนึ่งระดับ

clip_image001

รูปที่ 1 ต้องพิจารณาเรื่อง Zero based หรือ One based

* เราสามารถเดาสุ่มได้ว่าเป็น Zero หรือ One base โดยดูจากค่าที่ได้จาก OPC Server โดยไม่ต้องดูคู่มือ ขอเพียงให้ข้อมูลแบบ 16 บิตและเป็นบวกอย่างเดียวของ Adress ต่าง ๆ ถูกต้องตามค่าที่อ่านจากหน้าปัดอุปกรณ์ โดยใช้ Data Type เป็น Word

2. Zero based bit ใช่หรือไม่

ถ้าอุปกรณ์ของเราสามารถอ้างอิงระดับบิตได้เช่น 400001.1 หมายถึงบิตที่ 1 ของ 400001 เราควรจะทราบว่าวิธีการอ้างอิงบิตในคู่มือของอุปกรณ์จะเริ่มจาก 0 หรือ 1 ถ้าเริ่มจาก 0 นั่นหมายถึงเราสามารถอ้างอิงบิตแรกจาก 400001.0 แทนที่จะเป็น 400001.1 ดังนั้นเราต้องระบุว่าอุปกรณ์นี้เป็น Use zero based bit address with register แต่ถ้าเราไม่มีการอ้างอิงระดับบิตอยู่แล้วก็ไม่ต้องสนใจเรื่องนี้และข้ามไปได้เลยครับ

3. First word low in 32 bit data types

ตรงนี้สำคัญมากครับ และสามารถดูได้จากคู่มือ แม้ว่าคู่มือจะไม่ได้บอกว่า First word low ก็ตาม ถ้าเราเลือกผิดข้อมูลที่ได้จะต่างกันลิบกับอุปกรณ์เพราะมันจัดเรียง Word ผิด ซึ่งจะเป็นเฉพาะข้อมูล DWord, Long, Float หรือข้อมูลที่มีขนาด 32 bit หรือ 2 Word

clip_image002

รูปที่ 2 ข้อมูลของ Power Meter ของ M-System

จากรูปที่ 2 จะมีข้อความที่บอกว่า The lower digit word in a 32-bit register is assigned to the lower addres ทำให้เรารู้ว่าเป็น “First word low”

clip_image003

รูปที่ 3 ข้อมูลของ Power Meter ของ Tyco

จากรูปที่ 3 เราจะเห็นว่าตามคู่มือบอกว่า Most significant register first ซึ่งตรงข้ามกับ Least significant register first ซึ่งหมายถึง Word แรกจะเป็น High Word ไม่ใช่  Low Word ดังนั้น เราต้องไม่เอา First Word Low มาใช้ในกรณีนี้ ดังนั้นต้องเอาเครื่องหมายถูกออกจาก First Word Low in 32 bit Data type

clip_image004

รูปที่ 4 ข้อมูลของ Power Meter รุ่น PM700 ของ Schnieder

จากรูปที่ 4 จะพบว่า PM700 มีการเรียงข้อมูล 32 บิตที่ไม่ใช่แบบ First Word Low เนื่องจาก Word แรกเป็น High Word (Upper 16-bits) (คู่มือของแต่ละอุปกรณ์อาจใช้คำไม่เหมือนกันแต่ความหมายเดียวกัน และพยายามอธิบายเพื่อให้เห็นภาพความเข้าใจเดียวกัน)

** เราสามารถเดาสุ่มว่าเป็น First Word Low หรือไม่ โดยดูค่าจาก OPC Server โดยไม่ต้องดูคู่มือ ขอเพียงให้ข้อมูลแบบ 32 บิตและเป็นบวกอย่างเดียวของ Adress ต่าง ๆ ถูกต้องตามค่าที่อ่านจากหน้าปัด โดยใช้ Type เป็น DWord

4. First DWord Low in 64 bit data type

การพิจารณาก็ทำนองเดียวกับข้อ 3 ครับ แต่ข้อ 4 นี้ไม่ค่อยได้ใช้เท่าไหร่ เพราะข้อมูลส่วนใหญ่ของอุปกรณ์จะเป็น 1 Word กับ 2 Word เสียมากครับ

5. Data Type

ต้องใช้ Data Type ของ OPC tag ให้ถูกต้องนะครับ 1 Word ไม่ใช่จะเป็น Integer อย่างเดียวเสียเมื่อไหร่นะครับ Short ก็เป็น 1 Word เช่นกัน และมีเครื่องหมายลบได้ เช่นเดียวกัน 2 Word ไม่ใช่จะเป็นได้แค่ DWord อาจจะเป็น Long ก็ได้หรือ Float ก็ได้ ต้องดูจากคู่มือ อย่างเช่นตามรูปตัวอย่าง รูปที่ 3 ข้อมูลแบบ 4 byte (2 Word) ต้องระบุว่าเป็น Float

clip_image005

รูปที่ 5

จากรูปที่ 5 เทียบกับข้อมูลพื้นฐานดังนี้

Char – Signed 8 bit data

Byte – Unsigned 8 bit data

Short – Signed 16 bit data

Word – Unsigned 16 bit data

Long – Signed 32 bit data

Dword – Unsigned 32 bit data

Float – 32 bit Real value IEEE format

Double – 64 bit Real value IEEE format

String – Null terminated ASCII string

BCD – Two byte-packed BCD value range is 0-9999

LBCD – Four byte-packed BCD value range is 0-99999999.

คิดว่า Active Power ในรูปที่ 5 ควรเป็นข้อมูลประเภทใดครับ?

>> เฉลย Long ครับ

เหตุผลเพราะใช้ 2 Word ( = 4 byte = 32 bit) และสามารถติดลบ ได้ ถ้าหากใช้ DWord จะผิดเพราะติดลบไม่ได้

6. ข้อกำหนดพิเศษของอุปกรณ์

อันนี้ถ้าไม่อ่านคู่มือโดยละเอียดในส่วน Modbus ของอุปกรณ์ จะไม่มีทางทราบเลย เช่น ค่า Power Factor ของ Schnieder Power Meter มีข้อกำหนดดังรูปที่ 5

clip_image006

รูปที่ 6 ข้อกำหนดพิเศษเฉพาะค่า Power Factor ของ PM800

จากรูปที่ 6 เมื่อค่าPFมีทิศทางเป็น Lagg จะทำให้ได้ค่า PF ผิดพลาดเนื่องจาก Bit ที่ 15 จะเป็น 1 ซึ่งหมายถึงลบทำให้ได้ค่าสูงผิดปกติ จึงจำเป็นต้องนำค่า 32768 ไปบวกเพื่อให้ได้ค่าที่ถูกต้องก่อนนำค่ามา Scale หรือหาร 1000 ให้ได้ค่า PF ที่ถูกต้อง แต่ถ้าเราใช้ Data Type เป็น Word เราจะต้องเอาค่า 32768 ไปลบออกแทนที่จะบวกเข้าไป

การสร้าง OPC File ของอุปกรณ์ที่เราไม่มีประสบการณ์มาก่อนแม้จะเป็นอุปกรณ์ประเภทเดียวกัน แต่คนละยี่ห้อ เราก็จำเป็นต้องอ่านคู่มือในส่วนที่เกี่ยวข้องโดยละเอียดหรือต้องเข้าใจหลักการที่สำคัญเพื่อวิเคราะห์ความเป็นไปได้ แต่สำหรับข้อกำหนดพิเศษจำเป็นต้องอ่านจากคู่มือโดย หรือสอบถามจากผู้มีประสบการณ์เกี่ยวข้องเช่น Technical Support เท่านั้น

Advertisements
This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s