Advanced
21 rungs
4 I/O

Profile อุณหภูมิแบบ Ramp / Soak

Ramp / Soak Temperature Profile

ปรับ setpoint อุณหภูมิแบบหลายช่วง — ขึ้นแบบ ramp (ช้าๆ) แล้วคงที่ (soak) — เหมาะกับเตาอบ, kiln, heat-treatment

หลักการ

ระบบเตาอบหรือ heat-treatment ต้องการ profile อุณหภูมิที่:

  1. ขึ้นช้าๆ เพื่อไม่ให้ผลิตภัณฑ์ shock ทางความร้อน (cracking)
  2. คงที่ ที่อุณหภูมิเป้าหมายตามเวลาที่ต้องการ (curing, sintering)
  3. ลงช้าๆ เพื่อไม่ให้ stress ทางความร้อน
Temperature
   400│           ┌─────── Soak ──────┐
      │          /                     \
   200│         / Ramp Up              \ Ramp Down
      │        /                         \
    25│ ─────/                             \─────
      │     0    5min   65min   125min  185min  Time

Profile Definition

ตัวอย่างนี้ใช้ 3 segment:

SegmentTypeTarget SPDuration
1Ramp Up25 → 400°C5 min
2Soak400°C60 min
3Ramp Down400 → 25°C60 min

Ramp Calculation

ระหว่าง Ramp segment ต้องคำนวณ setpoint ปัจจุบันแบบ linear interpolation:

SP_current = SP_start + (SP_end - SP_start) × elapsed / duration

ตัวอย่าง: Ramp 25→400°C, 5 นาที, ผ่านไป 2 นาที (40%)
SP = 25 + (400 - 25) × 2/5 = 25 + 150 = 175°C

ใน PLC ใช้ MUL/DIV กับ 32-bit register เพื่อให้คำนวณไม่ overflow

Logic Flow

First scan
  ↓
D200 = 0 (Idle)
D201 = 0 (Segment timer ในวินาที)
  ↓
กด Start (X0) → M0 ติด, D200 = 1, D201 = 0
  ↓
Segment 1 (D200 = 1): Ramp 25 → 400 over 300s
  Calc: D300 = 25 + (400-25) × D201 / 300
  เมื่อ D201 ≥ 300 → D200 = 2, D201 = 0
  ↓
Segment 2 (D200 = 2): Soak ที่ 400°C
  D300 = 400 (คงที่)
  เมื่อ D201 ≥ 3600 (60 min) → D200 = 3, D201 = 0
  ↓
Segment 3 (D200 = 3): Ramp 400 → 25 over 3600s
  Calc: D300 = 400 - (400-25) × D201 / 3600
  เมื่อ D201 ≥ 3600 → D200 = 4 (Done)

D300 (computed setpoint) ส่งต่อให้ PID หรือ On/Off control logic ตัวอย่างนี้ output PWM (Y0) แบบ on/off ตาม SP_current vs PV_current

Time-base ใช้ M8013 (1Hz pulse)

PLC มี M8013 = 1-second clock (ขึ้น/ลงทุก 0.5s) ใช้ดึง edge เพิ่ม counter ทุก 1 วินาที

LDP M8013    // rising edge ทุก 1 วินาที
INC D201 D201   // เพิ่ม segment elapsed time

Logic ต่อจาก Setpoint Computed

D300 (computed SP) ใช้กับ:

  • On/Off — เปิด heater เมื่อ PV < SP - 2°C, ปิดเมื่อ > SP + 2°C
  • PID — ใช้เป็น input ของ EPID instruction
  • PWM — DIV(D300, K100, D310) → DUTY% สำหรับ PWY output

ตัวอย่างนี้แสดง On/Off เพื่อความเรียบง่าย

ขยายเพิ่ม

  • มากกว่า 3 segment — เพิ่ม D200=4, 5, 6 ตามต้องการ
  • Recipe — เก็บ profile หลายแบบใน D1000-D1099 แล้ว MOV เลือก profile
  • HMI Trend — โชว์ profile กับ PV จริงเทียบกัน
  • Hold/Resume — ปุ่ม pause ที่หยุด D201 (ไม่ rest)
  • Abort cooling — ถ้า PV เกิน SP+50°C → emergency cool

โปรแกรม PLC

Profile อุณหภูมิแบบ Ramp / Soak — Ramp / Soak Temperature Profile
ปรับ setpoint อุณหภูมิแบบหลายช่วง — ขึ้นแบบ ramp (ช้าๆ) แล้วคงที่ (soak) — เหมาะกับเตาอบ, kiln, heat-treatment
N0Start/Stop + ตั้ง Segment เริ่มต้น
Latch Start/Stop — Start (X0) + self-hold พร้อม Stop (NC X1)
X0M0X1M0
ขอบขาขึ้นปุ่ม Start — เริ่มที่ Segment 1
X0MOVK1, D200
ขอบขาขึ้นปุ่ม Start — รีเซ็ตเวลาที่ผ่านไปเป็น 0
X0MOVK0, D201
รีเซ็ตทุกอย่างเมื่อระบบหยุด
M0MOVK0, D200
N1นับเวลาที่ผ่านไป
1Hz tick — เพิ่ม D201 (วินาที) ขณะระบบทำงาน
M8013M0INCD201, D201
N2Segment 1: เร่งอุณหภูมิขึ้น (25 → 400°C)
Segment 1: Ramp 25 → 400 ใน 300 วินาที — temp_delta × elapsed
D200 = K1MULD201, K375, D310
Segment 1: หารด้วย 300 → ส่วนที่ ramp ขึ้น
D200 = K1DIVD310, K300, D311
Segment 1: SP = 25 + ramp portion → D300
D200 = K1ADDD311, K25, D300
Segment 1 → 2: เมื่อ D201 >= 300 (5 นาที)
D201 >= K300D200 = K1MOVK2, D200
Segment 1 → 2: รีเซ็ต Timer ของ Segment ด้วย
D201 >= K300D200 = K1MOVK0, D201
N3Segment 2: คงอุณหภูมิ (Soak 400°C, 60 นาที)
Segment 2 (Soak): SP = 400 คงที่
D200 = K2MOVK400, D300
Segment 2 → 3: เมื่อ D201 >= 3600 (60 นาที)
D201 >= K3600D200 = K2MOVK3, D200
Segment 2 → 3: รีเซ็ต Timer ของ Segment
D201 >= K3600D200 = K2MOVK0, D201
N4Segment 3: ลดอุณหภูมิลง (400 → 25°C)
Segment 3: Ramp 400 → 25 ใน 3600 วินาที — temp_delta × elapsed
D200 = K3MULD201, K375, D310
Segment 3: หารด้วย 3600 → ส่วนที่ ramp ลง
D200 = K3DIVD310, K3600, D311
Segment 3: SP = 400 - ramp portion → D300 (กำลังเย็นลง)
D200 = K3SUBK400, D311, D300
Segment 3 → จบ: เมื่อ D201 >= 3600
D201 >= K3600D200 = K3MOVK4, D200
N5ควบคุมฮีตเตอร์ + ไฟแสดงจบ
ฮีตเตอร์ติด: เมื่อ PV < SP - 2°C (D100 < D300 - 2)
D100 < D300M0SETY0
ฮีตเตอร์ดับ: เมื่อ PV >= SP + 2°C
D100 > D300RSTY0
บังคับดับฮีตเตอร์เมื่อหยุดหรือเสร็จ (D200 = 0 หรือ 4)
M0RSTY0
ไฟแสดงจบ (Y3) — เมื่อถึง Segment 4
D200 = K4Y3
Network count: 6, gap: 12
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

I/O Assignment

AddressRoleNote
X0ปุ่ม Start (NO)
X1ปุ่ม Stop (NC)
Y0คอนแทคเตอร์ฮีตเตอร์ (relay หรือ SSR)
Y3ไฟแสดงจบ (lamp)

Parameters ที่ปรับได้

D100default:

Process value (อุณหภูมิปัจจุบัน) — อ่านจาก analog / RTD module

D200default: 0

Segment ปัจจุบัน (0=Idle, 1-3=Running, 4=Done)

D201default: 0

เวลาที่ผ่านไปใน Segment ปัจจุบัน (วินาที — รีเซ็ตทุกครั้งที่ข้าม Segment)

D300default: คำนวณ

Setpoint ที่คำนวณ — อัปเดตอัตโนมัติทุก scan ตาม Segment + เวลาที่ผ่านไป

K375 (ใน MUL)default: 375

ผลต่างอุณหภูมิ (400-25) — ปรับถ้าเปลี่ยน start/end temp

K300 (Segment 1)default: 300s

ระยะเวลา Ramp 1 — เพิ่มเพื่อ ramp ช้าลง (ลด thermal shock)

K3600 (Segments 2,3)default: 3600s

ระยะเวลา Soak / Ramp-down — ปรับตามสูตร (recipe)

อุปกรณ์ที่แนะนำ

คำถามที่พบบ่อย

ทำไมใช้ MUL ก่อน DIV ไม่ DIV ก่อน?

ป้องกัน integer overflow + truncation: ถ้า DIV ก่อน เช่น `DIV D201 K300 D311` ตอน D201=2, D311=0 (เพราะ 2/300 ปัดเป็น 0 ในจำนวนเต็ม) แล้ว MUL ก็เป็น 0 → SP ค้างที่ 25 ตลอด ลำดับ MUL ก่อนช่วยให้ค่ากลางใหญ่พอที่ DIV จะให้ผลที่มีความหมาย

M8013 คืออะไร?

Special bit ของ Samkoon (Mitsubishi compatible) = 1Hz clock — ON 0.5s/OFF 0.5s ตลอด LDP M8013 = ขอบขึ้นทุก 1 วินาที ใช้นับ elapsed time ใน timer แบบยืดหยุ่นได้นาน (TON ใหญ่สุด 32-bit ผ่าน TONS)

ใช้ EPID แทน On/Off ดีไหม?

EPID นิ่งกว่า, accurate กว่า — แต่ต้อง analog output (PWY หรือ analog module) + tuning ที่ปรับยาก ตัวอย่างนี้ใช้ On/Off เพื่อความเรียบง่าย — ในงานจริงเตาอบใหญ่ใช้ EPID + SSR/Phase-angle drive ฮีตเตอร์

Profile เปลี่ยนช่วง runtime ได้ไหม?

ใส่ K constant ใน MUL/DIV ทำให้ profile fixed ถ้าต้องการ recipe ให้แทน K ด้วย D registers (เช่น K300 → D500) แล้ว HMI เขียนค่าเข้า D500 = duration ของ segment 1 (วินาที), D501 = SP_END_1, ฯลฯ

วิธีนำเข้าไฟล์ใน SamSoar2022

  1. ดาวน์โหลดไฟล์ ramp-soak-profile.csv จากแท็บ CSV ด้านบน
  2. เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
  3. เมนู File → Import → เลือกไฟล์ .csv ที่เพิ่งดาวน์โหลด
  4. กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
  5. ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC