บทที่ O03 · FBD · Omron CP1L-E

Function Block Diagram (FBD)

ภาษา FBD มองโปรแกรม PLC เป็น "กล่องเชื่อมต่อกัน" คล้าย Datasheet ของวงจรดิจิทัล — เหมาะกับงานที่มีการคำนวณซับซ้อน, PID, หรือ Filter Lab นี้ใช้ Omron CP1L-E คู่กับ Temperature Controller E5EC-QR2ASM

FBD vs Ladder — ต่างกันยังไง

Ladder (LD)FBD
หน้าตาวงจรไฟฟ้า (Contact-Coil)กล่องต่อสายกัน (Block-Wire)
ถนัดงานLogic, Sequence, Interlockคำนวณ, PID, Filter, Signal processing
คนใช้วิศวกรไฟฟ้าวิศวกรควบคุม, Process
การ Debugดู Animation สว่าง/ดับตาม Contactดูตัวเลขที่ไหลผ่าน Wire

หน้าตา FBD เปรียบเทียบ Ladder

Ladder — ติด Y0 เมื่อ X0 AND X1 AND NOT X2 X0 X1 X2 Y0 FBD — เขียน Logic เหมือนกันด้วยกล่อง AND X0 X1 X2 NOT AND Y0
Logic เดียวกัน — ต่าง syntax · Ladder = สาย + Contact + Coil  ·  FBD = กล่อง AND/NOT + เส้นเชื่อม

ใบงานปฏิบัติการ — Omron CP1L-E + E5EC-QR2ASM

Lab นี้ใช้ PLC Omron CP1L-E (ไม่ใช่ FX5U) เพราะ CX-Programmer ของ Omron มี FBD editor ที่เหมาะกับการเริ่มเรียน — concept เหมือนกัน เปลี่ยนแค่ syntax

Omron CP1L-EM30DTD with labeled ports
Omron CP1L-EM30DTD — มี Digital I/O, Ethernet port, Modbus RTU, Serial Communication ในตัวเดียวกัน

อุปกรณ์ที่ใช้

อุปกรณ์หน้าที่
Omron CP1L-EPLC หลัก (Master Modbus)
Omron E5EC-QR2ASMTemperature Controller (Modbus Slave)
CX-ProgrammerIDE ของ Omron สำหรับเขียน Ladder/FBD/ST
RS-485 Cableเชื่อม PLC ↔ Controller

เริ่มเขียน FBD ใน CX-Programmer

CX-Programmer Insert Function Block menu
CX-Programmer — คลิกขวาที่ Function Blocks เพื่อ Insert FB (Ladder, Structured Text, หรือ From File)
  1. สร้าง Project ใหม่ File → New → เลือก Device Type: CP1L-E → กด Settings → ตั้ง CPU Type ให้ตรงกับตัวจริง (เช่น CP1L-EM30DR-D)
  2. เพิ่ม FB Definition คลิกขวาที่ Function Blocks ใน Project tree → Insert Function Block → Ladder (หรือ Structured Text ก็ได้ — เลือกได้ภายหลังจะทำต่อด้วยภาษาไหน)
  3. กำหนด Input/Output ของ FB ตั้งชื่อตัวแปร เช่น
    • Input: StartCmd : BOOL, SetPoint : REAL
    • Output: HeaterOn : BOOL, ActualTemp : REAL
    • Internal: Error : REAL, Integral : REAL
  4. เขียน Logic ภายใน FB เลือกจากแถบ Toolbox: ADD, SUB, MUL, DIV, GT, LT, MOV ฯลฯ ลากเป็นกล่อง แล้วลากเส้นเชื่อม Input ของแต่ละกล่อง
  5. เรียกใช้ FB ใน Main เปิด Section1 ใน Main → ลากชื่อ FB ที่เพิ่งสร้างมาวาง → connect ตัวแปรจริงเข้ากับ I/O ของ FB

การสื่อสาร Modbus RTU กับ E5EC

Omron E5EC display showing PV/SV/MV
Omron E5EC-QR2ASM — แสดง PV (Process Value) ขาว, SV (Set Value) เขียว, MV (Manipulated Value) ส้ม
Omron E5EC-QR2ASM terminal wiring
ขั้วต่อด้านหลัง — 1/2 = AC 100-240V, 3-6 = OUT1/OUT2, 13/14 = RS-485 (A/B), 16-18 = EV1/EV2, 22-24 = Input mA/V/TC

E5EC-QR2ASM รองรับ Modbus RTU ผ่าน RS-485 ที่ Function Code 0x03 (Read Holding Registers) — Register ที่เราสนใจส่วนใหญ่:

E5EC register address map
Register map ฉบับเต็ม — รองรับทั้ง Four-byte mode (32-bit address) และ Two-byte mode (16-bit address); 2000h = PV, 2103h = Set Point, 2104h = Alarm 1
Address (Hex)ค่าหน่วย
0x0000Process Value (ค่าที่อ่านได้)°C × 10
0x0106Set Point°C × 10
0x0107Alarm Value 1°C × 10
0x0408Proportional Band (P)%FS × 10
0x040AIntegral Time (I)s × 10
0x040CDerivative Time (D)s × 10
เลข × 10 หมายถึงอะไร? Modbus เก็บค่าเป็น Integer 16-bit — เพื่อให้รองรับทศนิยม 1 ตำแหน่ง E5EC จะ คูณ 10 ก่อนส่ง เพราะฉะนั้น 250 จาก register = 25.0 °C

ตั้งค่า Modbus ที่ตัว E5EC

E5EC Communications Setting Level menu
Communications Setting Level บนหน้า E5EC — เมนูเรียงตามลำดับ: PSEL (Protocol) → U-No (Unit) → BPS (Baud) → LEN (Length) → SbtL (Stop bits) → PrtY (Parity) → SdWt (Send wait)
  1. เข้า Initial Setting Mode กดปุ่ม O (Mode) ที่หน้า E5EC ค้าง ~3 วินาที — จะเข้าสู่ Mode ตั้งค่า
  2. ตั้ง Communication Protocol เลื่อนหา CMWT → ตั้งเป็น Modbus
  3. ตั้ง Unit Address U-No = 1 (Slave address)
  4. ตั้ง Baud rate / Data bits / Parity BPS = 9600 · LEN = 8 · PRTY = None — ต้องตรงกับฝั่ง PLC
  5. Reboot E5EC ดับไฟ → เปิดใหม่ — ตอนนี้ E5EC พร้อมเป็น Modbus Slave แล้ว

FBD สำหรับ Read Temperature

โครงสร้าง FB ที่จะสร้าง:

📦 FB_ReadTemp — Function Block

Inputs

  • Trigger BOOL
  • SlaveID INT
  • Address INT
  • Length INT

Modbus Master Read

FC = 03 (Read Holding)

  • ส่ง Request ตอน Trigger
  • เก็บผลใน DataReg (INT)

DIV × 0.1

INT → REAL

  • หาร 10 เพื่อแปลงเป็นองศา

Outputs

  • Done BOOL
  • Error BOOL
  • Temperature REAL
FBD controller in CX-Programmer
ตัวอย่าง FBD จริงใน CX-Programmer — Function Block FB_ST รับ temp/humi 3 ช่อง คำนวณค่าเฉลี่ย และคุม FAN/PUMP/HEATER

Pseudo-code ของ FBD ด้านบนในภาษา Structured Text (ดูง่ายกว่าวาดเส้น):

Structured Text editor in CX-Programmer
ในแท็บ Structured Text เห็นโค้ดสองบรรทัด: temp_avg := (temp_1+temp_2+temp_3)/3.00; — สั้นกว่าวาดด้วยบล็อกเยอะ
FUNCTION_BLOCK FB_ReadTemp
VAR_INPUT
    Trigger    : BOOL;
    SlaveID    : INT;
    Address    : INT;
