🚀 แบบทดสอบสำหรับตำแหน่ง Industrial Application Developer (Junior Position)
🚀

แบบทดสอบสำหรับตำแหน่ง Industrial Application Developer & IIoT Engineer (Junior Position)

วัตถุประสงค์ของการทดสอบ:

การทดสอบนี้มีจุดมุ่งหมายเพื่อประเมินความสามารถของผู้สมัครในด้านการใช้เทคโนโลยี IIoT และการจัดการข้อมูลจากอุปกรณ์อุตสาหกรรมโดยใช้ซอฟต์แวร์ต่างๆ ในการเชื่อมต่อข้อมูลและสร้างการแสดงผลด้วย dashboard.

Note: This test is not about finishing 100% perfectly. We want to see how you think, solve problems, and present your approach.

Part 1: Industrial Data Connectivity & Dashboarding

1.1 การเชื่อมต่อกับ OPC UA

เป้าหมาย: เชื่อมต่อกับเซิร์ฟเวอร์ OPC UA และเข้าถึงข้อมูลจากอุปกรณ์อุตสาหกรรมที่ระบุ

รายละเอียดการเชื่อมต่อ:

  • Server Discovery URL: opc.tcp://54.255.74.210:3005/discovery

  • OPC-UA Server URL: opc.tcp://54.255.74.210:3005

  • Username/Password: Appomaxopc / Appomax2025

  • Security Policy: ไม่มีการใช้ Certificate (No certificate required, อาจต้องเพิ่ม Certificate ของเซิร์ฟเวอร์ลงใน Trusted Store เพื่อให้สามารถเชื่อมต่อได้)

  • การเข้ารหัสความปลอดภัย: None (ไม่มีการเข้ารหัส)

ซอฟต์แวร์ที่ใช้:

  • Ignition by Inductive Automation

    ดาวน์โหลดได้ที่: https://inductiveautomation.com/downloads/

    (เลือก Ignition เวอร์ชันล่าสุด, รองรับ Windows/Linux/Mac/Docker)

1.2 ขั้นตอนการเชื่อมต่อ OPC-UA Server บน Ignition

  • ติดตั้ง Ignition

    • ดาวน์โหลด installer และติดตั้งตาม OS ของคุณ

    • เปิด Gateway ผ่าน browser (http://localhost:8088)

  • เข้าสู่ Gateway Web Interface

  • สร้างการเชื่อมต่อใหม่

    • Click Create new OPC Connection

    • เลือก Add OPC UA Connection

  • กรอกข้อมูลการเชื่อมต่อ

    • Endpoint URL: opc.tcp://54.255.74.210:3005

    • Username/Password: Appomaxopc / Appomax2025

    • Security Policy: None

  • Save และ Verify Connection

    • กด Save

    • ตรวจสอบว่า Status = Connected

  • ตรวจสอบ Tag Browser

    • เปิด Ignition Designer → Project ของคุณ

    • ไปที่ Tag Browser → OPC UA Server

    • ค้นหา Tag Path ที่กำหนดในโจทย์ (Energy, HVAC, Production)

    • Confirm ว่าอ่านค่าได้จริง

หมายเหตุ:

  • โครงสร้างแท็ก OPC UA (รูปภาพแนบมาพร้อมแบบทดสอบ)

  • ตรวจสอบการเข้าถึงแท็กและค่าข้อมูลให้ถูกต้อง

1.3 การสร้างโมเดลข้อมูลและการคำนวณ (Industrial Data Connectivity & Dashboarding)

Analysis Objectives

ผู้เข้าสอบต้องนำข้อมูลจาก OPC-UA Server ที่เชื่อมต่อแล้ว มาทำการเก็บใน Historian และสร้าง Dashboard เพื่อแสดงผล โดยมีเป้าหมายหลักดังนี้:

  1. Energy Management – วิเคราะห์การใช้พลังงานไฟฟ้าโดยคำนวณค่าเฉลี่ย (Average kW) ทุก 15 นาที และดูแนวโน้มย้อนหลัง 3 ชั่วโมง

  2. Temperature Monitoring – ตรวจสอบสภาวะการทำงานของ Chiller Motor โดยแสดงค่าอุณหภูมิย้อนหลัง 24 ชั่วโมง เพื่อหาความผิดปกติ

  3. Production Monitoring – ประเมินผลผลิตจริงรายชั่วโมง โดยคำนวณ delta ของ cumulative counter และรวมยอดผลิตทั้งหมดย้อนหลัง 24 ชั่วโมง

สิ่งที่วัดจากการทดสอบ
  • ความสามารถในการ Browse Tags และนำข้อมูลเข้าสู่ระบบ Ignition

  • การ Configure Tag Historian เพื่อเก็บข้อมูลย้อนหลัง

  • การ Query ข้อมูลด้วย Power Chart และแสดงผล Visualization

  • การเข้าใจลักษณะข้อมูล (เช่น cumulative counter) และการประมวลผล (delta, average, raw)

  • ความสามารถในการใช้ วิธีอื่น (Scripting / Expression Tag) เพื่อแก้ปัญหาข้อมูล

รูปแบบของ Visualization:
  1. Energy Management

    • แสดงค่า kW เฉลี่ยทุก 15 นาที ของ MDB Power Meter C01

    • แสดงข้อมูลย้อนหลัง 3 ชั่วโมง ในรูปแบบกราฟ

    • Tag Path: /Compomax HQ/Energy/Monitoring/MDB/C01/EqvActivePower

  2. Temperature Monitoring

    • แสดงค่าอุณหภูมิของ Motor 3 ย้อนหลัง 24 ชั่วโมง

    • Tag Path: /Compomax HQ/HVAC/Chiller/Motor 3/Vibration sensor M3/VB3/TempertureC

  3. Production Monitoring

    • นับผลผลิตของเครื่องจักรในกลุ่ม G7 ย้อนหลัง 24 ชั่วโมงแบบรายชั่วโมง

    • Tag Path: Compomax HQ/Machine Monitoring/Forming/G7/FMXXX/Counter (FMXXX คือชื่อเครื่อง e.g.FM055)

    • Visualization ที่ต้องมี:

      • Gauge Chart: แสดงผลรวมของค่าผลผลิต

      • Trend Graph หรือ Bar Graph: แสดงแนวโน้มค่าผลผลิตย้อนหลัง

Step 0: ดาวน์โหลดและติดตั้ง Ignition Designer IDE

  1. ที่หน้า Gateway ให้เลือก Download Designer Launcher (อยู่ในเมนู Quick Links)

  2. ติดตั้ง Designer Launcher → เมื่อเปิดจะเจอ Add Designer Connection

  3. กรอกข้อมูลการเชื่อมต่อ:

    • Host: localhost หรือ IP ของ Gateway

    • Port: 8088 (default)

    • User/Password: admin / password (ค่า default, หรือ set ใหม่ตอนติดตั้ง)

  4. กด Launch Designer → จะเปิด IDE (Ignition Designer)

Step 1: เลือก Tags จาก OPC-UA Server

  1. เปิด Ignition Designer → ไปที่ Tag Browser (แถบด้านซ้ายล่าง)

  2. คลิกขวาที่ OPC UA Server → เลือก Browse OPC Server

  3. จะเห็น Tree Structure ของ Tags ที่ Server expose ออกมา

  4. Navigate ไปตาม Path ที่กำหนด:

    • /Compomax HQ/Energy/Monitoring/MDB/C01/EqvActivePower

    • /Compomax HQ/HVAC/Chiller/Motor 3/Vibration sensor M3/VB3/TempertureC

    • Compomax HQ/Machine Monitoring/Forming/G7/FMXXX/Counter (เช่น FM055)

  5. คลิกที่ Tag → กด Drag & Drop มายังโฟลเดอร์ Tags → Default Tag Provider

  6. ตอนนี้ Tag จะถูกบันทึกใน Ignition Designer และสามารถนำไปใช้งานต่อได้

Step 2: เก็บข้อมูลลง Tag Historian

  1. คลิกขวาที่ Tag ใน Default Tag Provider → เลือก Edit Tag

  2. ไปที่แท็บ History

  3. ติ๊ก Enable History

  4. ตั้งค่าดังนี้:

    • Database: เลือก DB ที่ config ไว้ใน Gateway (เช่น IgnitionDB)

    • Storage Provider: default (Ignition DB store)

    • Sample Mode: Periodic

    • Sample Rate:

      • Energy/Temperature → 1 นาที

      • Production Counter → 1 นาที

    • Deadband: (ถ้าอยากลดการเก็บข้อมูล) เช่น Analog = 0.1

  5. กด OK / Save

  6. Tag จะเริ่มถูกเก็บใน Historian DB → สามารถ query ได้ผ่าน Tag History Binding หรือ system.tag.queryTagHistory


Step 3: Industrial Data Connectivity & Dashboarding

ผู้เข้าสอบต้องนำข้อมูลจาก OPC-UA Server ที่เชื่อมต่อแล้ว มาทำการเก็บใน Historian และสร้าง Dashboard เพื่อแสดงผลการวิเคราะห์

Energy Management

Tag Path: /Compomax HQ/Energy/Monitoring/MDB/C01/EqvActivePower

เป้าหมาย:

  • แสดงค่า kW เฉลี่ยทุก 15 นาที

  • ย้อนหลัง 3 ชั่วโมง

ขั้นตอนตัวอย่าง:

  1. Browse OPC-UA → Drag Tag EqvActivePower ลงใน Tag Browser (default provider)

  2. คลิกขวา → Edit Tag → เปิดใช้งาน Tag History (Enable History)

    • Sample Mode: Periodic

    • Sample Rate: 1 นาที

    • Database: เลือก DB ที่กำหนดไว้ (IgnitionDB)

  3. เปิด Perspective → View → ใส่ Power Chart Component

  4. Run Session (Preview) → กด + Add Tag บน Power Chart

  5. เลือก Tag [default]EqvActivePower

  6. ตั้งค่า:

    • Aggregation = Average

    • Interval = 15 minutes

    • Time Range = Last 3 hours

  7. ตรวจสอบว่าเส้นกราฟแสดงค่าเฉลี่ย 15 นาทีถูกต้อง

Temperature Monitoring

Tag Path: /Compomax HQ/HVAC/Chiller/Motor 3/Vibration sensor M3/VB3/TempertureC

เป้าหมาย:

  • แสดงค่าอุณหภูมิย้อนหลัง 24 ชั่วโมง

Production Monitoring

Tag Path: Compomax HQ/Machine Monitoring/Forming/G7/FMXXX/Counter (เช่น FM055)

หมายเหตุ: Counter เป็น cumulative (สะสม) ต้องหาค่า delta รายช่วงเวลาเพื่อแสดงผลผลิตจริง

เป้าหมาย:

  • นับผลผลิตรายชั่วโมง

  • แสดงย้อนหลัง 24 ชั่วโมง

Strategy Hint – Production Monitoring (Delta Counter)

โจทย์นี้ต้องการให้ผู้สมัครคำนวณ Hourly Production จากค่า Counter ซึ่งเป็น Cumulative Counter (ค่าจะเพิ่มขึ้นเรื่อยๆ ไม่ใช่ค่าต่อชั่วโมงโดยตรง)

ดังนั้นการแสดงผลต้องมีการ derive ค่า Delta ต่อชั่วโมง จากข้อมูลใน Tag Historian ไม่ใช่ใช้ค่า Counter ตรงๆ

แนวทางที่แนะนำ (Recommended Approach)

ให้ใช้ Scripting (Python) ร่วมกับ system.tag.queryTagHistory เพื่อดึงข้อมูลย้อนหลัง 24 ชั่วโมง แล้วคำนวณค่า Delta เอง

หลักการที่ควรพิจารณา:

  • ใช้ intervalHours=1 เพื่อแบ่งข้อมูลเป็นรายชั่วโมง

  • ใช้ aggregationMode="LastValue" เพื่อ represent ค่า Counter ณ สิ้นชั่วโมง

  • คำนวณค่า Production ต่อชั่วโมงโดยใช้:

    Hourly Delta = Current Hour Value - Previous Hour Value

สิ่งที่ต้องระวัง
  • aggregationMode="Range" จะให้ค่า max - min ภายในช่วงเวลา ซึ่งอาจไม่ตรงกับ production จริง หากมี:

    • counter reset

    • missing data

    • boundary ไม่ตรงชั่วโมง

  • Historian query ของ Ignition เป็น inclusive endDate ดังนั้นควรจัด alignment ของเวลาให้ถูกต้อง

  • อาจเกิดกรณีค่า delta เป็นลบ (negative) จาก counter reset หรือ rollover

Handling Logic ที่คาดหวัง

ผู้สมัครควรพิจารณา logic เพิ่มเติม เช่น:

  • ถ้า delta < 0 → treat เป็น reset (เช่น set เป็น 0 หรือ handle ตาม logic ที่อธิบายได้)

  • handle null / bad quality value

  • ensure ข้อมูลครบ 24 ชั่วโมง

Output ที่คาดหวัง
  • Dataset หรือ data structure ที่มี:

    • timestamp (รายชั่วโมง)

    • counter value

    • hourly production (delta)

  • Visualization เช่น:

    • Bar Chart (Hourly Production)

    • KPI / Gauge (Total 24 ชั่วโมง)

Deliverables (สิ่งที่ต้องส่ง)

ผู้เข้าสอบต้องสร้าง Dashboard ใน Perspective ที่ประกอบด้วย:

  1. Power Chart – Energy Management

    • แสดงค่า EqvActivePower

    • Aggregation = Average (15 minutes)

    • Time Range = Last 3 hours

  2. Power Chart – Temperature Monitoring

    • แสดงค่า TemperatureC (Chiller Motor 3)

    • Aggregation = Raw (หรือ Min/Max)

    • Time Range = Last 24 hours

  3. Production Monitoring (Challenge)

    • แสดง Hourly Delta ของ Counter (แทนค่า cumulative)

    • Time Range = Last 24 hours

    • Candidate สามารถเลือกวิธีการทำได้ Hint:

      • Script (system.tag.queryTagHistory)

      • Expression Tag (diff / rateOfChange)

    • อธิบายว่าทำไมเลือกวิธีนี้ และผลลัพธ์ได้อะไร

Part 2: SQL Query Debugging & Analytics

2.1 Setup Instructions

โปรดทำขั้นตอน Setup ดังนี้

  1. Import the Project ที่ให้นี้  

  2. Create a database connection ชื่อ TestDB

    • Type: SQLite

    • Connection URL:

      jdbc:sqlite:${data}/IIoT_Engineer/TestDB.db
  3. Create necessary tables โดยรัน SQL ต่อไปนี้ใน TestDB

    CREATE TABLE IF NOT EXISTS product (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    machine_name TEXT,
    counter_value INTEGER,
    timestamp TEXT,
    UNIQUE(machine_name, timestamp)
    );

    CREATE TABLE IF NOT EXISTS vibration (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT,
    temperature REAL,
    timestamp TEXT,
    UNIQUE(name, timestamp)
    );
  4. Verify tables ถูกสร้างครบ

    • product: id, machine_name, counter_value, timestamp

    • vibration: id, name, temperature, timestamp

  5. Insert demo data

    • Launch Perspective → Tools → Launch Perspective → Launch Session

    • ไปที่แท็บ Insert Data

    • กดปุ่ม + เพื่อเพิ่มแถว

    • ตรวจว่า sample data แสดงในตารางสำเร็จ

2.2 Instructions (How to Debug)

สำหรับ Named Queries ต่อไปนี้ (มี suffix _Test อยู่ใน Ignition):

  1. เปิด Named Query ใน Ignition Designer

  2. Analyze โค้ด SQL: ตรวจ logic / syntax / formatting / structure

  3. Fix ให้ผลลัพธ์ตรง Expected Output Format ที่ระบุ

  4. จัดทำ Submission (SQL Debugging Report) ระบุ:

    • What was wrong (พบปัญหาอะไร)

    • What you changed (แก้ไขอะไร)

    • (Optional) The corrected query (SQL หลังแก้)

2.3 Production Queries

HourlyMachineCountByName_Test

  • Task: ให้คืนผล 1 แถวต่อชั่วโมง รวม counter_value ของเครื่องที่เลือก ด้วยพารามิเตอร์ :mach_name

  • Expected Columns: t_stamp, total_count

HourlyProductionCountByMachine_Test

  • Task: ให้คืนผล 1 แถวต่อชั่วโมง และ pivot รวม count ของแต่ละเครื่องเป็น หลายคอลัมน์

  • Expected Columns: t_stamp, <Machine_A>, <Machine_B>, …

ProductionSummaryData_Test

  • Task: คืนค่า Summary ระดับระบบ

    1. total production count (all time)

    2. number of distinct machines

    3. production count from the last hour

  • Expected Columns: total_count, total_machines, last_hour_count

TotalProductionByMachine_Test

  • Task: รวมผลผลิต ต่อเครื่อง (ไม่มี time filter)

  • Expected Columns: machine_name, total_count

2.4 Vibration Queries

HourlyAvgTemperaturePivot_Test

  • Task: คืนค่า อุณหภูมิเฉลี่ยรายชั่วโมง ต่อ sensor และ pivot เป็นคอลัมน์ (Sensor_X, Sensor_Y, …)

  • Expected Columns: t_stamp, Sensor_X, Sensor_Y, …

HourlyTemperatureStatsBySensor_Test

  • Task: คืนค่า min/avg/max รายชั่วโมง สำหรับ sensor เฉพาะ (parameter :sensor_name)

  • Expected Columns: t_stamp, min_temp, avg_temp, max_temp

  • VibrationSummaryData_Test

    • Task: คืนค่า Summary รวมของ vibration:

      • overall average temperature

      • minimum temperature

      • maximum temperature

      • total number of distinct sensors

    • Expected Columns: avg_temperature, min_temperature, max_temperature, total_sensors

Full Instruction in English:

2.5 Deliverables (สิ่งที่ต้องส่ง)

  • Video Presentation: อธิบายแนวทาง Debug และสาธิตผลลัพธ์หลังแก้สำเร็จ (screen recording สั้นและชัด)

  • SQL Debugging Report (PDF/Doc): สรุป Bug → Fix → Corrected SQL สำหรับทุก Named Query

  • Screenshots: ผลลัพธ์ตาราง/กราฟหลังแก้ไข

  • SQL Files: ไฟล์ .sql ของ query เวอร์ชันที่แก้แล้ว

2.6 เกณฑ์การให้คะแนน (Scoring)

  • Correctness ของผลลัพธ์ตาม Expected Output

  • Debugging Rigor: ระบุสาเหตุ, อธิบายการแก้, ใช้ SQL Functions เหมาะสม

  • Readability: โครงสร้าง SQL/CTE/Formatting ชัดเจน

  • Reusability: ใช้พารามิเตอร์ (เช่น :mach_name, :sensor_name) และ time window ได้ยืดหยุ่น

2.7 ข้อแนะนำเชิงเทคนิค (Hints)

  • ใช้ DATE_TRUNC / STRFTIME (SQLite) เพื่อ Group รายชั่วโมง

  • ระวัง NULL handling หลัง pivot/aggregate

  • ตรวจ time zone ของ timestamp ให้สอดคล้อง sample data

  • ใช้ UNIQUE constraint (ใน schema) เพื่อหลีกเลี่ยง duplicate records ตอน insert ทดสอบ


คำแนะนำสำหรับการทำและการส่งแบบทดสอบ

เมื่อทำแบบทดสอบเสร็จแล้ว กรุณาส่งผลลัพธ์ตามรายละเอียดดังนี้:

1. Video Presentation (การนำเสนอผลงาน)

  • บันทึกวิดีโอการนำเสนอผลงานของคุณ (สามารถใช้ Google Meet, Zoom recording, OBS หรือวิธีใดก็ได้)

  • ควรอธิบายสิ่งต่อไปนี้:

    Overview ของงานที่ทำ – คุณเลือกทำอะไรในแบบทดสอบ และทำไปได้ถึงไหน

    Demo การทำงาน – แสดงให้เห็นว่าโซลูชันที่คุณสร้างสามารถทำงานได้จริง

    SQL Query & Data Processing – อธิบาย logic หรือการประมวลผลข้อมูลที่คุณทำ

    Challenges & Learnings – ปัญหาที่พบ วิธีแก้ไข และสิ่งที่ได้เรียนรู้

หมายเหตุ: คุณไม่จำเป็นต้องทำครบ 100% แต่ขอให้แสดง วิธีคิด, วิธีแก้ปัญหา, และสิ่งที่คุณเรียนรู้

หากคุณทำได้ เกินจาก instruction เช่นใช้ Script, Expression, หรือ Visualization เพิ่มเติม → ถือเป็นข้อดีและเรายินดีเห็น

การส่ง:

อัปโหลดวิดีโอไปยัง Google Drive, YouTube (Unlisted) หรือ Dropbox และแนบลิงก์มาในการส่งงาน

2. Documentation (เอกสารอธิบายงาน)

ผู้เข้าสอบต้องแนบเอกสารที่อธิบายการทำงานของโซลูชัน ประกอบไปด้วย:

1. รายงานการทำงาน (Project Report) – (PDF หรือ Word Document)

ควรมีหัวข้อ:

  • Introduction – วัตถุประสงค์ของงาน

  • Tools & Software Used – ซอฟต์แวร์/เครื่องมือที่เลือก และเหตุผล

  • SQL Query & Processing Explanation – อธิบายการคำนวณหรือ query ที่ใช้

  • System Architecture – โครงสร้างของระบบที่คุณออกแบบ

  • Challenges & Solutions – ปัญหาและวิธีแก้ไข

  • Conclusion – สิ่งที่คุณเรียนรู้

2. Screenshot & Logs

  • ภาพหน้าจอผลลัพธ์จาก SQL Query

  • ภาพ Dashboard หรือ Visualization ที่ทำได้

  • Logs หรือ Output ที่แสดงว่าโค้ดทำงานถูกต้อง

3. SQL Query & Code Files

  • ไฟล์ .sql ของ query ที่ใช้

  • ไฟล์โค้ดที่ใช้ (Node-RED, Python, Ignition Script, หรืออื่น ๆ ถ้ามี)

3. วิธีการส่งไฟล์

  • อัปโหลดเอกสารและไฟล์ไปที่ Google Drive, Dropbox, หรือ OneDrive

  • ตั้งค่าเป็น Anyone with the link can view

  • ส่งลิงก์ไฟล์ + วิดีโอ ไปยังอีเมลของผู้คุมสอบ หรือผ่านแบบฟอร์มที่กำหนด

4. Deadline

  • กรุณาส่งภายใน 7 วัน หลังจากได้รับแบบทดสอบ

5. ข้อแนะนำเพิ่มเติม

  • เราให้ความสำคัญกับ วิธีคิด, เหตุผล, และการอธิบาย มากกว่าการทำเสร็จสมบูรณ์

  • คุณสามารถเลือกทำบางส่วน หรือทำได้มากน้อยตามเวลาและความถนัด

  • หากคุณมี idea หรือ skill ที่สามารถ ทำเกิน instruction ได้ เช่น เพิ่มการใช้ Script, Expression, หรือสร้าง Visualization ที่ advance ขึ้น → ยินดีและจะนับเป็นข้อดี

  • กรุณาใส่ ความคิดเห็นส่วนตัว ว่าทำไมเลือกวิธีนั้น และคุณคิดว่า approach ของคุณมีข้อดีอย่างไร

💡 เป้าหมายของแบบทดสอบ คือการวัดความสามารถในการ

  • วิเคราะห์ (Analysis)

  • ออกแบบ (Design)

  • นำเสนอแนวคิด (Presentation)

    เกี่ยวกับ Industrial IoT Data Processing

📥 Good Luck! 🚀 – Vikan Chirawatpongsa


🚀 Additional Instruction – (OPTIONAL) Mid-Level Engineering only!

I have added a Mid-Level Engineering Test below. If you are hoping to start at a higher level than junior, do go ahead and perform the test below as well.

โจทย์นี้ถูกออกแบบมาเพื่อประเมินความสามารถในระดับ Mid-Level Industrial Application Developer / IIoT Engineer โดยจะเน้นการ ออกแบบ (Design) และ วิเคราะห์ (Analysis) มากกว่าการทำตามขั้นตอนเพียงอย่างเดียว

🎯 Objective

ผู้สมัครต้องสร้าง Machine Utilisation Dashboard โดยใช้ข้อมูลจาก OPC-UA Server ครอบคลุมขั้นตอน:

Connect → Collect → Store → Analyse → Visualise

เพื่อวิเคราะห์ว่าเครื่องจักรถูกใช้งาน (utilised) อย่างมีประสิทธิภาพหรือไม่ โดยเปรียบเทียบ:

  • Running Time

  • Production Output

  • Production Yield (Output / Runtime)

⚙️ Scope of Work

1. Data Modelling (UDT)

  • ออกแบบ UDT (User Defined Type) สำหรับ Machine

  • UDT ต้องสามารถนำไปสร้าง instance ได้อย่างน้อย 10 machines

  • โครงสร้างควรมีอย่างน้อย:

    • MachineName (Parameter)

    • StateCode (OPC Tag)

    • Counter (OPC Tag)

2. Data Collection & Storage

ให้ทำการเก็บข้อมูล Machine State ลง SQL Database โดยใช้วิธี:

Recommended: Scripting (Python) → Insert into SQL on state change

แนวทางที่คาดหวัง:

  • Detect การเปลี่ยนแปลงของ StateCode

  • บันทึก event ลง table เช่น:

    • machine_name

    • timestamp

    • state_code

    • is_running

    • counter_value

หมายเหตุ:

  • สามารถใช้วิธีอื่นได้ (เช่น Historian / Transaction Group) แต่ต้อง อธิบายเหตุผลและข้อจำกัด

3. State Logic

กำหนด logic ดังนี้:

  • ถ้า StateCode ขึ้นต้นด้วย 801 → ถือว่าเป็น Running

  • ค่าอื่นทั้งหมด → ถือว่าเป็น Not Running

ผู้สมัครต้อง derive ค่า:

is_running = 1 / 0

4. Data Analysis

ให้วิเคราะห์ข้อมูลในรูปแบบ Time Window (รายวัน / Daily)

โดยต้องคำนวณอย่างน้อย:

  • Running Time

  • Machine Utilisation %

    = Running Time / Total Time in Window × 100

  • Production Output

    (จาก delta ของ cumulative counter)

  • Production Yield

    = Output / Runtime

⚠️ Important:

  • ต้อง handle กรณี counter reset (delta < 0)

  • ต้อง ensure ว่าการคำนวณมีความสมเหตุสมผล

5. Visualisation (Dashboard)

สร้าง Dashboard ที่สามารถวิเคราะห์และเปรียบเทียบเครื่องจักรได้อย่างน้อย 10 เครื่อง โดยควรมี:

🔹 Fleet Summary (Overview)

  • Average Utilisation %

  • Total Running Time

  • Total Production Output

  • Average Yield

🔹 Machine Comparison

  • Table หรือ Chart ที่เปรียบเทียบ:

    • Machine

    • Running Time

    • Utilisation %

    • Output

    • Yield

🔹 Trend Analysis

  • Daily Running Time / Utilisation

  • Daily Production Output

🧠 Design Consideration (สำคัญ)

ผู้สมัครควรอธิบายใน Documentation:

  • เลือกวิธีเก็บข้อมูล (Storage Method) เพราะอะไร

  • วิธีคำนวณ runtime จาก state change

  • วิธี handle missing data หรือ data inconsistency

  • ถ้ามีจำนวนเครื่องมากขึ้น (เช่น 100 machines) จะออกแบบระบบอย่างไร

📦 Deliverables (เพิ่มเติม)

นอกเหนือจาก Junior Test:

  • Dashboard (Perspective)

  • SQL Table Design (Schema)

  • Script ที่ใช้ในการเก็บข้อมูล

  • Documentation อธิบาย:

    • Design Approach

    • Data Flow

    • Assumptions & Limitations

💡 Evaluation Focus

เราจะประเมินจาก:

  • ความสามารถในการ ออกแบบระบบ (System Design)

  • ความเข้าใจเรื่อง Time-series Data & Machine State

  • ความถูกต้องของ Data Processing Logic

  • ความสามารถในการ เชื่อมโยง Data → Insight

  • ความชัดเจนในการอธิบายแนวคิด

🔍 Note

โจทย์นี้ไม่มีคำตอบที่ “ถูกต้องเพียงแบบเดียว”

สิ่งที่เราอยากเห็นคือ:

  • วิธีคิด (Thinking Process)

  • เหตุผลในการเลือก approach

  • ความสามารถในการออกแบบ solution ที่ scalable และ maintainable

ถ้าคุณสามารถทำส่วนนี้ได้ดี จะสะท้อนว่าคุณพร้อมสำหรับบทบาทในระดับ Mid-Level หรือสูงกว่า 🚀