جدول المحتويات:

ESP32 Modbus Master TCP: 7 خطوات
ESP32 Modbus Master TCP: 7 خطوات

فيديو: ESP32 Modbus Master TCP: 7 خطوات

فيديو: ESP32 Modbus Master TCP: 7 خطوات
فيديو: TUTORIAL: How to make MODBUS work with ESP32 - Arduino - RS485 - Part 1 2024, يونيو
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

في هذه الفئة ، ستقوم ببرمجة معالج ESP32 ليكون Modbus TCP Master.

سنستخدم جهازين يحتويان على هذا المعالج: Moduino ESP32 و Pycom. كلا الجهازين يعملان في بيئة MicroPytthon. سيكون Modbus Slave الخاص بنا عبارة عن كمبيوتر شخصي مع تشغيل برنامج محاكاة Modbus عليه.

سوف تحتاج:

  • جهاز Moduino ESP32 أو Moduino Pycom (راجع موقع الويب هذا لمعرفة المزيد عن جهاز Moduino ESP32 وهذا للتحقق من جهاز Pycom)
  • كمبيوتر بنظام التشغيل Linux
  • منفذ RS-232 / RS-485 في الكمبيوتر أو محول USB إلى RS-232 / RS-485

الخطوة 1: قم بتنزيل وبدء تشغيل Modbus TCP Slave Simulator

قم بتنزيل وبدء تشغيل Modbus TCP Slave Simulator
قم بتنزيل وبدء تشغيل Modbus TCP Slave Simulator

قم بتنزيل Modbus Slave simulator من https://www.modbusdriver.com/diagslave.html ثم افتح الأرشيف الذي تم تنزيله وفك ضغط الإصدار لنظام التشغيل Linux.

قم بتشغيل البرنامج من وحدة التحكم مع الوسيطة -p:

./diagslave -p

هو منفذ حيث سيعمل خادم Modbus Slave. بالنسبة لبروتوكول Modbus ، يكون افتراضيًا 502 ، ولكن يمكنك استخدام بروتوكول آخر.

في منافذ Linux التي تقل عن 1024 ، لا يمكن استخدام البرامج التي يتم تشغيلها من مستخدم عادي (وليس امتيازات الجذر).

تذكر المنفذ الذي تستخدمه. ستكون هذه القيمة ضرورية لاحقًا.

الخطوة 2: قم بإعداد جهاز الكمبيوتر الخاص بك للاتصال بالجهاز

قم بإعداد جهاز الكمبيوتر الخاص بك للاتصال بالجهاز
قم بإعداد جهاز الكمبيوتر الخاص بك للاتصال بالجهاز

ستحتاج إلى بعض البرامج لإجراء الاتصال بالجهاز وإرسال الملفات إليه.

قم بتثبيت بيئة Python و pip (إذا لم يكن لديك):

apt-get install python3

apt-get install python3-dev curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" python3 get-pip.py

تثبيت picocom:

apt-get install picocom

هذا البرنامج ضروري للاتصال بالجهاز وتنفيذ الأوامر عليه.

نقطة تثبيت mpfshell

يتيح لك هذا البرنامج إرسال الملفات إلى الجهاز.

يمكنك أيضًا تثبيته من مصادر النموذج. قم بإحالة هذه الصفحة:

الخطوة 3: تحضير الجهاز والاتصال به

تحضير الجهاز والاتصال به
تحضير الجهاز والاتصال به
تحضير الجهاز والاتصال به
تحضير الجهاز والاتصال به
تحضير الجهاز والاتصال به
تحضير الجهاز والاتصال به

لتوصيل جهاز Moduino أو Pycom بجهاز الكمبيوتر ، تحتاج إلى منفذ أو محول RS-232 / RS-485. تحقق من إصدار جهازك (نوع المنفذ الذي يستخدمه) وابحث عن المنفذ أو المحول المناسب.

  1. قم بتوصيل الجهاز بجهاز الكمبيوتر
  2. ثم قم بتوصيل مصدر الطاقة به

قم بتوصيل الجهاز بجهاز الكمبيوتر ثم قم بتوصيل مصدر الطاقة به. يمكنك أيضًا توصيل كابل إيثرنت بـ Moduino ESP32 (إذا كان يحتوي على هذا المنفذ).

