รหัสวันในปีของ SLC 5/04 สำหรับเครื่องพิมพ์ฉลาก
สร้างรหัสการผลิตรูปแบบ YYYYDDD ที่ผ่านการตรวจสอบใน SLC 5/04 คู่มือนี้แยกวันลำดับที่ออกจากเลขวันจูเลียน และครอบคลุมการอ่านค่านาฬิกา ปีอธิกสุรทิน ค่าล้น การจัดรูปแบบ และการจับมือสื่อสารกับเครื่องพิมพ์
โรงงานบรรจุภัณฑ์หลายแห่งต้องการให้ SLC 5/04 สร้าง “วันที่จูเลียน” สำหรับเครื่องพิมพ์ฉลาก แต่ในกรณีส่วนใหญ่ ค่าที่ต้องการไม่ใช่เลขวันจูเลียนทางดาราศาสตร์ แต่เป็นเลขลำดับวัน หรือที่เรียกอีกอย่างว่าวันที่ของปี: วันที่ 1 มกราคมคือ 001 และวันที่ 31 ธันวาคมคือ 365 หรือ 366 ควรระบุความแตกต่างนี้ไว้ในข้อกำหนดอินเทอร์เฟซก่อนสร้างลอจิกแบบแลดเดอร์
รหัสอย่าง 2026243 โดยทั่วไปหมายถึงปี 2026 ตามด้วยเลขลำดับวันที่ 243 รหัสดังกล่าวมีประโยชน์สำหรับการติดตามล็อต เพราะมีความยาวคงที่และเรียงลำดับตามธรรมชาติภายในปีเดียวกัน แต่ไม่ระบุเวลาของวัน เขตเวลา กะการผลิต หรือแบตช์ที่ไม่ซ้ำกันทั่วโลก ฟิลด์เหล่านี้ต้องจัดการแยกต่างหากเมื่อจำเป็นต้องมีการตรวจสอบย้อนกลับ

กำหนดรหัสที่ต้องการให้เป็นปีบวกเลขลำดับวันสามหลักก่อนเลือกจัดเก็บเป็นจำนวนเต็มหรือสตริง
ตรวจสอบแหล่งที่มาของนาฬิกาคอนโทรลเลอร์ก่อน
อย่าคัดลอกแอดเดรสในไฟล์สถานะจากโครงการอื่นโดยไม่ตรวจสอบโปรเซสเซอร์ ซีรีส์ เฟิร์มแวร์ และเอกสารอ้างอิงตารางข้อมูลอย่างเป็นทางการที่ตรงกับอุปกรณ์ที่ติดตั้ง ไฟล์สถานะของ SLC มีข้อมูลนาฬิกา แต่ต้องตรวจสอบเวิร์ดที่แน่นอนและพฤติกรรมการอัปเดตสำหรับคอนโทรลเลอร์เป้าหมาย แอดเดรสแทนที่ไม่ถูกต้องอาจให้ค่าที่ดูสมเหตุสมผล จนกระทั่งการเปลี่ยนเดือนหรือปีเปิดเผยข้อผิดพลาด
คัดลอกปี เดือน และวันไปยังรีจิสเตอร์ทำงานเป็นตัวอย่างข้อมูลชุดเดียวกัน หากอ่านค่าในช่วงข้ามเที่ยงคืน รูทีนอาจนำเดือนของเมื่อวานมารวมกับวันของวันนี้ วิธีหนึ่งคือสุ่มตัวอย่างสองครั้งและยอมรับข้อมูลก็ต่อเมื่อทั้งสองชุดตรงกัน อีกวิธีคืออัปเดตวันที่ผลิตในช่วงเวลาสงบที่กำหนดไว้หลังเที่ยงคืน
ต้องดูแลรักษานาฬิกาของคอนโทรลเลอร์ด้วย สูตรที่ถูกต้องไม่สามารถแก้ไขแบตเตอรี่หมด นาฬิกาไม่ถูกต้อง หรือการปรับตั้งโดยไม่ได้รับอนุญาตได้ ให้แจ้งเตือนเมื่อวันที่อยู่นอกช่วงที่อนุมัติ และจัดทำเอกสารระบุว่าใครมีสิทธิ์ตั้งนาฬิกาหลังการบำรุงรักษา
ใช้วิธีออฟเซ็ตของเดือนที่ชัดเจน
เลขลำดับวันเท่ากับวันของเดือนบวกจำนวนวันทั้งหมดในเดือนก่อนหน้า ให้จัดเก็บออฟเซ็ตสะสมของปีที่ไม่ใช่ปีอธิกสุรทินไว้ในไฟล์จำนวนเต็ม: มกราคม 0 กุมภาพันธ์ 31 มีนาคม 59 เมษายน 90 พฤษภาคม 120 มิถุนายน 151 กรกฎาคม 181 สิงหาคม 212 กันยายน 243 ตุลาคม 273 พฤศจิกายน 304 และธันวาคม 334
ตรวจสอบค่าเดือนก่อนใช้ค่าเดือนเป็นดัชนีเข้าถึงไฟล์ ค่าเป็นศูนย์ ค่าติดลบ หรือค่ามากกว่า 12 ต้องไม่ถูกใช้เพื่อเข้าถึงรีจิสเตอร์ที่ไม่ได้ตั้งใจ ตรวจสอบวันให้สอดคล้องกับเดือนที่เลือกด้วย คอนโทรลเลอร์ควรตั้งบิตวันที่ไม่ถูกต้อง ยับยั้งการพิมพ์ และแสดงฟิลด์ที่ถูกปฏิเสธ แทนการสร้างรหัสล็อตที่ดูสมเหตุสมผลแต่เป็นเท็จ
หลังดึงออฟเซ็ตแล้ว ให้คำนวณเลขลำดับวันเป็นออฟเซ็ตบวกวันของเดือน เพิ่มหนึ่งเมื่อปีนั้นเป็นปีอธิกสุรทินและเดือนอยู่หลังเดือนกุมภาพันธ์ เก็บค่าระหว่างการคำนวณไว้ในรีจิสเตอร์แยกกันเพื่อให้มองเห็นได้ นิพจน์แบบย่ออาจช่วยลดจำนวนรางได้หนึ่งราง แต่ทำให้การแก้ไขปัญหาออนไลน์ยากขึ้น
ใช้กฎปีอธิกสุรทินแบบเกรกอเรียน
การทดสอบทั่วไปว่า “หารด้วยสี่ลงตัว” ยังไม่ครบถ้วนสำหรับปีศตวรรษ ตามกฎเกรกอเรียน ปีหนึ่งเป็นปีอธิกสุรทินเมื่อหารด้วยสี่ลงตัว ยกเว้นปีที่หารด้วย 100 ลงตัวจะไม่เป็นปีอธิกสุรทิน เว้นแต่จะหารด้วย 400 ลงตัวด้วย ดังนั้นปี 2000 จึงเป็นปีอธิกสุรทิน ปี 2100 จะไม่เป็น และปี 2400 จะเป็น
NIST อธิบายว่าปฏิทินเกรกอเรียนตัดปีอธิกสุรทินออกสามปีในทุกรอบ 400 ปี กฎนี้ควรนำไปใช้เพราะโค้ดที่นำกลับมาใช้ใหม่มักมีอายุการใช้งานยาวนานกว่าที่คาดไว้ ดู คำอธิบายปีอธิกสุรทินของ NIST
สร้างการทดสอบจากการเปรียบเทียบเศษเหลืออย่างชัดเจน โดยใช้คำสั่งที่มีอยู่ในชุดคำสั่งของอุปกรณ์ที่ติดตั้ง ให้ใส่คำอธิบายกำกับแต่ละแขนง หลีกเลี่ยงนิพจน์ที่ช่างเทคนิคในอนาคตไม่สามารถตรวจสอบออนไลน์ได้ หากข้อกำหนดของโรงงานจงใจใช้กฎที่ง่ายกว่า ให้จัดทำเอกสารระบุช่วงวันที่ที่ใช้ได้
ควบคุมช่วงของการคำนวณจำนวนเต็ม
เลขลำดับวันสามารถเก็บในจำนวนเต็มมีเครื่องหมายขนาด 16 บิตได้ แต่ค่าตัวเลขรวมอย่าง YYYYDDD ไม่สามารถเก็บได้ ตัวอย่างเช่น 2026243 มีค่ามากกว่า 32,767 อย่าพยายามบังคับให้รหัสฉลากทั้งหมดอยู่ในรีจิสเตอร์จำนวนเต็ม SLC ปกติ
เก็บปีและเลขลำดับวันเป็นจำนวนเต็มแยกกัน แล้วจึงสร้างเป็นสตริง วิธีนี้ช่วยหลีกเลี่ยงค่าล้นและรักษาเลขศูนย์นำหน้าไว้ หากเครื่องพิมพ์รับฟิลด์แยกกัน ให้ส่งแยกกัน หากจำเป็นต้องใช้เลขวันจูเลียนทางดาราศาสตร์จริง ๆ ให้ใช้อัลกอริทึมและรูปแบบข้อมูลที่ผ่านการทบทวนแยกต่างหาก อย่าเปลี่ยนชื่อรูทีนเลขลำดับวันนี้
จัดรูปแบบสตริงสำหรับเครื่องพิมพ์ให้มีความกว้างคงที่
สตริงการผลิตควรมีตัวเลขปีสี่หลักและเลขลำดับวันสามหลักเสมอ วันที่ 7 ต้องกลายเป็น 007 สร้างผลลัพธ์ในบัฟเฟอร์ ASCII หรือสตริงโดยใช้คำสั่งที่โปรเซสเซอร์และโครงการรองรับ ตรวจสอบความยาวปลายทางก่อนสั่งพิมพ์ และเขียนทับบัฟเฟอร์ทั้งหมดเพื่อไม่ให้อักขระจากข้อความเก่าค้างอยู่

การจัดรูปแบบความกว้างคงที่ช่วยรักษาเลขศูนย์นำหน้าและทำให้ฟิลด์บาร์โค้ดอยู่ในแนวเดียวกัน
ใช้แฮนด์เชคแบบร้องขอและตอบรับกับเครื่องพิมพ์ ตรึงสตริงวันที่ที่สร้างเสร็จแล้วเมื่อมีการส่งคำขอ อย่าให้รูทีนวันที่ที่ทำงานต่อเนื่องเปลี่ยนแปลงบัฟเฟอร์ขณะที่ข้อความกำลังทำงาน บันทึกสถานะสำเร็จ หมดเวลา และเครื่องพิมพ์ปฏิเสธแยกจากกัน
ตรวจสอบขอบเขต ไม่ใช่เฉพาะวันที่ปกติ
ทดสอบวันที่ 1 มกราคม 28 กุมภาพันธ์ 29 กุมภาพันธ์ในปีอธิกสุรทิน 1 มีนาคมในปีอธิกสุรทินและปีปกติ 31 ธันวาคม และการเปลี่ยนเข้าสู่ปีใหม่ รวม 2099-12-31, 2100-02-28 และ 2100-03-01 หากโค้ดอาจใช้งานต่อหรือถูกนำไปใช้กับระบบอื่น เปรียบเทียบผลลัพธ์กับปฏิทินอิสระ
ทดสอบข้อมูลผิดพลาดโดยตั้งใจ: เดือน 0 เดือน 13 วันที่ 0 วันที่ 31 เมษายน และวันที่ 29 กุมภาพันธ์ในปีปกติ ยืนยันว่ารูทีนปฏิเสธการพิมพ์ ปิดแล้วเปิดเครื่องโปรเซสเซอร์ใหม่ใกล้ช่วงเปลี่ยนวันที่ และตรวจสอบนาฬิกา รีจิสเตอร์ทำงาน พฤติกรรมการสแกนครั้งแรก และแฮนด์เชคกับเครื่องพิมพ์
ผสานโค้ดเข้ากับการระบุความเป็นเจ้าของแบตช์
รูทีนวันที่ควรส่งค่าที่ผ่านการตรวจสอบแล้ว แต่ลำดับการบรรจุภัณฑ์เป็นผู้ตัดสินใจว่าเมื่อใดค่านั้นจะกลายเป็นส่วนหนึ่งของแบตช์ แบตช์ที่เริ่มก่อนเที่ยงคืนอาจต้องใช้วันที่ผลิตเดิมต่อไปหลังจากปฏิทินเปลี่ยนวัน ให้บันทึกค่าที่อนุมัติเมื่อเริ่มแบตช์ และเก็บค่านั้นไว้จนกว่าแบตช์จะปิด
จัดเก็บรูทีนที่จัดทำเป็นเอกสารไว้กับบันทึกการย้ายระบบ PLC และระบบ PAC ของโรงงาน ระบุเวิร์ดแหล่งที่มาของนาฬิกาที่ใช้กับเครื่องนั้นอย่างครบถ้วน แสดงรหัสวันที่ที่ใช้งานและสถานะการตรวจสอบให้มองเห็นได้ผ่านชั้น HMI และระบบคอมพิวเตอร์อุตสาหกรรม
มุมมองด้านวิศวกรรม
การปรับปรุงหลักคือความชัดเจนทางแนวคิด เรียกค่านี้ว่าเลขลำดับวันหรือรหัสวันของปี ตรวจสอบนาฬิกาและฟิลด์ปฏิทิน ใช้กฎเกรกอเรียนฉบับเต็ม ควบคุมการคำนวณให้อยู่ในช่วง และตรึงสตริงความกว้างคงที่ระหว่างการส่งข้อมูล การตัดสินใจเหล่านี้ช่วยป้องกันข้อผิดพลาดด้านการตรวจสอบย้อนกลับที่ไม่แสดงออกจนกว่าจะถึงวันอธิกสุรทิน การเปลี่ยนปี หรือการเปลี่ยนคอนโทรลเลอร์