تدقيق CRC-16 Modbus
طلب Modbus RTU يقرأ عشرة سجلات بدءًا من السجل 0 في الجهاز 1 يحصل على CRC قدره CDC5، ويُرسل على الخط بالشكل C5 CD. الصق الإطار بالست عشري أو نصًا لتحصل على القيمة ذات 16 بت ببايتاتها بترتيب الإرسال. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- النص
- 123456789
- CRC بالنظام السداسي عشري
- 4B37
- CRC (عدد صحيح)
- 19,255
- Crc lo
- 37
- Crc hi
- 4B
CRC-16 Modbus هو فحص التكرار الدوري الذي يُلحق بنهاية كل إطار تقريبًا من إطارات Modbus RTU على التسلسل وعلى كثير من الحافلات الصناعية. يحتاج المبرمجون ومكاملو PLC ومختبرو البروتوكول إلى رقم حتمي واحد عند بناء طلب أو التحقق من استجابة أو تصحيح حزمة تالفة على السلك. تقبل هذه القدرة نص UTF-8 صريحًا أو تفريغ hex للبايتات، وتشغّل خوارزمية CRC-16/MODBUS القياسية بالحدود 0xA001 والقيمة الابتدائية 0xFFFF، وتعيد نتيجة الستة عشر بتًا بست عشري كبير مع البايتين المنخفض والعالي بترتيب إرسال Modbus.
ما هو CRC-16 Modbus ولماذا تحتاجه الأدوات الصناعية
يطوي فحص التكرار الدوري كل بايت بيانات عبر حدود ثابت بحيث يغيّر بت واحد مقلوب البقية تقريبًا دائمًا. اعتمد Modbus RTU CRCًا محددًا بست عشرة بتًا: المولّد هو الحدود المنعكس 0xA001 (مكافئ 0x8005 بالشكل غير المنعكس)، يبدأ السجل عند 0xFFFF، يُدمج كل بايت بيانات بـ XOR في البتات الثماني المنخفضة، ويتبع ذلك ثماني خطوات إزاحة وXOR شرطي لكل بايت دون XOR نهائي. تُلحق كلمة الستة عشر بتًا بالإطار أولًا البايت المنخفض ثم العالي — الترتيب الذي يتوقعه الكهربائيون ومحللو البروتوكول على راسم أو ملتقط تسلسلي.
تسمّي الكتب وبيانات الشرائح هذا الملف CRC-16/MODBUS؛ وقد تستخدم حاسبات على الإنترنت قيمًا ابتدائية أو حدودًا مختلفة فتخالف PLC بصمت. يثبّت هذا الطرف الملف الصناعي بحيث تنتج السلسلة واحد-اثنان-ثلاثة-أربعة-خمسة-ستة-سبعة-ثمانية-تسعة البقية المعروفة 0x4B37، وينتج طلب قراءة سجلات احتفاظ كلاسيكي مثل العنوان واحد والدالة ثلاثة وسجل البداية صفر والكمية عشرة القيمة 0xCDC5 بترتيب السلك C5 CD. استخدمه كلما جمّعتم أو تحققتم من Modbus RTU، أو من بروتوكولات عدّادات استعارت نفس الـ CRC، أو أي إطار ثنائي مخصص يسمّي CRC-16 Modbus صراحة.
أين يفيد حساب CRC-16 Modbus عمليًا
يلصق مؤلّفو البرمجيات الثابتة المضمّنة تفريغ hex للأمر في ودجة المتصفح المجانية أثناء توصيل مشغّل UART ويتأكدون من تطابق الـ CRC مع ما تُصدره روتينتهم بلغة C قبل وميض السيليكون. يعيد مهندسو البروتوكول وباحثو الأمن حساب البقايا على الحركة الملتقطة لفصل الإطارات السليمة عن الضوضاء دون بناء مكدس كامل. تكتسب مواقع المحتوى التي تستهدف تدقيق CRC-16 Modbus حاسبة حية يطابق مسارها المجاني مسار الأتمتة بايتًا ببايت.
حافظوا على طلبات حتمية، وثبّتوا المتجه المعروف واحد-اثنان-ثلاثة-أربعة-خمسة-ستة-سبعة-ثمانية-تسعة يساوي أربعة B ثلاثة سبعة في مجموعات الانحدار، لتحصلوا على قابلية إعادة إنتاج صناعية دون تضمين جداول CRC في كل خدمة مصغّرة.
حالات الاستخدام
تحليل الالتقاط والتصحيح
الصقوا تفريغات hex من ملتقط تسلسلي في وضع hex لإعادة حساب الـ CRC واكتشاف الإطارات الصناعية المقطوعة أو التالفة بسرعة.
الأسئلة الشائعة
أي حدود وقيمة ابتدائية تستخدم؟
CRC-16/MODBUS: حدود منعكس 0xA001، سجل ابتدائي 0xFFFF، بلا XOR نهائي. يطابق تنفيذات PLC والعدادات على Modbus RTU.
بأي ترتيب تُرسل بايتات CRC في إطار Modbus؟
البايت المنخفض أولًا ثم المرتفع. فالقيمة 4B37 تنتقل على الخط بالشكل 37 ثم 4B، وهو الترتيب الذي يظهر في راسم الإشارة أو في أداة التقاط المنفذ التسلسلي. وتعرض الأداة البايتين منفصلين وبترتيب الإرسال.
هل يمكنني لصق تفريغ ست عشري من أداة التقاط تسلسلية؟
نعم. اختر الوضع الست عشري والصق البايتات، فتُحذف أولًا المسافات والنقطتان والشرطات والشرطات السفلية والفواصل والبادئة 0x. ويجب أن يبقى عدد زوجي من الخانات الست عشرية، وإلا تنبهك الأداة إلى أن القيمة مشوهة.
لماذا تعطي حاسبة أخرى على الإنترنت قيمة CRC مختلفة؟
بعض الحاسبات تستخدم قيمة ابتدائية أو كثير حدود مختلفًا فتخالف وحدة التحكم المنطقية دون تنبيه. تحقّق بالنص 123456789: يجب أن يعطي CRC-16 Modbus القيمة 4B37، وأي نتيجة أخرى تعني إعدادات مختلفة.
هل يمكن حساب CRC لرسالة فارغة؟
نعم. في وضع النص تُقبل السلسلة الفارغة وتكون النتيجة FFFF، أي القيمة التي يبدأ بها السجل، لأنه لم يُعالَج أي بايت. أما أي نص آخر فيُرمَّز بصيغة UTF-8 قبل الحساب.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/enc/crc16-modbus \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"123456789"}'const res = await fetch("https://api.kit.forhosting.com/enc/crc16-modbus", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "123456789"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/crc16-modbus",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "123456789"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/crc16-modbus", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"123456789"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"123456789"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/crc16-modbus", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "123456789"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.crc16_modbus",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
يفشل الـ hex غير السليم — عدد فردي من الأرقام أو رموز غير hex — بـ invalid_input بدل اختراع تدقيق. المنطق نفسه من نوع parse النقي يغذّي ودجة المتصفح المجانية ومسار API المدفوع، فلا يختلف مختبر المعمل وبوابات الإنتاج على فحص الإطار.
عقد الإدخال وتحليل hex وحقول الاستجابة
في وضع hex تُفسَّر السلسلة كتسلسل بايتات: تُزال أولًا بادئات 0x الاختيارية والمسافات والنقطتان والشرطات والشرطات السفلية والفواصل، ثم يجب أن تكوّن الأحرف المتبقية أرقامًا ست عشرية فقط بعدد زوجي. فشل التحقق لا يُفوتر. حافظوا على حمولات معتدلة في المتصفح؛ الخوارزمية خطية في طول البايتات وتعمل بالكامل في الذاكرة. أرسلوا جسم JSON بطريقة POST يتضمن الحقل النصي الإلزامي text وinput_format الاختياري بقيمة text أو hex والافتراضي text. في وضع text تُرمَّز السلسلة كـ UTF-8 ويدخل كل بايت ناتج في الـ CRC؛ يُسمح بالنص الفارغ وينتج البقية FFFF لحمولة طولها صفر. عدد فردي من الأرقام بعد التنظيف، أو أي حرف خارج الصفر إلى التسعة ومن A إلى F، يرفع invalid_input برسالة تسمّي hex غير سليم حتى يعرض العميل الخطأ بجانب الحقل دون تخمين. عند النجاح يتضمن الجسم crc_hex كأربعة أرقام hex كبيرة، وcrc_int كعدد صحيح بلا إشارة من صفر إلى خمسة وستين ألفًا وخمسمئة وخمسة وثلاثين، وcrc_lo وcrc_hi كبايتي تلك الكلمة المنخفض والعالي، وwire_hex كترتيب الإرسال little-endian ببايتين على Modbus RTU، وbyte_count للحمولة المفسَّرة، وinput_format المُعاد، وسلاسل ثابتة algorithm وpoly وinit توثّق CRC-16/MODBUS مع 0xA001 و0xFFFF. تُقبل الأسماء البديلة data وpayload وvalue وinput للحمولة؛ وformat وmode وencoding بدائل لـ input_format.
أين تثبت واجهة API لـ CRC-16 Modbus قيمتها
يبرمج مكاملو الأنظمة الـ API داخل أدوات التشغيل التي تولّد مئات إطارات قراءة وكتابة Modbus للعدادات والمحركات والوحدات الطرفية البعيدة، ويثبّتون قيم crc_hex الذهبية في التكامل المستمر حتى لا يخرج خطأ حدود إلى الإنتاج. ولأن التنفيذ parse نقي من المستوى A، تكلف كل مكالمة ناجحة السعر الأساسي المنشور $0.002 دون رموز نموذج ودون شبكة صادرة. اقرنوا wire_hex من الاستجابة بمسار الكتابة التسلسلية عندما تحتاجون بايتي الذيل الدقيقين، أو استخدموا crc_hex عندما تحتاجون البقية العددية فقط للسجلات والاختبارات الوحدوية.
حالات التكامل
تجميع إطارات Modbus RTU
ابنوا بايتات العنوان والدالة والبيانات ثم ألحقوا ذيل wire_hex المُعاد حتى يُرسل بايت الـ CRC المنخفض أولًا كما يتطلب Modbus RTU.
فحوصات ذهبية للبرمجيات الثابتة وCI
أكدوا أن شيفرة الجهاز وأدوات الخادم تنتجان crc_hex 4B37 لـ ASCII 123456789 والبقية الموثّقة لقوالب طلباتكم الثابتة.
أسئلة تقنية
كيف أحسب تدقيق CRC-16 Modbus؟
أرسلوا text كـ UTF-8 مع input_format text (الافتراضي)، أو سلسلة بايتات hex مع input_format hex. تعيد الـ API القيم crc_hex وcrc_int والبايتين المنخفض/العالي وwire_hex بترتيب Modbus RTU.
ماذا يحدث إذا كانت سلسلة hex غير سليمة؟
عدد فردي من الأرقام بعد إزالة الفواصل، أو أي حرف غير hex، يفشل بـ invalid_input ورسالة عن hex غير سليم. هذه الإخفاقات لا تُفوتر.
ما الفرق بين wire_hex وcrc_hex؟
crc_hex هو بقية الستة عشر بتًا كأربعة أرقام hex (النيبل العالي للبايت العالي أولًا في السلسلة). wire_hex هو البايت المنخفض ثم العالي — الترتيب المُلحق على سلك Modbus RTU.
كم تكلفة أداة تدقيق CRC-16 Modbus؟
أداة المتصفح مجانية. تستخدم طلبات API رصيد KIT المدفوع مسبقًا بمبلغ $0.002 لكل استدعاء ناجح؛ الإدخال غير الصالح لا يُفوتر.