ข้ามไปที่เนื้อหา

การเชื่อมต่อ Siemens S7 PLC

สำหรับ PLC ของ Siemens รุ่น S7-300/400/1200/1500 ให้ติดตั้ง node-red-contrib-s7 จากแท็บ Install ของ Manage palette — ดู การจัดการ Palette แพ็กเกจนี้ไม่ได้ติดตั้งมาให้บน เกตเวย์นี้ตั้งแต่ต้น

กรอง palette ด้วยคำว่า "s7" จะเจอโหนดใหม่ 3 ตัวภายใต้หมวด plc:

Node-RED palette กรองด้วยคำว่า "s7" แสดงโหนด s7 in, s7 out และ s7 control

โหนด หน้าที่
s7 endpoint config node ที่ใช้ร่วมกัน — การเชื่อมต่อไปยัง PLC หนึ่งชุด พร้อมตาราง variable และรอบการ poll ที่โหนด in/out/control กี่ตัวก็นำไปใช้ซ้ำได้
s7 in อ่านค่า variable หนึ่งตัว (หรือทั้งหมด) จากตารางของ endpoint ทุกรอบการ poll
s7 out เขียนค่าไปยัง variable หนึ่งตัว
s7 control เปลี่ยนรอบเวลา poll ของ endpoint ขณะระบบทำงานอยู่ หรือสั่งอ่านค่าทันที

ตั้งค่า endpoint

ดับเบิลคลิกโหนด in/out/control ตัวใดก็ได้ แล้วคลิกไอคอนดินสอข้าง PLC เพื่อสร้าง config node แบบ s7 endpoint แท็บ Connection ของมันเป็น ส่วนที่ตั้งค่าการเชื่อมต่อไปยังตัว PLC เอง:

กล่องตั้งค่า s7 endpoint แท็บ Connection กรอก Transport, Address, Mode, Rack/Slot, Cycle time และ Timeout ไว้แล้ว

ฟิลด์ ค่าเริ่มต้น หมายเหตุ
Transport Ethernet (ISO-on-TCP) กรณีทั่วไป เชื่อมต่อผ่านเครือข่าย ส่วน MPI/PPI/DP Adapter คือเชื่อมผ่านอุปกรณ์ MPI/PPI/DP โดยตรง ต้องติดตั้งแพ็กเกจ node-red-contrib-mpi-s7 แยกต่างหาก
Address ที่อยู่ IP ของ PLC (เฉพาะ transport แบบ Ethernet)
Port 102
Mode Rack/Slot หรือ TSAP สำหรับอุปกรณ์ (เช่น Logo!) ที่ไม่มีการระบุที่อยู่แบบ rack/slot
Rack / Slot 0 / 2 หมายเลข rack และ slot ของ CPU
Local/Remote TSAP 01.00 / 01.00 แสดงเฉพาะโหมด TSAP — คู่ค่า TSAP แบบเลขฐาน 16
Cycle time 1000 ms ความถี่ที่ endpoint จะ poll PLC ตั้งเป็น 0 เพื่อปิดการอ่านอัตโนมัติ — เมื่อปิดแล้วต้องสั่งอ่านเองผ่าน s7 control
Timeout 2000 ms เวลาสูงสุดที่ PLC จะตอบกลับคำขอได้ ปรับเพิ่มได้หากเครือข่ายมีภาระงานสูงหรือ latency สูง

ตั้งค่าฝั่ง PLC ไม่ใช่ฝั่ง Node-RED

ตัว PLC เองต้องอนุญาตให้ทำแบบนี้ก่อน สำหรับ S7-1200/1500 ใน TIA Portal: ปิด "Optimized block access" ของ data block ที่ต้องการอ้างอิงด้วย byte offset และเปิด "Permit access with PUT/GET communication" ใน protection properties ของ CPU ทั้งสองอย่างนี้ทำจากฝั่ง Node-RED ไม่ได้

แท็บ Variables ใช้สำหรับระบุรายการ tag ที่ endpoint นี้จะอ่านและเขียน แต่ละแถวประกอบด้วย name และ addr:

กล่องตั้งค่า s7 endpoint แท็บ Variables กรอกแถว motor_running และ temperature ไว้แล้ว

การกำหนดที่อยู่ variable

รูปแบบการกำหนดที่อยู่ของ S7 ต่างจากสัญกรณ์ของ Step 7/TIA Portal เล็กน้อย ตัวอย่างด้านล่างแสดงทั้งสองรูปแบบสำหรับที่อยู่ที่เขียนได้มากกว่าหนึ่งแบบ:

