Ръководство за внедряване на генератор на юлианска дата за SLC-5/04
Имплементирайте генератор на юлианска дата в SLC-5/04 за ASCII изход към принтери за етикети. Стъпкова стълбова логика с инструкции Compute.
Семейството SLC-5/04, включително процесори като 1747-L542, не предоставя вградена инструкция за юлианския пореден номер на деня (JDN). Опаковането, кодирането на партиди и принтерите за етикети често изискват стойност за деня от годината или компактен низ YYYYDDD, затова логиката трябва да бъде изградена с обикновени математически операции и операции с таблици от данни. Това ръководство представя лесен за поддръжка подход с изрази CPT, кумулативна таблица с дните по месеци, обработка на високосни години и ASCII преобразуване за данни към принтера, като същевременно обръща внимание на ограниченията на шестнадесетбитовата аритметика, които създават проблеми при много от първите реализации.
Процесорите SLC-5/04 изчисляват деня от годината и кодове в юлиански стил в стълбовидна логика чрез CPT, целочислени файлове и внимателно проверени стойности от RTC.
В някои изходни материали се посочват думи от статусния файл в областта S:50–S:52 за годината, месеца и деня, докато друга документация набляга на по-широката област на часовника за реално време около S:37 в зависимост от процесора и контекста на фърмуера. Отнасяйте се внимателно към изходните думи на RTC: проверете точната карта на статусния файл за инсталирания каталог и серия, преди да фиксирате псевдонимите на таговете. След като календарните полета са потвърдени, самият алгоритъм е преносим между проектите със SLC-5/04.
Подредба на таблицата с данни
Добре подредената целочислена структура улеснява разчитането на рутината от следващия техник. Типичният модел използва регистрите N7 по следния начин: N7:0 година, N7:1 месец, N7:2 ден от месеца, N7:3 резултат за деня от годината, N7:4 флаг за високосна година и N7:5 буфер за междинни резултати от CPT. Съхранявайте кумулативните отмествания на дните за месеците във фиксирана целочислена таблица — например N10:1 до N10:12, съдържащи 0, 31, 59, 90, 120, 151, 151, 181, 212, 243, 273, 304 за невисокосна базова година до ноември, като обработката на февруари се извършва чрез флага за високосна година, а не чрез редактиране на таблицата по време на работа. Настройте точната таблица според предпочитаното от вас индексиране, но го опишете непосредствено до стъпалата.
Примерен подход за DOY (концептуален)
Leap = (Y се дели на 4) с необходимите правила за вековете
DOY = Day + Cumulative[Month] + (Leap AND Month>2)
Низ YYYYDDD чрез форматиране в стил ASC / AIF за принтери
За много фабрики денят от годината (DOY) във формат YYYYDDD е достатъчен и избягва пълната астрономическа сложност на JDN. Пълните юлиански поредни номера на дни, обхващащи векове, изискват по-внимателна работа с целите числа; операциите CPT на SLC с шестнадесетбитови цели числа препълват, ако междинните произведения не се изчисляват поетапно. За предпочитане изчислявайте DOY в шестнадесетбитово пространство, след което свързвайте годината и DOY с водещи нули в ASCII файл за принтера, вместо да налагате всичко в едно прекалено голямо цяло число.
Високосна година и структура на CPT
Логиката за високосната година трябва да следва правилата на гражданския календар, използвани във вашата система за качество. Като минимум годините, които се делят на четири, са високосни; ако жизненият цикъл на продукта включва граници между векове, приложете пълните григориански изключения — годините на векове са високосни само ако се делят на 400. Задайте N7:4 на единица, когато годината е високосна. При добавяне на кумулативното отместване за месеца добавяйте един допълнителен ден само ако флагът за високосна година е зададен и месецът е след февруари. Извършвайте това добавяне в отделна CPT инструкция, вместо да скривате вложени условия в нечетим израз.
Копирайте годината, месеца и деня от потвърдените изходни думи на RTC в работните регистри N7 чрез бавна периодична задача или при първо сканиране плюс дневен фронт. Не четете думите на RTC при всяко свободно изпълнявано стъпало, ако последващото ASCII форматиране е ресурсоемко; обновяване веднъж в минута обикновено е достатъчно за кодиране на датата.
Низовете DOY с водещи нули подават данните към принтерите за етикети по-надеждно от необработените цели числа, когато дължината на баркода трябва да остане фиксирана.
ASCII форматиране за принтери за етикети
Повечето индустриални принтери очакват низ с фиксирана ширина. След като DOY бъде изчислен в N7:3, използвайте ASCII инструкции за файлове, за да изградите низ като YYYYDDD с водещи нули в полето за деня. Проверете дължината, преди да задействате ръкостискането за печат. Ако протоколът на принтера изисква разделители или специфични за предприятието префикси, изградете ги в същия буфер за низ, вместо да разчитате принтерът да добави нулите.
- Потвърдете картографирането на думите на RTC за конкретния фърмуер на 1747-L542 (или на инсталирания SLC-5/04).
- Създайте работните тагове N7 и кумулативната таблица на месеците в целочислен файл.
- Напишете CPT логика за високосна година и CPT за DOY, което събира деня + кумулативната стойност + корекцията за високосна година.
- Форматирайте YYYYDDD чрез ASC и тествайте с известни календарни дати, включително 28 февруари и 1 март през високосни и невисокосни години.
- Защитете се от шестнадесетбитово препълване, ако някоя рутина се опитва да изчислява пълни многовековни JDN произведения; разделете изчисленията на етапи или преместете тази операция извън SLC.
Проверки за високосна година и принтер с водещи нули
Датите за проверка трябва да включват 2024-02-29, 2024-03-01, 2025-02-28 и преходите в края на годината 12-31. Сравнете DOY от PLC с независим календар. Типичните проблеми включват доверяване на грешни адреси в статусния файл, пропускане на корекцията за високосна година през февруари, отпечатване на DOY без водещи нули, което измества полетата на баркода, и препълване на междинни стойности в CPT, когато някой по-късно разшири рутината към пълен JDN. Оставяйте коментари в стълбовидната логика, които посочват действително използваните изходни думи на RTC за съответната машина.
Когато кодът за дата е част от по-голяма опаковъчна клетка, съхранявайте генератора като файл за повторна употреба и стандартизирайте целочислените структури между линиите. Резервните процесори и документацията за тези PLC системи SLC-500 трябва да включват рутината за кодиране на датата, така че смяната на процесор да не възстанови незабелязано по-стара и неправилна календарна реализация.
За автора
Марк Таунсенд | Старши инженер по автоматизация – системи Allen-Bradley
Марк Таунсенд е старши инженер по автоматизация с повече от 18 години опит с платформите Allen-Bradley, включително ControlLogix, CompactLogix и наследените SLC-500. Ежедневната му работа включва логика в RSLogix / Studio 5000 и въвеждане в експлоатация на HMI системи FactoryTalk View при остарели и смесени паркове от оборудване.