END_VAR
VAR_OUTPUT
    Done       : BOOL;
    Error      : BOOL;
    Temperature : REAL;
END_VAR
VAR
    RawValue   : INT;
END_VAR

ModbusMaster(
    Trigger := Trigger,
    Slave := SlaveID,
    FuncCode := 3,
    StartAddr := Address,
    Length := 1,
    Data => RawValue,
    Done => Done,
    Error => Error
);

IF Done THEN
    Temperature := INT_TO_REAL(RawValue) * 0.1;
END_IF;

Ladder จริงที่ใช้ในใบงานนี้

นอกจาก FBD ที่อธิบายมา — ใบงานยังมี Ladder ที่จัดการ Status/Error ของ Modbus Master ในตัว CP1L-E:

RUN_ModbusRTU ladder section
Section RUN_ModbusRTU — P_1s (1.0 second clock) → W10.00 (RUN_Comman), A640.00 = Modbus RTU Master Serial2 execution bit, A640.01 = Normal Operation, A640.02 = Error → MOV D32352 W2 เก็บ Error Code
READ_TEMP ladder section
Section READ_TEMP — ใส่ Slave Address #01, Function Code #03, จำนวน Comm Data Bytes #04, Modbus Register #0000, Number of Registers #02 ลงใน D32300–D32304 ก่อน Trigger
Omron CP1L Modbus D register memory map
การจัดวาง Modbus command ใน D32300–D32306 (Slave/FC/Bytes/Reg/Number) — ตัวอย่างค่าทางขวาคือ FC=03 อ่าน 1 register ที่ address 0x0118
Omron Modbus-RTU Master Execution Bits A640/A641
Special bit A640.00/A641.00 = Execution Bit ของ Modbus Master บน Port 2/Port 1 — ON เพื่อสั่งให้ส่ง command

โหลดโปรแกรมเข้า PLC

CX-Programmer Transfer to PLC dialog
เมนู Options → Transfer to PLC → ยืนยัน "Are you sure you want to download these settings to the PLC?" → กด Yes — โปรแกรมจะถูก Download เข้า CP1L-E

ทดสอบการอ่านค่า

  1. ต่อสาย RS-485 ที่ E5EC ใช้ขั้ว A(+) และ B(−) — ที่ Omron CP1L-E ใช้พอร์ต RS-485 ของ Serial Option Board (CP1W-CIF11) ต่อ A ↔ A, B ↔ B และ Ground ร่วมกัน
  2. โหลดโปรแกรมเข้า PLC PLC → Transfer → To PLC → เลือก Program + IO Table + Settings
  3. Monitor ค่า เปิด Watch Window → เพิ่ม Temperature และ Done — ถ้าทุกอย่างต่อถูก ค่า Temperature จะอัปเดตทุก 1 วินาที (ตาม Trigger)
  4. ทดสอบเปลี่ยน Set Point เขียน FB อีกตัวคล้ายกันแต่ใช้ FC=06 (Write Single Register) → register 0x0106 ลองตั้ง 30.0 °C → ดูที่หน้า E5EC ว่าเปลี่ยนตามไหม
Baud rate ต้องตรงกันทั้งสองฝั่ง ถ้า PLC ตั้ง 19200 แต่ E5EC ตั้ง 9600 — จะเกิด Error 0x01 (Timeout) ตอน debug ลองเปลี่ยน Baud ทีละค่าไล่ดู

วิดีโอประกอบใบงาน FBD + Temperature

Lab นี้มีวิดีโอ Walkthrough 3 ตอน:

FBD Lab · EP1
FBD-from-Ladder Basics
FBD Lab · EP2
FBD-from-Structured-Text
FBD Lab · EP3
อ่าน E5EC ผ่าน Modbus RTU

เอกสารใบงาน FBD + Temperature Controller