يجب أن يكون الاتصال كما في الصور أعلاه

ابحث عن مسار للمنفذ ، والذي يستخدم لاتصال الجهاز ، ويمكن أن يكون على سبيل المثال: / dev / ttyS1، / dev / ttyUSB0.

بالنسبة لمحولات USB ، سيحتوي المسار على كلمة USB.

يمكنك توصيل الجهاز ببرنامج picocom:

بيكوكوم / ديف / ttyUSB0 -b 115200

يبدو موجه الأوامر للجهاز مشابهًا لإحدى هذه الصور أدناه.

Moduino ESP32: انظر هنا

Moduino Pycom: انظر هنا

الخطوة 4: تحميل مكتبة Modbus Master

تحميل مكتبة Modbus Master
تحميل مكتبة Modbus Master

github.com/pycom/pycom-modbus/ للتواصل مع Modbus Slave ، تحتاج إلى مكتبة مناسبة. مكتبات Pycom غير متوافقة مع Moduino. تحقق من التعليمات التي تتوافق مع جهازك.

أغلق picocom قبل إرسال الملفات: اضغط على Ctrl + A ثم Ctrl + X.

مكتبة uModBus لقواعد Moduino ESP32 على مكتبة pycom-modbus لـ Moduino Pycom. تم تعديله ليعمل على جهاز ESP32 العادي. كما أن لديها طرق إغلاق إضافية () لفئات الموصل.

1) Moduino ESP32

قم بتنزيل المكتبة من https://github.com/techbase123/micropython-modbus. قم بفك ضغط الأرشيف وإرسال جميع الملفات الأربعة إلى جهاز Moduino.

استخدم mpfshell لتحميلها. قم بتشغيل هذا البرنامج في الدليل مع تلك الملفات.

الاتصال بالجهاز عن طريق تنفيذ: هذا

ttyUSB0 هو اسم المنفذ التسلسلي حيث يتم توصيل الجهاز.

قم بتغيير الدليل إلى / flash / lib باستخدام الأمر:

قرص مضغوط / فلاش / ليب

ضع كل الملفات مع الأوامر:

ضع uModBusConst.py

ضع uModBusFunctions.py ضع uModBusTCP.py ضع uModBusSerial.py

مثال

ثم اخرج من وحدة التحكم باستخدام أمر الخروج وأعد تشغيل الجهاز باستخدام زر إعادة الضبط.

2) Moduino Pycom

قم بتنزيل المكتبة من https://github.com/pycom/pycom-modbus/. قم بفك ضغط الأرشيف وإرسال محتوى دليل uModbus إلى الجهاز. استخدم mpfshell لتحميلها. قم بتشغيل هذا البرنامج في الدليل مع تلك الملفات.

الاتصال بالجهاز عن طريق تنفيذ:

افتح ttyUSB0

ttyUSB0 هو اسم المنفذ التسلسلي حيث يتم توصيل الجهاز.

قم بتغيير الدليل إلى / flash / lib ، وأنشئ دليل uModbus وأدخله بالأوامر:

cd / flash / libmd uModbus cd uModbus

ضع كل الملفات مع الأوامر:

ضع const.py

ضع function.py وضع tcp.py وضع serial.py

ثم اخرج من وحدة التحكم باستخدام أمر الخروج وأعد تشغيل الجهاز باستخدام زر إعادة الضبط.

مثال

الخطوة 5: الاتصال بالشبكة

اتصل بالشبكة
اتصل بالشبكة

تختلف أوامر إنشاء الاتصال بين Moduino و Pycom.

قم بالاتصال بالجهاز باستخدام picocom لتنفيذ الأوامر المناسبة. يمكنك توصيل جهاز Moduino بالشبكة عن طريق السلك أو اللاسلكي. تفترض الأمثلة التالية أن شبكتك لديها خادم DHCP يعمل.

في حالة أخرى ، لن يحصل الجهاز على عنوان IP. يتوفر دعم WiFi في كل Moduino. يعد منفذ Ethernet خيارًا ولا تتوفر به جميع الأجهزة.

