Назад към блога

SLC 5/04 кодове за деня от годината за принтери за етикети

Изградете валидиран производствен код YYYYDDD в SLC 5/04. Това ръководство разграничава поредния ден от юлианския ден и обхваща отчитането на часовника, високосните години, препълването, форматиран...

Много опаковъчни предприятия възлагат на SLC 5/04 да създава „юлианска дата“ за принтер за етикети. В повечето случаи необходимата стойност не е астрономически юлиански пореден номер на деня. Това е пореден ден, наричан още ден от годината: 1 януари е 001, а 31 декември е 365 или 366. Това разграничение трябва да бъде записано в спецификацията на интерфейса, преди да бъде създадена стълбовидната логика.

Код като 2026243 обикновено означава 2026 година, последвана от пореден ден 243. Той е полезен за проследяване на партиди, защото има фиксирана дължина и се сортира естествено в рамките на годината. Не идентифицира часа, часовата зона, производствената смяна или глобално уникална партида. Когато проследимостта го изисква, тези полета трябва да се управляват отделно.

Стълбовидна рутина на SLC 5/04, изчисляваща код за пореден ден от календарни полета

Определете заявения код като година плюс трицифрен пореден ден, преди да изберете съхранение като цяло число или низ.

Първо проверете източника на часовника на контролера

Не копирайте адреси от статусния файл от друг проект, без да проверите инсталирания процесор, серията, фърмуера и официалния справочник за таблицата с данни. Статусният файл на 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 или низов буфер чрез инструкции, поддържани от процесора и проекта. Потвърдете дължината на целевия буфер преди задействане на печата и презапишете целия буфер, за да не останат знаци от по-старо съобщение.

Етикетен код с фиксирана дължина YYYYDDD, генериран от SLC 5/04

Форматирането с фиксирана дължина запазва водещите нули и поддържа подравняването на полетата с баркод.

Използвайте потвърждение тип „заявка и потвърждение“ с принтера. Замразете завършения низ с датата, когато бъде подадена заявката. Не позволявайте на свободно изпълняваща се рутина за датата да променя буфера, докато съобщението е активно. Отчитайте успеха, изтичането на времето и отхвърлянето от принтера като отделни състояния.

Проверявайте границите, а не само нормалните дати

Тествайте 1 януари, 28 февруари, 29 февруари във високосна година, 1 март във високосна и невисокосна година, 31 декември и прехода към новата година. Включете 2099-12-31, 2100-02-28 и 2100-03-01, ако кодът може да остане в експлоатация или да бъде пренесен в бъдеще. Сравнете резултатите с независим календар.

Преднамерено подайте невалидни данни: месец 0, месец 13, ден 0, 31 април и 29 февруари в невисокосна година. Потвърдете, че рутината отказва да печата. Изключете и включете захранването на процесора близо до преход на дата и проверете часовника, работните регистри, поведението при първо сканиране и потвърждението от принтера.

Интегрирайте кода със собствеността върху партидата

Рутината за дата трябва да предоставя валидирана стойност, но последователността на опаковане определя кога тя става част от партидата. Партида, която започва преди полунощ, може да се нуждае от първоначалната си производствена дата и след промяната на календара. Запишете одобрената стойност в началото на партидата и я запазете, докато партидата бъде приключена.

Съхранявайте документираната рутина със записите за миграция на предприятието за PLC и PAC системи. Включете точните думи на източника на часовника, използвани на тази машина. Поддържайте активния код на датата и статуса на проверката видими през слоя HMI и индустриални изчислителни системи.

Инженерна гледна точка

Основното подобрение е концептуалната яснота. Наричайте стойността пореден ден или код за ден от годината, проверявайте часовника и календарните полета, използвайте пълното Григорианско правило, поддържайте аритметиката в допустимия диапазон и замразявайте низ с фиксирана дължина по време на предаването. Тези решения предотвратяват незабележими грешки в проследимостта, които могат да се появят само на високосен ден, при граница между години или при подмяна на контролер.

Оставяне на коментар

Имайте предвид, че коментарите трябва да бъдат одобрени, преди да се публикуват.