کدهای ASCII برای دادههای PLC: اعشاری، هگزادسیمال و کدهای کنترلی
یاد بگیرید نویسههای ASCII، مقادیر دهدهی، بایتهای شانزدهشانزدهی و کدهای کنترلی چگونه در رشتههای PLC و پیامهای سریال ظاهر میشوند و با روشی عملی، خطاهای چارچوببندی و قالببندی را عیبیابی کنید.
ASCII همچنان در پروژههای PLC رایج است، زیرا بسیاری از دستگاههای صنعتی متن را هر بار یک بایت جابهجا میکنند. بارکدخوانها، چاپگرهای برچسب، ترازوها، درایوها، درگاههای سریال و پایانههای اپراتوری اغلب فرمانها و اندازهگیریها را بهصورت کدهای کاراکتری نمایش میدهند. مهندسانی که میتوانند بین کاراکترها، مقادیر دهدهی و بایتهای هگزادسیمال جابهجا شوند، این ارتباطها را سریعتر عیبیابی میکنند.
ASCII چه چیزی را تعریف میکند
استاندارد اصلی آمریکایی برای کدگذاری تبادل اطلاعات، یعنی ASCII، یک مجموعهکاراکتری هفتبیتی است. این استاندارد ۱۲۸ مقدار را تعریف میکند که از ۰ تا ۱۲۷ شمارهگذاری شدهاند. مقادیر ۰ تا ۳۱ و همچنین ۱۲۷، کاراکترهای کنترلی هستند. مقادیر ۳۲ تا ۱۲۶ کاراکترهای قابلچاپ، از جمله حروف، ارقام، علائم نگارشی و فاصله را شامل میشوند.
مشخصات RFC 20 میزبانیشده توسط IETF جایگاه کدها و معنای موردنظر آنها را مستند میکند. سیستمهای مدرن معمولاً یک کاراکتر ASCII را در یک بایت هشتبیتی ذخیره میکنند. برای ASCII استاندارد، بیت بالایی صفر باقی میماند.
دهدهی، هگزادسیمال و دودویی همان بایت هستند
یک تگ PLC ممکن است یک مقدار یکسان را در چند قالب عددی نمایش دهد. حرف بزرگ A برابر با ۶۵ در مبنای ده، 41 در مبنای شانزده و 01000001 در مبنای دو است. رقم 0 برابر با ۴۸ در مبنای ده یا 30 در مبنای شانزده است. اینها کاراکترهای متفاوتی نیستند؛ بلکه نمایشهای متفاوتی از همان الگوی عددی هستند.
هگزادسیمال هنگام راهاندازی و تست مفید است، زیرا یک بایت در دو رقم هگزادسیمال جا میگیرد. ثبت بستهها، نمایشگرهای سریال و دفترچههای راهنمای دستگاهها نیز معمولاً مقادیر بایت را بهصورت هگزادسیمال نشان میدهند. وقتی دستورهای PLC به ثابتهای صحیح نیاز دارند، استفاده از مبنای ده اغلب آسانتر است.
کدهای کنترلی در پیامهای صنعتی اهمیت دارند
بسیاری از پروتکلهای سریال از کاراکترهای کنترلی بهعنوان جداکننده استفاده میکنند. بازگشت حامل برابر با ۱۳ در مبنای ده یا 0D در مبنای شانزده است. تغذیه خط برابر با ۱۰ در مبنای ده یا 0A در مبنای شانزده است. شروع متن برابر با 02 در مبنای شانزده است، در حالی که پایان متن برابر با 03 است. اگر پایاندهنده موردنیاز وجود نداشته باشد، دستگاه ممکن است یک فرمان معتبر را نادیده بگیرد.
فرض نکنید هر دستگاهی از CR/LF استفاده میکند. برخی فقط به CR نیاز دارند. برخی دیگر از یک جداکننده قابلچاپ، طول پیام ثابت یا یک بایت بررسی جمع استفاده میکنند. قاب دقیق پیام را در دفترچه راهنمای پروتکل سازنده تأیید کنید.
رشتههای PLC چگونه به آرایههای بایت تبدیل میشوند
سکوهای PLC رشتهها را به شکلهای متفاوتی ذخیره میکنند. برخی طول فعلی را پیش از دادههای کاراکتری قرار میدهند. برخی دیگر یک آرایه با اندازه ثابت رزرو میکنند و متن را با یک بایت صفر پایان میدهند. وقتی داده از مرز پروتکل عبور میکند، دستگاه دریافتکننده بهجای نوع رشته داخلی کنترلکننده، بایتها را میبیند.
هم طول تعریفشده رشته و هم بافر زیربنایی را بررسی کنید. اگر یک روال کل بافر را ارسال کند، یک بایت قدیمی پس از طول فعلی ممکن است در داده ارسالی ظاهر شود. مقصد را پاک کنید یا فقط تعداد کاراکترهای فعال را ارسال کنید.
یک روش عملی برای عیبیابی
- بایتهای دقیق ارسالشده را با استفاده از نمایشگر سریال، تحلیلگر پروتکل یا صفحه تشخیصی درگاه ثبت کنید.
- هر بایت را بهصورت هگزادسیمال بنویسید و مقادیر قابلچاپ را دوباره به کاراکترها نگاشت کنید.
- بایتهای قاببندی، پایاندهندهها، جداکنندهها، فیلدهای طول و مقادیر بررسی جمع را مشخص کنید.
- ثبت انجامشده را با دفترچه راهنمای دستگاه، از جمله فاصلهها و بزرگی یا کوچکی حروف، مقایسه کنید.
- ثبت را برای یک پیام سالم و شناختهشده تکرار کنید و موقعیت بایتها را مقایسه کنید.
این روش در سطح بایت، خطاهای قالببندی را از مشکلات سیمکشی، نرخ بود و توازن جدا میکند. اگر ثبت، متنی خوانا اما ناقص را نشان میدهد، روی سرهمبندی رشته تمرکز کنید. اگر هر بایت نادرست است، ابتدا تنظیمات فیزیکی و سریال را بررسی کنید.
خطاهای رایج پیادهسازی
اشتباه گرفتن رقم با مقدار عددی آن
کاراکتر «5» برابر با ۵۳ در مبنای ده ASCII است، نه مقدار صحیح ۵. تبدیل یک عدد اندازهگیریشده به متن به یک روال قالببندی نیاز دارد. کپی کردن عدد صحیح خام در یک بافر کاراکتری، بهجای آن یک بایت کنترلی تولید میکند.
ترکیب متن هگزادسیمال با بایتهای دودویی
متن «41» شامل دو کاراکتر است: 34 در مبنای شانزده و 31 در مبنای شانزده. یک بایت با مقدار 41 در مبنای شانزده، حرف A را نمایش میدهد. مشخص کنید پروتکل به متن هگزادسیمال قابلخواندن برای انسان نیاز دارد یا داده دودویی خام.
نادیده گرفتن کدگذاریهای فراتر از ASCII
ASCII حروف انگلیسی و مجموعه محدودی از نمادها را پوشش میدهد. UTF-8 برای ۱۲۸ کاراکتر نخست از همان مقادیر بایت استفاده میکند، اما کاراکترهای غیر ASCII از چند بایت استفاده میکنند. یک دستگاه قدیمی ممکن است این بایتها را رد کند یا تعداد آنها را نادرست بشمارد.
راهنمای طراحی برای کد PLC قابل نگهداری
قالببندی پروتکل را در یک روال متمرکز کنید. بهجای پراکنده کردن مقادیر عددی در منطق نردبانی یا متن ساختاریافته، برای کدهای کنترلی ثابتهای نامگذاریشده تعریف کنید. هنگام راهاندازی و تست، بافر نهایی ارسال را بهصورت هگزادسیمال ثبت کنید. نمونهها را در مستندات پروژه بگنجانید.
وقتی یک پروتکل از قاببندی ساده متنی فراتر میرود، از یک ماشین حالت تعریفشده استفاده کنید. موقعیت دریافت، مهلت زمانی، وضعیت قاب و نتیجه اعتبارسنجی را جداگانه پیگیری کنید. این کار عیبیابی تلاشهای مجدد و پیامهای نادرست را آسانتر میکند.
برای الگوهای گستردهتر مدیریت داده، به پیمایش در آرایهها در سیستمهای PLC مراجعه کنید. برای دستگاههای شبکهای، راهنمای راهاندازی یک دستگاه Modbus TCP زمینه بیشتری درباره قاببندی و راهاندازی و تست ارائه میدهد.
چکلیست راهاندازی و تست
- مجموعهکاراکتر و ترتیب بایت را تأیید کنید.
- جداکنندهها و پایاندهندهها را در قالب هگزادسیمال بررسی کنید.
- بررسی کنید پیام طول ثابت دارد یا طول آن در ابتدای پیام مشخص میشود.
- متن هگزادسیمال قابلچاپ را از داده دودویی خام متمایز کنید.
- رفتار مهلت زمانی، تلاش مجدد و پاکسازی بافر را اعتبارسنجی کنید.
- یک ثبت بایتی سالم و شناختهشده را همراه با فایلهای پروژه بایگانی کنید.
ASCII ساده است، اما خطاهای صنعتی اغلب در یک بایت حذفشده یا اشتباهخوانده پنهان میشوند. ابتدا با پیام مانند دنبالهای از مقادیر عددی برخورد کنید. فقط پس از درک قاب، آن را دوباره به متن تبدیل کنید.