1) Moduino ESP32

الاتصال بشبكة WiFi

قم بتنفيذ الأوامر التالية على الجهاز:

من netWiFi import netWiFiwifi = netWiFi (netWiFi. WIFI_STA، 'ESSID'، 'PASS') wifi.start ()

استبدل ESSID باسم شبكة WiFi الخاصة بك ، و PASS بكلمة المرور الخاصة بها.

بعد مرور بعض الوقت على تنفيذ start () ، يجب أن تحصل على عنوان IP الذي تم تعيينه لجهازك.

الاتصال بشبكة إيثرنت

قم بتوصيل الجهاز بشبكة سلكية باستخدام كابل إيثرنت.

ثم قم بتنفيذ الأوامر التالية:

من netETH import netETHeth = netETH () eth.start ()

بعد مرور بعض الوقت على تنفيذ start () ، يجب أن تحصل على عنوان IP الذي تم تعيينه لجهازك.

2) Moduino Pycom

اتصل بشبكة WiFi

قم بتنفيذ الأوامر التالية على الجهاز:

من استيراد الشبكة WLANwlan = WLAN (mode = WLAN. STA) nets = wlan.scan () للشبكات: if net.ssid == 'ESSID': print ('Network found!') wlan.connect (net.ssid ، auth = (net.sec، 'PASS')، timeout = 5000) بينما لم يكن wlan.isconnected (): machine.idle () print ('نجح اتصال WLAN!')

استبدل ESSID باسم شبكة WiFi الخاصة بك ، واستبدل PASS بكلمة المرور الخاصة بها.

الخطوة 6: بدء الاتصال باستخدام Modbus Slave

بدء الاتصال مع Modbus Slave
بدء الاتصال مع Modbus Slave

مكتبات Modbus Master متشابهة لكلا الجهازين

تختلف في التهيئة.

1) تهيئة uModBus على Moduino ESP32

ينفذ:

من uModBusTCP استيراد uModBusTCP كـ TCP

2) تهيئة uModBus على Pycom

ينفذ:

من uModbus.tcp استيراد TCP

فتح الاتصال

ثم افتح الاتصال بـ:

modbus = TCP ('IP'، PORT، 60)

أين:

  • IP - عنوان IP لجهاز الكمبيوتر الخاص بك مع Modbus Slave simulator
  • المنفذ - ميناء Modbus Slave
  • 60 مهلة

في حالة حدوث الخطأ التالي أثناء تنفيذ أوامر القراءة / الكتابة: EXAMPLE

ينفذ:

بالنسبة لـ Moduino ESP32:

modbus.close ()

من أجل Moduino Pycom:

modbus._sock.close ()

ثم أعد إنشاء الاتصال:

modbus = TCP ('IP'، PORT، 60)

هذا مهم لإغلاق المقبس قبل إعادة إنشاء الاتصال. لقد قام الجهاز بتقييد مقدار اتصال المقبس المتاح.

الخطوة 7: قراءة وكتابة السجلات

قراءة وكتابة السجلات
قراءة وكتابة السجلات

يدعم Modbus العديد من الوظائف لقراءة السجلات وكتابتها.

مكتبة uModBus لديها طريقة لكل وظيفة:

  1. قراءة_لفائف
  2. قراءة_المدخلات المنفصلة
  3. read_holding_registers
  4. قراءة_إدخال_سجلات
  5. write_single_coil
  6. الكتابة_التسجيل الفردي

أولا ، دعونا نكتب بعض القيم.

1) كتابة ملفات (func: 5)

اكتب 1 قيمة إلى 200 سجل من التابع 1:

modbus.write_single_coil (1 ، 200 ، 0xFF00)

الحجة الأولى لمعرف العبد ، في حالتنا 1.

الثاني هو رقم السجل و thirs قيمة. ل 1 عليك أن تضع 0xFF00 هنا. اكتب من 0 إلى 201 سجل من العبد 1:

modbus.write_single_coil (1، 201، 0)

تسمح هذه الطريقة بكتابة القيم المنطقية فقط: 0 أو 1.

2) كتابة السجلات (func: 6)

