ในแต่ละ scan cycle ของ PLC นั้นประกอบด้วยการเขียน outputs, อ่าน inputs, ทำงานตามโปรแกรมที่ได้เขียนไว้ และทำในส่วนของ system maintenance หรือ background processing
ภายใต้เงื่อนไขปกติ ทั้ง digital และ analog I/O จะถูก update ข้อมูลพร้อมๆกันในแต่ละ scan cycle โดยอาศัย internal memory ที่เรียกว่า process image ดังนั้น process image จะประกอบด้วยการจับสัญญาณอย่างรวดเร็ว (snapshot) ของ inputs และ outputs จริงๆของ CPU, signal board และ signal module ต่างๆ
- CPU จะทำการอ่าน inputs จริงๆ ก่อนที่จะทำการ execute user program และเก็บค่า input เหล่านี้ไว้ใน process image input area เพื่อให้มั่นใจได้ว่าค่าต่างๆเหล่านี้จะยังคงค่าเดิมตลอดการ execution ของ user instructions
- CPU ทำงานตาม logic ที่เขียนไว้ใน user instructions และทำการ update ค่า output ใน process image output area แทนที่จะเขียนค่าลงไปที่ outputs จริงๆโดยตรง
- หลังจากที่ทำคำสั่งต่างๆใน user program แล้ว CPU จะทำการเขียนค่า output จาก process image output area ไปยัง outputs จริงๆ
Warm restart : จะทำการ initialize all non-retentive system และ user data แต่ไม่ได้รวมถึงการทำ memory reset
Memory reset : คือการทำ clear all work memory, clear retentive & non-retentive memory area, copy load memory to work memory และ set output ให้เป็นสถานะที่ตั้งไว้ที่ “Reaction to CPU STOP” (Properties -> General -> Digital outputs)
OBs : (Organization Blocks) เอาไว้ใช้สำหรับเขียนโปรแกรม OB บางตัวเอาไว้ใช้ในหน้าที่พิเศษตาม event ต่างๆ เช่น interrupt เป็นต้น แต่เราก็สามารถสร้าง OB สำหรับ custom event ได้เช่นกัน
- OB ไม่สามารถเรียกใช้ OB กันเองได้ และไม่สามารถถูกเรียกโดย FC หรือ FB ได้ เฉพาะ event เท่านั้นที่สามารถเรียกใช้ OB ได้ เช่น diagnostic interrupt หรือ time interval
- CPU จะเรียกใช้ OB ตาม priority class โดย priority OB ที่สูงกว่าจะเรียกใช้ก่อนตัวที่ priority ต่ำกว่า โดย priority class ที่ต่ำที่สุดคือ 1 (ถูกใช้กับ main program cycle) และ สูงสุดคือ class 26 (สำหรับ firmware V4.0 เป็นต้นไป เราสามารถเปลี่ยน priority class ในแต่ละ OB ได้โดยไปตั้งใน attributes ของ OB properties)
- เนื่องจาก CPU processing จะทำงานตาม event โดยในแต่ละ event จะไปทำการ trig เพื่อให้ interrupt OB แต่ละตัวทำงาน เราสามารถระบุ interrupt OB จาก event โดยการสร้าง block หรือตอนทำ device configuration หรือด้วย ATTACH / DETACH instruction
FCs & FBs (Functions & Function Blocks) : ประกอบด้วย program code อยู่ภายใน การใช้งาน FB จะไป link กับ Data Block (เรียกว่า Instance DB) ด้วยเพื่อที่จะใช้ Data Block ในการรักษาค่า state ต่างๆเอาไว้ระหว่างการทำงาน
Data Blocks : เป็นตัวเก็บข้อมูล และสามารถถูกใช้โดย program block ได้
Load Memory: เป็น non-volatile storage ที่ใช้สำหรับ user program, data และ configuration เมื่อมีการ download project ลง CPU (FC,FB, OB, DB, Hardware configuration, Technology objects) มันจะทำการโหลดลง Load Memory เป็นอันดับแรก พื้นที่ Load memory นี้สามารถเป็นได้ทั้ง memory card (ถ้ามี) หรือพื้นที่ใน CPU เองก็ได้ (แต่ memory card จะรองรับพื้นที่มากกว่า) เนื่องจากเป็น non-volatile memory area จึงทำให้ไม่สูญหายแม้ไม่มีการจ่ายไฟให้มัน
Work Memory : เป็นพื้นที่แบบ volatile storage สำหรับบาง element ของตัว user project ขณะที่มีการทำงานของ user program (Code work memory: FC, FB, OB — Data work memory: Global DB, Instance DB, Technology objects) CPU จะทำการ copy ค่าเหล่านี้จาก Load Memory ไปยัง Work Memory ในขณะที่กำลังทำงาน user program และเนื่องจากเป็น volatile area จึงทำให้ไม่สามารถจดจำค่าได้เมื่อไฟดับ
Retentive Memory: เป็น non-volatile storage ที่อยู่ในส่วนหนึ่งของ Work Memory โดยจะใช้เพื่อเก็บค่าของ user memory เอาไว้ไม่ให้หายเมื่อไฟดับ (Global DB, Instance DB, Technology objects, bit memories, timers, counters) โดย CPU จะทำการคืนค่าให้ retentive value อีกครั้งเมื่อมีการจ่ายไฟมาใหม่
การใช้ SIMATIC memory card ก็เป็นอีกทางเลือกหนึ่งเพื่อเก็บ user program หรือใช้เพื่อ transfer program เมื่อไรก็ตามที่เราใช้ memory card ตัว CPU จะรันโปรแกรมผ่านทาง memory card แทน memory ของ CPU (อย่าลืมตรวจสอบว่า memory card ไม่ได้อยู่ในโหมด write-protected ด้วย)
โดยการใช้ SIMATIC memory card สามารถใช้ เพื่อเป็น program card, เพื่อเป็น transfer card, เพื่อเป็น data collect file หรือเพื่อ update firmware ดังนี้
ถึงแม้ว่าข้อมูลชนิด BCD ตามรูปแบบข้างล่างนี้ไม่ได้กล่าวไว้ใน Data Type แต่ก็สามารถใช้งานได้โดยการใช้คำสั่ง Conversion
BCD16 คือ BCD แบบ 16-bit (-999 ถึง 999)
BCD32 คือ BCD แบบ 32-bit (-9,999,999 ถึง 9,999,999).
ขนาดของ DB ใน PLC แต่ละรุ่น
ในแต่ละ memory location มี address เป็นของตัวเองเฉพาะตัว เช่น I, Q หรือ M เป็นต้น ซึ่งใน user program ของเรา ก็จะใช้ address เหล่านี้ในการอ้าง memory location ด้วยเช่นกัน
การอ้างอิง address input (I) หรือ output (Q) เช่น %I0.3 หรือ %Q1.7 จะเป็นการเข้าถึงตัว process image แต่ถ้าหากเราต้องการ access physical input หรือ output โดยตรงแบบทันที ให้เราเพิ่ม “:P” เข้าไปต่อท้ายตัวแปรหรือ tag ที่ต้องการ (เช่น %I0.3:P, %Q1.7:P, หรือ “Stop:P”) ซึ่งคือการทำการ force input,output นั่นเอง สำหรับรายละเอียดเพิ่มเติมของการ Force variable สามารถดูได้ในเรื่องของการ Forcing variables ในลำดับต่อไป
ตัวอย่างการอ้างอิง address แบบ bit คือเราจะใส่ ข้อมูลดังนี้คือ Memory area (M), Byte (3) ตามด้วยจุด (.) และสุดท้ายคือ Bit address (4) ตัวอย่างข้างล่างคือการใช้งาน bit ที่4 ของ M3 นั่นเอง
เมื่อการทำการเพิ่มตัว CPU หรือ module ต่างๆลงไปใน software ตัวโปรแกรมจะทำการระบุ address ในแต่ละส่วนให้เราโดยอัตโนมัติ ซึ่งเราสามารถเปลี่ยน address เองก็ได้เช่นกัน ตัวอย่างเช่น
รูปข้างบนแสดงตัวอย่างของ CPU1214C ซึ่งมือ module 2SM และ 1 SB ซึ่งจากตัวอย่างนี้ เราสามารถเปลี่ยน address ของ DI8x24VDC จาก 8 เป็น 2 ก็ได้ เพราะ address 2 ยังไม่มีการใช้งาน โดยตัว software จะช่วยบอกให้เราทราบว่าพื้นที่ที่เราจะเปลี่ยนนั้นเราระบุผิดขนาดหรือไม่ทับซ้อนกับตัวอื่นหรือไม่
PLC tag หรือ Data Block tag นั้น สามารถเข้าถึงแบบ slice หรือเข้าถึงในบางส่วนในรูปแบบ bit, byte หรือ word ก็ได้ขึ้นอยู่กับขนาดของตัวมันเอง โดยมีรูปแบบดังนี้
ตัวอย่างการใช้งานข้อมูลแบบ slice โดยสมติว่า “DW” ถูกตั้งเป็น tag แบบ DWORD
นอกเหนือจากการเข้าถึงข้อมูลแบบ slice แล้ว เรายังมีวิธีการเข้าถึงบางส่วนของ tag ผ่านทาง AT overlay อีกด้วย โดย AT overlay คือ tag ที่อนุญาตให้เราเข้าถึงข้อมูลผ่าน tag ที่เราได้ประกาศไว้แล้วของตัว standard access block ซึ่งข้อดีของการใช้งาน AT overlay คือสามารถประกาศ data type ที่แตกต่างกันได้ แต่การทำ AT overlay ต้องทำใน parameter ของ FB เท่านั้น แต่ต้องกำหนด Retain เป็นแบบ Set in IDB ด้วย
การการตั้ง overlay parameter นั้น ให้เราประกาศ parameter เพิ่มเติมหลังจากตัวแปรหลักที่ต้องการ แล้วใส่ชนิดของ datatype เป็น AT ซึ่งจะทำให้โปรแกรมสร้าง overlay ให้เรา จากนั้นเราสามารถกำหนดชนิดข้อมูลของ overlay เป็นข้อมูลย่อยต่อไปได้ หรือจะกำหนดเป็น struct หรือ array ก็ได้ เช่นตัวอย่างข้างล่างนี้
ตัวอย่างของการกำหนด B2 เป็น Byte และตัวแปรย่อย overlay ชื่อว่า OV กำหนดเป็น array ของ Bool 8 ตัว
ตัวอย่างของการกำหนด DW1 เป็น DWord และตัวแปรย่อย overlay ชื่อว่า DW1_Struct ที่มีชนิดข้อมูลเป็น Struct ทำให้เราสามารถกำหนดตัวแปรย่อยใน Struct ได้อีกคือ W1 เป็น Word, B1 เป็น Byte และ BO1-BO8 เป็น Bool ทั้งหมด 8 ตัว ทำให้ชนิดข้อมูลครบ 32 bit ตามชนิดของ DWord ซึ่งเป็นตัวแปรใหญ่นั่นเอง
ในกรณีของตัวอย่างข้างบนนี้ DW1 เป็นข้อมูลแบบ 32 bit ถ้าหากเรากำหนดตามตัวอย่างข้างต้นแล้วจะทำให้ตัวแปรใน overlay ครบ 32 bit ตามข้อมูลใน DW1 แต่หากเรากำหนดข้อมูลใน overlay มากกว่าตัวแปร DW1 เช่นถ้าเราเพิ่ม BO9 เข้าไปอีกตัว เราก็จะ compile โปรแกรมไม่ผ่านนั่นเอง
ตัวอย่างการใช้งานตัวแปร overlay ในแบบต่างๆ ตามที่เราได้ตั้งไว้ข้างต้น
กฎของการใช้งาน overlay
1. Overlay tag สามารถใช้งานได้ใน FB และ FC แบบ standard access เท่านั้น (optimized ไม่ได้ ??? อาจจะได้แต่ตั้ง Retain เป็น Set in IDB ???? )
2. ไม่สามารถทำ overlay ของ data type VARIANT ได้
3. ขนาดของ overlay ต้องน้อยกว่าหรือเท่ากับตัวแปรหลัก (สังเกตว่าน้อยกว่าได้ แต่มากกว่าไม่ได้แน่ๆ)
4. ต้องกำหนด AT หลังจากการสร้างตัวแปรนั้นทันที
ตัว CPU หรือ signal board (SB) สามารถตั้งค่าให้เป็นตัวจ่าย pulse generators เพื่อใช้งาน high-speed pulse output functions ได้ถึง 4 channels โดยสามาถตั้งค่าเป็น pulse-width modulation (PWM) หรือเป็น pulse-train output (PTO) ก็ได้
การใช้งาน motion แบบพื้นฐานมักจะใช้ PTO outputs ซึ่งเราสามารถตั้งค่าแต่ละ pulse generator เพื่อเลือกใช้ PWM หรือ PTO ก็ได้ แต่ไม่สามารถใช้งานทั้งคู่ได้พร้อมกัน
Pulse outputs ไม่สามารถถูกใช้งานจากคำสั่งอื่นๆ ใน user program ได้ เมื่อเราทำการตั้งค่า outputs ของ CPU หรือ SB ให้เป็น pulse generators แล้ว output address นั้นๆจะถูกดึงออกจากการใช้งาน Q memory และไม่สามารถใช้เพื่อวัตถุประสงค์อื่นใน user program ได้ เช่นหากเราทำการเขียนค่า output ที่ถูกกำหนดค่าเป็น pulse generator แล้ว ตัว CPU จะไม่เขียนค่าให้ output อยู่ดี
อย่าจ่ายค่า pulse frequency เกินค่า maximum
ค่า maximum pulse frequency ของ pulse output generators คือ 1 MHz สำหรับ CPU 1217C
และมีค่า 100 kHz สำหรับ CPUs 1211C, 1212C, 1214C, and 1215C, มีค่า 20 kHz สำหรับ standard SB หรือ 200 kHz สำหรับ high-speed SB เป็นต้น
Pulse generators ทั้ง 4 จะมี I/O assignments ที่เป็น default อยู่ อย่างไรก็ตามเราสามารถตั้งค่าให้เป็น digital output ตัวใดก็ได้ใน CPU or SB
เราไม่สามารถตั้ง pulse generators ให้กับ SM หรือ distributed I/O ได้
เมื่อเราตั้งค่าให้เพื่อใช้งานเกี่ยวกับ basic motion ให้พึงระวังว่าโปรแกรม STEP7 จะไม่เตือนเราถ้าเราตั้งให้แกนนั้นๆให้ทำงานที่ maximum speed/frequency ซึ่งเกินค่าของข้อจำกัดของตัว hardware เอง ดังนั้นเราต้องมั่นใจว่าไม่ได้ทำการสั่งงานเกินค่า maximum pulse frequency ของตัว hardware
เราสามารถเลือกใช้ pulse generator จาก CPU outputs หรือจาก optional signal board outputs ก็ได้ ซึ่งจะมี default I/O assignment ตามตารางด้านล่างนี้ (แต่เราก็สามารถทำการเปลี่ยนตัว output เป็นเบอร์อื่นๆ ก็ได้)
อย่าลืมว่า PWM นั้นต้องการเพียงแค่ output ตัวเดียว ในขณะที่ PTO สามารถเลือกใช้งาน 1 หรือ 2 outputs (pulse + direction) ต่อ channel ก็ได้ ดังนั้นหาก output นั้นไม่ต้องการใช้งาน pulse function ก็สามารถนำไปใช้งานในส่วนอื่นๆได้
1 CPU 1211C ไม่มี Q0.4, Q0.5, Q0.6, or Q0.7 ดังนั้นไม่สามารถใช้ outputs เหล่านี้กับ CPU 1211C.
2 CPU 1212C ไม่มี Q0.6 or Q0.7 ดังนั้นไม่สามารถใช้ outputs เหล่านี้กับ CPU 1212C
3 ตารางนี้ใช้อ้างอิงกับ CPU 1211C, CPU 1212C, CPU 1214C, CPU 1215C, and CPU 1217C