ASCII за данни на PLC: десетични, шестнадесетични и управляващи кодове
Научете как ASCII символите, десетичните стойности, шестнадесетичните байтове и управляващите кодове се появяват в PLC низове и серийни съобщения, с практичен метод за диагностициране на неизправно...
ASCII остава широко използван в PLC проектите, тъй като много индустриални устройства обменят текст по един байт наведнъж. Четецът на баркодове, етикетните принтери, везните, задвижванията, серийните шлюзове и операторските терминали често представят командите и измерванията като кодове на символи. Инженерите, които могат да превключват между символи, десетични стойности и шестнадесетични байтове, отстраняват проблеми в тези връзки по-бързо.
Какво дефинира ASCII
Оригиналният американски стандартен код за обмен на информация е седембитов набор от символи. Той дефинира 128 стойности, номерирани от 0 до 127. Стойностите от 0 до 31 и 127 са управляващи символи. Стойностите от 32 до 126 са печатаеми символи, включително букви, цифри, пунктуация и интервал.
Спецификацията RFC 20, публикувана от IETF, документира позициите на кодовете и предназначените им значения. Съвременните системи обикновено съхраняват ASCII символ в осембитов байт. Най-старшият бит остава нулев при стандартния ASCII.
Десетичната, шестнадесетичната и двоичната система представляват един и същ байт
PLC тагът може да показва една и съща стойност в няколко числови формата. Главната буква A е 65 в десетична, 41 в шестнадесетична и 01000001 в двоична система. Цифрата 0 е 48 в десетична или 30 в шестнадесетична система. Това не са различни символи. Това са различни представяния на един и същ числов шаблон.
Шестнадесетичната система е полезна при пускане в експлоатация, тъй като един байт се побира в две шестнадесетични цифри. Снифовете на пакети, серийните монитори и ръководствата на устройствата също обикновено показват байтовите стойности в шестнадесетичен формат. Десетичният формат често е по-удобен, когато PLC инструкциите очакват цели числови константи.
Управляващите кодове са важни в индустриалните съобщения
Много серийни протоколи използват управляващи символи като разделители. Връщането на каретката е 13 в десетична или 0D в шестнадесетична система. Новият ред е 10 в десетична или 0A в шестнадесетична система. Началото на текста е 02 в шестнадесетична система, а краят на текста е 03. Устройството може да игнорира валидна команда, ако необходимият ѝ терминатор липсва.
Не приемайте, че всяко устройство използва CR/LF. Някои изискват само CR. Други използват печатаем разделител, съобщение с фиксирана дължина или байт с контролна сума. Потвърдете точния кадър в протоколното ръководство на производителя.
Как PLC низовете се превръщат в масиви от байтове
PLC платформите съхраняват низовете по различен начин. Някои поставят текущата дължина преди символните данни. Други заделят масив с фиксиран размер и завършват текста с нулев байт. Когато данните преминават през граница на протокола, приемащото устройство вижда байтове, а не вътрешния тип низ на контролера.
Проверете както декларираната дължина на низа, така и базовия буфер. Остатъчен байт след текущата дължина може да се появи в предаваните данни, ако дадена процедура изпрати целия буфер. Изчистете целевия буфер или предавайте само броя активни символи.
Практически метод за диагностика
- Заснемете точно предаваните байтове със сериен монитор, анализатор на протоколи или диагностична страница на шлюза.
- Запишете всеки байт в шестнадесетичен формат и преобразувайте печатаемите стойности обратно в символи.
- Отбележете байтовете за рамкиране, терминаторите, разделителите, полетата за дължина и контролните суми.
- Сравнете заснетото с ръководството на устройството, включително интервалите и регистъра на буквите.
- Повторете заснемането за известно изправно съобщение и сравнете позициите на байтовете.
Този подход на ниво байтове отделя грешките във форматирането от проблемите с окабеляването, скоростта на предаване и четността. Ако заснемането показва четим, но непълен текст, съсредоточете се върху сглобяването на низа. Ако всеки байт е грешен, първо проверете физическите и серийните настройки.
Често срещани грешки при реализацията
Объркване на цифра с числовата ѝ стойност
Символът „5“ е ASCII 53 в десетична система, а не целочислената стойност 5. Преобразуването на измерено число в текст изисква процедура за форматиране. Копирането на необработеното цяло число в символен буфер създава управляващ байт вместо това.
Смесване на шестнадесетичен текст с двоични байтове
Текстът „41“ съдържа два символа: 34 и 31 в шестнадесетична система. Един байт със стойност 41 в шестнадесетична система представлява буквата A. Определете дали протоколът очаква четим за хората шестнадесетичен текст или необработени двоични данни.
Пренебрегване на кодиранията извън ASCII
ASCII обхваща английските букви и ограничен набор от символи. UTF-8 използва същите байтови стойности за първите 128 символа, но не-ASCII символите използват няколко байта. Старо устройство може да отхвърли тези байтове или да ги преброи неправилно.
Насоки за поддържаем PLC код
Съхранявайте форматирането на протокола в една процедура. Давайте имена на константите за управляващите кодове, вместо да разпръсквате числови литерали в стълбовата логика или структурирания текст. По време на пускането в експлоатация записвайте крайния буфер за предаване в шестнадесетичен формат. Включете примери в документацията на проекта.
Когато протоколът надхвърля простото рамкиране на текст, използвайте дефинирана машина на състоянията. Проследявайте отделно позицията на приемане, таймаута, състоянието на кадъра и резултата от проверката. Така повторните опити и неправилно формираните съобщения се диагностицират по-лесно.
За по-широки модели за обработка на данни вижте обхождането на масиви в PLC системи. За мрежови устройства ръководството за внедряване на Modbus TCP устройство добавя контекст за рамкирането и пускането в експлоатация.
Контролен списък за пускане в експлоатация
- Потвърдете набора от символи и реда на байтовете.
- Проверете разделителите и терминаторите в шестнадесетичен формат.
- Проверете дали съобщението е с фиксирана дължина или с префикс за дължина.
- Разграничете печатаемия шестнадесетичен текст от необработените двоични данни.
- Проверете поведението при таймаут, повторен опит и изчистване на буфера.
- Архивирайте заснемане на известно изправно съобщение на ниво байтове заедно с файловете на проекта.
ASCII е прост, но индустриалните повреди често се крият в един липсващ или неправилно разчетен байт. Първо разглеждайте съобщението като последователност от числови стойности. Преобразувайте го обратно в текст едва след като разберете кадъра.