Counter และการคำนวณ
เรียนรู้ชนิดข้อมูลใน PLC (Bit, Word, Double Word) การใช้ Counter CTU ทั้ง 16-bit และ 32-bit การ Reset Counter และคำสั่งบวก ลบ คูณ หาร รวมถึงการแปลง Word เป็น Float ใน SamSoar2022
Counter นับขึ้นใช้คำสั่ง CTU ตามด้วย Counter Value (เช่น CV0) และ Set Value (เช่น K3) เมื่อนับครบ Contact C0 จะติด ล้างค่าด้วย MOV K0 CV0 คู่กับ RST C0 ส่วนการนับเกิน 32,767 ให้ใช้ C200 ขึ้นไปซึ่งเป็น 32-bit การคูณหารเลขทศนิยมต้องแปลง Word เป็น Double Word (WTOD) แล้วเป็น Float (DTOF) ก่อนใช้ MULF / DIVF
อัพเดทล่าสุด: 26 ตุลาคม 2569
ชนิดของข้อมูลใน PLC
ตอนก่อนๆ ใช้ตัว X, Y, M ซึ่งเป็นข้อมูลแบบ Bit (0 กับ 1) ก่อนไปต่อ ต้องเข้าใจด้วยว่าสิ่งที่เรากำลังเขียนเป็นข้อมูลชนิดไหน
ข้อมูลแบบ Bit
ตารางในคลิป (Ladder Data Type) แสดงตัวแปรแบบ Bit และช่วงที่ใช้ได้
| ตัวแปร | หน้าที่ | ระบบเลข | ช่วง |
|---|---|---|---|
| X | Input | ฐาน 8 (Octal) | FGs_16MR/FGs_16MT: 0–77, รุ่นอื่น: 0–177 |
| Y | Output | ฐาน 8 (Octal) | FGs_16MR/FGs_16MT: 0–77, รุ่นอื่น: 0–177 |
| M | Memory ภายใน | ฐาน 10 | 0–8223 |
| T | Contact ของ Timer | ฐาน 10 | 0–255 |
| C | Contact ของ Counter | ฐาน 10 | 0–255 |
| S | State | ฐาน 10 | 0–999 |
ตอนนี้จะใช้ตัว C ซึ่งคือ Counter ส่วน T และ S จะได้ใช้ในตอนหลัง
ข้อมูลตัวเลข
- K — เลขฐาน 10 ตัวเลขธรรมดาที่เราใช้ เป็นจำนวนเต็มหรือจำนวนจริงก็ได้ เช่น
K10,K100,K3.14,K4.2 - H — เลขฐาน 16 มีตั้งแต่ 0 ถึง F ในอนาคตอาจได้เจอ
- D — Data Register ใช้อ้างอิงการเก็บข้อมูลแบบ Word ที่เป็นตัวเลข
- CV — Counter Value, TV — Timer Value, AI/AO — ค่า Analog, Z — Index
ขอบเขตของตัวเลข
ตัวเลขใน PLC มีขอบเขตการใช้งาน ข้อมูล 16-bit ที่ใช้ทั่วไปเป็นแบบมีเครื่องหมาย (Signed) ถ้าต้องการตัวเลขที่ใหญ่กว่านั้นต้องใช้ 32-bit (Double Word)
| ชนิดข้อมูล | ต่ำสุด | สูงสุด |
|---|---|---|
| 16 Bit Unsigned | 0 | 65,535 |
| 16 Bit Signed | -32,768 | 32,767 |
| 32 Bit Unsigned | 0 | 4,294,967,295 |
| 32 Bit Signed | -2,147,483,648 | 2,147,483,647 |
เวลาใช้คำสั่งต่างๆ ให้ระวังเสมอว่าสิ่งที่ป้อนเข้าไปเป็นข้อมูล Bit, Word หรือ Double Word จะช่วยลด Error ในโปรแกรมได้
Counter (ตัวนับจำนวน)
Counter มี 2 แบบ คือ Count Up (นับขึ้น) และ Count Down (นับลง) การนับขึ้นใช้คำสั่ง CTU ซึ่งต้องใส่ Parameter 2 ตัว
- Counter Value — ตำแหน่งที่เก็บค่าการนับ เช่น
CV0(ต้องมีตัว V ด้วย ส่วนC0ที่ไม่มี V คือ Contact แบบ Bit ไว้สั่งงานต่อ) - Set Value — นับไปถึงค่าเท่าไหร่จึงให้ Contact C0 ติด เช่น
K3
ผลการ Simulate
- M40 ติดครั้งที่ 1 → CV0 = 1
- M40 ติดครั้งที่ 2 → CV0 = 2
- M40 ติดครั้งที่ 3 → CV0 ตรงกับ Set Value C0 จึงติด และ M41 ติด
หลังจากนั้นถ้า M40 ยังทำงานต่อ ค่าจะนับต่อไปเรื่อยๆ และ C0 ยังติดค้างไว้
การ Reset Counter
ใช้คำสั่ง MOV (ย้ายข้อมูลหรือเอาค่าไปใส่ในตำแหน่งข้อมูล ใช้บ่อยมาก) ใส่ค่า K0 ลง CV0 ค่าจะกลับเป็น 0 แต่ Contact C0 ยังติดอยู่ จึงต้องใช้ RST C0 K1 เพิ่มในแถวเดียวกัน
กด M42 แล้วทั้ง Counter Value และ Contact กลับเป็นค่าเริ่มต้น
Counter 32-bit
| Counter | ขนาดข้อมูล |
|---|---|
| C0–C199 | 16-bit |
| C200 ขึ้นไป | 32-bit (นับค่าที่มากกว่า 16-bit) |
High Speed Input มี Counter พิเศษของมัน ซึ่งจะพูดถึงในอนาคต
ทดสอบโดยเพิ่ม CV200 ใน Monitor List ตั้งค่าเป็น 99,999 (ยังไม่ถึง 100,000) แล้วให้ M43 ทำงานอีกครั้ง Counter จะครบและ C200 ติด
บวก ลบ คูณ หาร
คำสั่งคำนวณอยู่ใน Project Tree หมวด Integer Calculation ได้แก่ ADD (บวก), SUB (ลบ), MUL (คูณ), DIV (หาร) และ INC (Increment บวกเพิ่ม 1)
ในคลิปใช้ M8151 (ติดตลอดขณะ PLC ทำงาน) ใส่ค่า 123 ลง D40 แล้วคำนวณจากค่านั้น
ผลการ Simulate: D41 = 124 และ D42 = 124
คำสั่ง INC ทำงานทุก Cycle ถ้าใช้ในงานจริงควรใส่ขอบขาขึ้นให้กับมัน
คูณและหารเลขทศนิยม
การคูณหารมักใช้ค่าทศนิยม ซึ่งเอาค่า D40 (ข้อมูล 1 Word) ไปคูณกับเลขทศนิยมตรงๆ ไม่ได้ ต้องแปลงข้อมูลก่อนด้วยคำสั่งในหมวด Convert
- WTOD — แปลง Word เป็น Double Word
- DTOF — แปลง Double Word เป็น Float
- จากนั้นจึงใช้ MULF / DIVF คูณหารเลขทศนิยมได้
เมื่อใช้คำสั่งแบบ Double Word หรือ Float ให้เว้น Address ทีละ 2 เสมอ (D52 → D54 → D56) เพราะ Double Word ใช้ 2 Register เช่น D53 ถูกใช้ร่วมกับ D52 อยู่แล้ว
ผลการ Simulate: D54 = 386.220001 (123 × 3.14) และ D56 = 100 (123 ÷ 1.23) เลขทศนิยมใน PLC มีเรื่อง Precision ทำให้อาจไม่ตรงเป๊ะเหมือนการคำนวณในคอมพิวเตอร์
เคล็ดลับ
- ถ้าไม่เห็น Comment ใต้ตำแหน่งข้อมูล ให้ไปที่ View แล้วกด Unit Comment
- ระวังชนิดข้อมูลของสิ่งที่ป้อนเข้าคำสั่งเสมอ (Bit, Word, Double Word, Float)
- Double Word ใช้ 2 Register วาง Address ให้ไม่ทับกัน
ตอนถัดไป
6. Real-time Clock และการเปรียบเทียบค่า
ควรอ่านก่อน:
มีคำถาม? ติดต่อทีมงาน