Address เทียบเท่าใน Step 7 ความหมาย
DB5,X0.1 DB5.DBX0.1 บิตที่ 1 ของไบต์ 0 ใน DB5
DB23,B1 หรือ DB23,BYTE1 DB23.DBB1 ไบต์ 1 (0–255) ของ DB23
DB42,I3 หรือ DB42,INT3 DB42.DBW3 เลขจำนวนเต็ม 16 บิตแบบมีเครื่องหมาย ที่ไบต์ 3 ของ DB42
DB57,WORD4 DB57.DBW4 เลขจำนวนเต็ม 16 บิตแบบไม่มีเครื่องหมาย ที่ไบต์ 4 ของ DB57
DB13,DI5 หรือ DB13,DINT5 DB13.DBD5 เลขจำนวนเต็ม 32 บิตแบบมีเครื่องหมาย ที่ไบต์ 5 ของ DB13
DB21,R7 หรือ DB21,REAL7 DB19.DBD7 เลขทศนิยม 32 บิต ที่ไบต์ 7 ของ DB21
DB2,S7.10 สตริงยาว 10 ตัวอักษร เริ่มจากไบต์ 7 ของ DB2
I1.0 หรือ E1.0 I1.0 / E1.0 บิตที่ 0 ของไบต์ 1 ใน input area
Q2.1 หรือ A2.1 Q2.1 / A2.1 บิตที่ 1 ของไบต์ 2 ใน output area
M3.2 QM3.2 บิตที่ 2 ของไบต์ 3 ใน memory area

ทั้งแบบภาษาอังกฤษ (I/Q/M) และแบบเยอรมันตามที่ใช้ใน Step 7 (E/A/M) ใช้แทน input/output/memory area ได้ทั้งคู่

การอ่านค่า (s7 in)

ตั้งค่า Mode เป็น:

  • Single variable — เลือก variable หนึ่งแถวจากตารางของ endpoint — ทุกรอบ (หรือเฉพาะตอนค่าเปลี่ยน หากติ๊ก diff) จะส่ง msg.payload เท่ากับค่านั้น และ msg.topic เท่ากับชื่อ variable
  • All variables, one per message — เหมือนกันแต่ส่งทีละข้อความต่อ variable ในแต่ละรอบ (หากติ๊ก diff จะส่งเฉพาะตอนตัวนั้นเปลี่ยนค่า) — ควรระวังปริมาณข้อความหาก endpoint มี variable จำนวนมาก
  • All variablesmsg.payload เป็น object ที่ key คือชื่อ variable ครอบคลุมทุกแถวในตารางพร้อมกัน

โหนด s7 in ตั้งค่า PLC เป็น endpoint, Mode เป็น Single variable, Variable เป็น temperature

การเขียนค่า (s7 out)

ผูกโหนดกับ variable หนึ่งตัวจากตาราง หรือปล่อย Variable ว่างไว้แล้ว ป้อน msg.variable (ชื่อเดียวหรือ array ของชื่อ) และ msg.payload (ค่าเดียวหรือ array ของค่า) จากต้นทางแทน:

โหนด s7 out ตั้งค่า PLC เป็น endpoint, Variable เป็น motor_running พร้อมข้อความเตือนเรื่องการเขียนของแพ็กเกจ

โหนดจะแปลงค่าที่รับเข้ามาให้ตรงกับชนิดข้อมูลของ variable นั้นบน PLC เท่าที่ ทำได้ การเขียนหลาย variable พร้อมกัน (แบบ array) อาจไม่ได้ลงในรอบการเขียน เดียวกันของ PLC ขึ้นอยู่กับจำนวน variable ที่เขียน

Warning

ตามที่เอกสารของโหนดเองระบุไว้: ทดสอบทุกอย่างให้ครบถ้วนก่อนนำไปใช้กับ PLC จริงในสายการผลิต

s7 control

พฤติกรรมการ poll แบบวนซ้ำของ endpoint เปลี่ยนได้ขณะระบบทำงานอยู่ผ่านโหนดนี้ — ซึ่งมีเพียงสองฟังก์ชัน:

โหนด s7 control ตั้งค่า PLC เป็น endpoint, Function เป็น Cycle time

  • Cycle time — ส่งตัวเลขบวกทาง msg.payload (หน่วยเป็นมิลลิวินาที ระหว่างแต่ละรอบอ่าน); 0 จะปิดการอ่านแบบวนซ้ำทั้งหมด
  • Trigger read — ข้อความที่เข้ามาไม่ว่าจะเป็นอะไรจะบังคับให้อ่านหนึ่ง รอบทันที โดยไม่สนใจ cycle time ที่ตั้งไว้ มีประโยชน์เมื่อตั้ง cycle time ไว้นานแต่ต้องการผลลัพธ์ทันที (เช่น ทันทีหลังเขียนค่า) — ข้อความเดิมจะถูก ส่งต่อออกไปเป็นเอาต์พุตของโหนด ทั้งนี้โหนด s7 in ยังคงเป็นตัวที่ส่งค่า ที่อ่านได้จริงออกมา ฟังก์ชันนี้แค่ทำให้รอบอ่านครั้งถัดไปมาถึงเร็วขึ้น เท่านั้น

ต่อไป: MQTT broker (Aedes) หรือย้อนกลับไปที่ การเชื่อมต่อ Modbus / PLC หาก PLC ของคุณพูดภาษา Modbus แทน