Barcode Scanner ส่งข้อมูลเข้า PLC ผ่าน RS232/RS485
รับ ASCII barcode จาก scanner ผ่าน RS232/RS485 — เก็บใน D buffer, แยก string เมื่อเจอ CR (carriage return), ส่งไป production logic
หลักการ
Barcode scanner industrial ส่วนใหญ่ส่งข้อมูลออกผ่าน:
- RS232 (1-to-1 ตรงๆ ไป COM port)
- RS485 (multi-drop)
- USB-Serial (เห็นเป็น COM virtual)
- TCP/IP (Cognex, Datalogic รุ่นใหม่)
ตัวอย่างนี้รับผ่าน RS232 / RS485 ASCII ที่ Samkoon PLC รองรับ ผ่านคำสั่ง RS (Receive Serial)
คำสั่ง RS
RS K1 D300 K20 D330
│ │ │ │
│ │ │ └─ Receive flag D-register
│ │ └───── Max length (chars)
│ └────────── Receive buffer start (D300, D301, ... D309)
└───────────── COM port (K1 = COM1, K2 = COM2)
PLC จะ:
- รอ ASCII bytes จาก COM
- เก็บ 2 ตัวอักษรต่อ D (เช่น D300 บน byte = 'A', low byte = 'B')
- เพิ่ม D330 (received count) ทุก byte ที่ได้
- Trigger ขอบขาขึ้นของ M8160 (received completion flag) เมื่อหยุดรับ (timeout หรือเจอ terminator)
ขั้นตอนการทำงาน
Scanner ยิง barcode "1234567890"
↓
Scanner ส่ง "1234567890\r\n" (CR LF terminator)
↓
PLC RS เริ่ม buffer ใน D300
D300 = '21' (low='1', high='2' — little-endian)
D301 = '43' (low='3', high='4')
D302 = '65'
D303 = '87'
D304 = '09' (low='0', high='9')
D305 = (CR) … (LF) ในไบต์ถัดไป
↓
M8160 (RS done flag) ↑ rising edge
↓
Logic: D330 (length) = 12 (รวม CR LF)
↓
Decision:
✓ มี barcode ใหม่ → SET M0 (process)
✗ Length = 0 → noise / partial → ไม่ทำอะไร
ตัวอย่างนี้ทำอะไรเพิ่ม
หลังรับ barcode สำเร็จ:
- Match กับ recipe — ถ้า barcode = "PROD-A" → set recipe 1
- เพิ่ม count — D400 (production count) +1
- Reset buffer — เตรียมรับครั้งถัดไป
Logic Flow
First scan
↓
RS K1 D300 K20 D330 (start receiving)
↓
M8160↑ (RS complete flag)
↓
ถ้า D330 > 5 (length เกิน 5 = ของจริง ไม่ใช่ noise):
✓ INC D400 (production count)
✓ MOV D300 D500 (เก็บ barcode ล่าสุด)
✓ SET M0 (process trigger)
↓
Reset RS — เริ่มรอ frame ถัดไป (RST D330, RST M8160)
ตั้งค่า COM ใน IDE
ก่อนใช้คำสั่ง RS ต้องตั้งใน SamSoar2022:
- Project → Configuration → COM1 (or COM2)
- Mode: Free Protocol (ไม่ใช่ Modbus)
- Baud Rate: 9600 (ตรวจคู่มือ scanner — มาตรฐาน 9600 N 8 1)
- Parity: None, Data: 8, Stop: 1
Scanner Setup
ที่ scanner ต้องตั้ง:
- Output mode: Continuous (ส่งทันทีหลัง scan)
- Postfix / Suffix: \r\n หรือ \r อย่างใดอย่างหนึ่ง
- Code type: ตามรหัสที่ใช้ (Code128, EAN-13, QR)
ขยายเพิ่ม
- Lookup table — เก็บ recipe matching ใน D700-D799 (key) + D800-D899 (recipe)
- Database — ส่ง barcode ผ่าน Modbus ไป PC → ดึงข้อมูลจาก SQL
- Reject — ถ้า barcode ไม่อยู่ใน whitelist → push divert solenoid (Y3)
- Print label — ใช้ MQTT label designer ทำ label จาก barcode → printer
โปรแกรม PLC
I/O Assignment
| Address | Role | Note |
|---|---|---|
| X1 | ปุ่ม Reset เคาน์เตอร์ (NO) | |
| Y0 | Trigger pulse (100ms) — ออกทุกครั้งที่ scan ถูกต้อง |
Parameters ที่ปรับได้
D300-D309default: 0Buffer รับข้อมูล (สูงสุด 20 ตัวอักษร) — แต่ละ D = 2 ASCII bytes (low=ตัวแรก, high=ตัวที่สอง)
D330default: 0จำนวนไบต์ที่รับ (0 ถ้าไม่มีข้อมูล, > 0 หลัง RS เสร็จ)
D400default: 0จำนวน scan ทั้งหมดในกะนี้
D500-D509default: —Barcode ล่าสุด (copy ผ่าน FMOV) — สำหรับโชว์บน HMI หรือประมวลผลต่อ
M0default: 0Flag barcode ใหม่ — ติดเมื่อ scan ถูกต้อง, auto-clear หลัง 100ms
M8160default: 0Special bit — Flag RS complete: PLC จะ SET; ladder ต้อง RST หลังใช้งาน
อุปกรณ์ที่แนะนำ
คำถามที่พบบ่อย
ทำไม buffer เป็น D ไม่ใช่ string?
PLC ไม่มี string type — เก็บข้อมูลใน 16-bit word ASCII 1 char = 8-bit, เก็บได้ 2 ตัวต่อ D D300 = 0x4131 (low=0x31='1', high=0x41='A') = 'A1' ใช้ FMOV / RD3A เพื่อ copy ไป HMI ที่รู้จัก ASCII
Scanner ใช้ Code128 ได้ไหม?
ได้ ทุก scanner รุ่นใหม่ — ใช้ ASCII output Free Protocol ของ PLC รับ ASCII ทั้งหมด (0x00-0xFF) ปัญหาเดียวอาจเป็น Code128 ที่มี non-printable chars (FNC1, etc.) — แก้โดยตั้ง scanner ให้ Strip Control Chars
ถ้า scanner ส่ง 30 chars แต่ buffer 20 จะเกิดอะไร?
RS limit = 20 — ส่วนเกินถูกตัดทิ้ง สามารถเพิ่มเป็น K30 ใน RS instruction และเพิ่ม buffer D300-D314 (15 word = 30 chars) ใน FMOV ก็แก้ไปตาม
ทำไมต้อง RST M8160?
M8160 = RS complete flag — PLC SET เมื่อรับเสร็จ, **ไม่ AUTO-RST** ถ้าไม่ RST → ครั้งถัดไป LDP M8160 ไม่เกิดขอบขาขึ้น (ค้างอยู่ที่ ON) → ladder ไม่เห็นว่ามี barcode ใหม่ ต้อง RST หลัง consume เพื่อ ready รับครั้งถัดไป
เอกสารที่เกี่ยวข้อง
วิธีนำเข้าไฟล์ใน SamSoar2022
- ดาวน์โหลดไฟล์
barcode-scanner-input.csvจากแท็บ CSV ด้านบน - เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
- เมนู File → Import → เลือกไฟล์
.csvที่เพิ่งดาวน์โหลด - กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
- ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC
