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

| โหนด | หน้าที่ |
|---|---|
| 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 เอง:

| ฟิลด์ | ค่าเริ่มต้น | หมายเหตุ |
|---|---|---|
| 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:

การกำหนดที่อยู่ 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 variables —
msg.payloadเป็น object ที่ key คือชื่อ variable ครอบคลุมทุกแถวในตารางพร้อมกัน

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

โหนดจะแปลงค่าที่รับเข้ามาให้ตรงกับชนิดข้อมูลของ variable นั้นบน PLC เท่าที่ ทำได้ การเขียนหลาย variable พร้อมกัน (แบบ array) อาจไม่ได้ลงในรอบการเขียน เดียวกันของ PLC ขึ้นอยู่กับจำนวน variable ที่เขียน
Warning
ตามที่เอกสารของโหนดเองระบุไว้: ทดสอบทุกอย่างให้ครบถ้วนก่อนนำไปใช้กับ PLC จริงในสายการผลิต
s7 control¶
พฤติกรรมการ poll แบบวนซ้ำของ endpoint เปลี่ยนได้ขณะระบบทำงานอยู่ผ่านโหนดนี้ — ซึ่งมีเพียงสองฟังก์ชัน:

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