
إن تنظيم مجموعة قراءات عن بعد من عدادات الكهرباء ليست مهمة صعبة ، فالعدادات أذكى وأذكى كل عام ويجب أن ترسل كل شيء بأنفسهم ، ولكن لا ، بالطبع هناك معلومات ، لكنها متناثرة. يبدو أن مصنعي المعدات يريدون أيضًا جني الأموال من بيع برامجهم. أكتب هذه المقالة لتوفير الوقت لكل من لديه مهام مماثلة.
ابدأ
كانت الشركة بحاجة لأتمتة جمع قراءات العدادات الكهربائية ، حوالي عشرين قطعة. للقيام بذلك كان مطلوبًا بسرعة وبأقل تكلفة ممكنة. لذلك ، قرروا جمع البيانات باستخدام Zabbix الذي تم نشره بالفعل ، ولكن للاتصال بالعداد ، كان من الضروري كتابة نص صغير ، المزيد عن ذلك أدناه. اتضح أن جمع القراءات هو واحد فقط من المعلمات التي يجب جمعها ، فالكمبيوتر الشخصي الموجود على متن Debian مسؤول عن الباقي ، لذلك لم يكن من الصعب الاتصال بالعداد عبر منفذ COM. بالطبع ، بالنسبة لمعظم المستخدمين ، سيكون من الأنسب استخدام شبكة محلية والحصول على معلومات من محول صناعي أو محول واجهة.
من خيارات الاتصال ، يمكنك أيضًا التفكير في منفذ بصري ، على الرغم من أنك ستحتاج إلى شراء جهاز إضافي ، من ناحية أخرى ، لا تحتاج إلى إزالة الختم.

توجد أطراف توصيل العداد تحت الغطاء المختوم.
لذلك ، كان علينا أن نتفق على شركة شبكة أننا بحاجة إلى إزالة الأختام ، وأداء العمل ، وإعادة ختم العدادات. ولكن في النهاية ، تم التوصل إلى اتفاقات وكان من الممكن التعامل بهدوء مع حل المشكلة الرئيسية.

حل المشكلات
على النحو التالي من
الوثائق الرسمية.يأخذ العداد سلسلة إدخال من وحدات البايت بتنسيق ADDR-CMD-CRC ، ويعطي ADDR-CMD-DATA-CRC ، حيث:
- ADDR - اسم العداد (لـ Mercury 203.2T - نفس الرقم التسلسلي)
- CMD - أمر الرمز
- البيانات - تعتمد البيانات على الطلب
- تم حساب CRC - 2 بايت التكرار الدوري للبايت المحسوب على جميع البايتات السابقة لهذه الحزمة. من هذا الشرح ليس من الواضح ما يجب كتابته في حقل المجموع الاختباري.
لا يتم استخدام واصلة في تسلسل ؛ حيث يتم استخدامها هنا لفصل الكتل المنطقية.
بادئ ذي بدء ، الاتصال بالعداد باستخدام برنامج
konfigurator القياسي ، وباستخدام الشم ، انظر إلى الحزم المرسلة ، واكتشف المجموع الاختباري الذي يجب إضافته إلى النهاية. أدناه ، تلقى الخط من العداد.

باستخدام
الآلة الحاسبة CRC عبر الإنترنت ، اكتشفنا ما نحتاجه لحساب CRC-16 (Modbus) باستخدام متعدد الحدود 0xA001.
القليل من الثعبان
هناك روابط كافية لخوارزمية الحساب ، لذلك لن أتطرق إليها. من أجل التنمية ، استخدمت Python 3
def crc16(data): crc = 0xFFFF l = len(data) i = 0 while i < l: j = 0 crc = crc ^ data[i] while j < 8: if (crc & 0x1): mask = 0xA001 else: mask = 0x00 crc = ((crc >> 1) & 0x7FFF) ^ mask j += 1 i += 1 if crc < 0: crc -= 256 result = data + chr(crc % 256).encode() + chr(crc // 256).encode('latin-1') return result
الآن دعونا نحاول الحصول على رقمه التسلسلي من العداد والتحقق من اتفاقية حقوق الطفل.
ستحتاج إلى تثبيت وحدة
pyserial import serial import struct import time sn = 26222790
عظيم! الآن نحصل على قيم الطاقة المستهلكة في التعريفات الأولى والثانية ، في الواقع ، نحن بحاجة فقط إلى تغيير مجال الفريق وتحليل النتيجة.
chunk += b'\x27' t1 = ''.join('{:02x}'.format(c) for c in out[5:9]) t2 = ''.join('{:02x}'.format(c) for c in out[9:13]) print ('T1 =', float(t1)*0.01, '(*)', 'T2 =', float(t2)*0.01, '(*)')
كل شيء يعمل. تم نشر النسخة النهائية من البرنامج النصي على
بوابة . في المستقبل ، أخطط لإضافة دعم للعمل على الشبكة المحلية.
من أجل التطوير ، تم استخدام Mercury-221 USB -> COM Adapter ، ولكن يمكنك توصيل العداد مباشرة بمنفذ COM.
المراجع:
معلومات مفيدة عن ربط مكافحة
هناالتوثيق على الموقع الرسميموقع الدعم الفنيحول CRC على
ويكيبيديا