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

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

Проверете както декларираната дължина на низа, така и базовия буфер. Остатъчен байт след текущата дължина може да се появи в предаваните данни, ако дадена процедура изпрати целия буфер. Изчистете целевия буфер или предавайте само броя активни символи.

Практически метод за диагностика

  1. Заснемете точно предаваните байтове със сериен монитор, анализатор на протоколи или диагностична страница на шлюза.
  2. Запишете всеки байт в шестнадесетичен формат и преобразувайте печатаемите стойности обратно в символи.
  3. Отбележете байтовете за рамкиране, терминаторите, разделителите, полетата за дължина и контролните суми.
  4. Сравнете заснетото с ръководството на устройството, включително интервалите и регистъра на буквите.
  5. Повторете заснемането за известно изправно съобщение и сравнете позициите на байтовете.

Този подход на ниво байтове отделя грешките във форматирането от проблемите с окабеляването, скоростта на предаване и четността. Ако заснемането показва четим, но непълен текст, съсредоточете се върху сглобяването на низа. Ако всеки байт е грешен, първо проверете физическите и серийните настройки.

Често срещани грешки при реализацията

Объркване на цифра с числовата ѝ стойност

Символът „5“ е ASCII 53 в десетична система, а не целочислената стойност 5. Преобразуването на измерено число в текст изисква процедура за форматиране. Копирането на необработеното цяло число в символен буфер създава управляващ байт вместо това.

Смесване на шестнадесетичен текст с двоични байтове

Текстът „41“ съдържа два символа: 34 и 31 в шестнадесетична система. Един байт със стойност 41 в шестнадесетична система представлява буквата A. Определете дали протоколът очаква четим за хората шестнадесетичен текст или необработени двоични данни.

Пренебрегване на кодиранията извън ASCII

ASCII обхваща английските букви и ограничен набор от символи. UTF-8 използва същите байтови стойности за първите 128 символа, но не-ASCII символите използват няколко байта. Старо устройство може да отхвърли тези байтове или да ги преброи неправилно.

Насоки за поддържаем PLC код

Съхранявайте форматирането на протокола в една процедура. Давайте имена на константите за управляващите кодове, вместо да разпръсквате числови литерали в стълбовата логика или структурирания текст. По време на пускането в експлоатация записвайте крайния буфер за предаване в шестнадесетичен формат. Включете примери в документацията на проекта.

Когато протоколът надхвърля простото рамкиране на текст, използвайте дефинирана машина на състоянията. Проследявайте отделно позицията на приемане, таймаута, състоянието на кадъра и резултата от проверката. Така повторните опити и неправилно формираните съобщения се диагностицират по-лесно.

За по-широки модели за обработка на данни вижте обхождането на масиви в PLC системи. За мрежови устройства ръководството за внедряване на Modbus TCP устройство добавя контекст за рамкирането и пускането в експлоатация.

Контролен списък за пускане в експлоатация

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

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

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

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