Home ICONICS (SCADA)
ตัวอย่างการแยกบิตของสัญญาณด้วย GENESIS32 PDF Print E-mail
Tuesday, 03 December 2013 22:55

จากท่านที่ใช้ GENESIS32 ถามมาว่า สมมุติว่าผมมี ข้อมูลเป็น 1011000000010011 แล้วผมต้องการแยกข้อมูล ตามข้างล่างนี้


Bits 0 -7 = Alarm Number

Bits 8 = Unused

Bit 9 = Relative(1), Absolute(0

Bits 12-13 = Priority
 
ไม่ทราบว่าจะใช้ฟังก์ชั่นไหนแยกเพื่อนำมาแปลงเป็นฐานสิบครับ

 

 

เราสามารถทำได้โดยใช้ Expression ใน GENESIS32 ดังนี้

 

ข้อมูลที่เรารับมาจาก PLC ใช้ Data Type ใน OPC เป็น WORD ตามปกติ สมมุติชื่อ tag ว่า VL ครับ

ข้อมูลบิต 0 - 7 ที่ต้องการตัดมาให้ใช้ Expression ดังนี้

x= {{VL}}  &  255

เช่น

x= {{ICONICS.Simulator.1\SimulatePLC.VL}}  &  255


ส่วน Bit อื่น ๆ เป็นดังนี้ครับ

Bit8 ใช้ x=  bittest({{VL}},8)
Bit9 ใช้ x=  bittest({{VL}},9)
Bits10-11 ใช้  x= {{VL}}  &  3072  / pow(2,10) 
(ตัวเลข 3072 มาจาก 0000110000000000 ซึ่งใช้เพื่อAndกับค่าสัญญาณเพื่อให้เหลือเฉพาะบิตในตำแหน่ง 10 และ 11 ส่วน pow(2,10) คือเลข 2 ยกกำลัง10ใช้เพื่อหารเอาค่าบิตที่ 0 – 9 ออกไป)


Bits12-13 ใช้  x= {{VL}}  &  12288  /  pow(2,12)
Bit14 ใช้ x=  bittest({{VL}},14)
Bit15 ใช้ x=  bittest({{VL}},15)

Last Updated ( Wednesday, 04 December 2013 06:28 )
 

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

**สงวนลิขสิทธิ์ทั้งหมด โดย EDA International LTD.
สงวนลิขสิทธิ์ทั้งหมด ทุกข้อความ รูปภาพ งานกราฟฟิค และภาพเคลื่อนไหว ที่ปรากฎอยู่บนหน้าเว็บไซต์ อยู่ภายใต้การสงวนลิขสิทธิ์และได้รับการคุ้มครองตามกฎหมาย ไม่อนุญาต ให้ทำซ้ำ คัดลอก ดัดแปลง ส่วนหนึ่งส่วนใดหรือทั้งหมด โดยมิได้รับอนุญาตเป็นลายลักษณ์อักษรจากบริษัทฯ