اكتب الآن بعض قيم الأعداد الصحيحة لعدة سجلات.

اكتب قيمة 111 موقعة لتسجيل 100 من العبد 1:

modbus.write_single_register (1 ، 100 ، 111 ، صحيح)

الوسيطة الأولى هي معرف الرقيق ورقم السجل الثاني والثالث قيمة جديدة. تحدد الوسيطة الأخيرة ما إذا كان يجب تعيين القيمة كرقم موقّع. القيمة الافتراضية لها هي True. لست بحاجة إلى ضبطه.

اكتب قيمة -457 موقعة إلى 101 سجل من التابع 1:

modbus.write_single_register (1 ، 101 ، -457)

اكتب قيمة 50 غير موقعة إلى 100 سجل من التابع 3:

modbus.write_single_register (3 ، 100 ، 50 ، خطأ)

تسمح هذه الطريقة بكتابة القيم الصحيحة لتسجيل واحد.

يمكن أن يحتوي السجل الفردي على قيم 16 بت.

طريقة إرجاع True هي قيمة الإدخال صحيحة و False إذا لم تكن كذلك. تتم كتابة القيمة حتى لو كانت غير صالحة (كبيرة جدًا للتسجيل)

3) قراءة ملفات / مدخلات منفصلة

الآن دعنا نقرأ القيم المنطقية المكتوبة. لقراءة التسجيل مع الوظيفة 1 ، قم بقراءة الملف ، قم بتنفيذ:

modbus.read_coils (slaveId، register، count) [0: count]

لقراءة التسجيل مع الوظيفة 2 ، اقرأ الإدخال المنفصل ، قم بتنفيذ:

modbus.read_discrete_inputs (slaveId، register، count) [0: count]

أين:

  • slave-id - معرف التابع الظاهري (Slave simulator يقبل جميع المعرفات الصالحة)
  • تسجيل - رقم التسجيل للقراءة
  • العد - عدد السجلات المراد قراءتها (ضع المبلغ المطلوب في كلا المكانين)

هذه الطرق ترجع مصفوفة ذات قيم منطقية. كل قيمة تتوافق مع كل سجل.

الجزء: [0: عدد] مطلوب ، لأن هذه الطريقة ترجع قيمًا أكثر من العدد. تقوم دائمًا بإرجاع مقدار القيم التي يمكن القسمة على 8. القيم الإضافية خاطئة ولا تتوافق مع أي سجل.

اقرأ قيمنا المنطقية بكلتا الطريقتين:

modbus.read_coils (1، 200، 2) [0: 2] modbus.read_discrete_inputs (1، 200، 2) [0: 2]

ستكون النتيجة كما يلي: EXAMPLE

صواب يشير إلى قيمة واحدة ، خطأ إلى 0.

4) قراءة السجلات

اقرأ الآن القيم من السجلات المكتوبة بوظيفة 6.

لقراءة السجلات ذات الوظيفة 3 ، اقرأ سجلات التعليق ، نفِّذ:

modbus.read_holding_registers (slaveId، register، count، موقّع = صحيح)

لقراءة السجلات التي تحتوي على الوظيفة 4 ، اقرأ سجلات الإدخال ، نفِّذ:

modbus.read_input_registers (slaveId، register، count، موقّع = صحيح)

أين:

  • slave-id - معرف العبد الظاهري
  • تسجيل - رقم التسجيل للقراءة
  • العد - عدد السجلات المراد قراءتها
  • موقعة - تشير إلى ما إذا كان يجب معاملة القيم المقروءة كأرقام موقعة أم لا. الحالة الافتراضية: صحيح

قيمة الإرجاع هي مجموعة مع المقدار المطلوب من السجلات.

قراءة السجلات المحددة في النقطة السابقة:

modbus.read_holding_registers (1، 100، 2، True) modbus.read_input_registers (1، 100، 2، True) modbus.read_holding_registers (3، 100، 1، False) modbus.read_input_registers (3، 100، 1، False)

يجب أن تبدو النتائج في لقطة الشاشة هذه: EXAMPLE

ستتعلم في الدرس التالي كيفية إنشاء Modbus RTU Master على جهاز يدعم ESP32.

موصى به: