- RS-485 الاتصال التسلسلي
- توصيل RS-485 بالاردوينو
- وحدة محول USB إلى RS-485
- ببساطة Modbus Master Software
- الادوات المطلوبة
- مخطط الرسم البياني
- برمجة Arduino UNO لـ RS-485 MODBUS Slave
- اختبار Arduino UNO كـ Rs485 Modbus Slave
Modbus هو بروتوكول اتصال تسلسلي تم اكتشافه بواسطة Modicon في عام 1979 ويستخدم لنقل البيانات عبر الخطوط التسلسلية بين الأجهزة الإلكترونية الصناعية. يستخدم RS-485 Modbus RS-485 لخطوط النقل. وتجدر الإشارة إلى أن مودبوس هو بروتوكول البرمجيات و ليس بروتوكول الأجهزة. وهي مقسمة إلى قسمين مثل Modbus Master و Modbus Slave. في شبكة RS-485 Modbus ، يوجد Master واحد و 127 Slaves لكل منهما عنوان فريد من 1 إلى 127. في مشروع MAX485 Arduino هذا ، سنستخدم Arduino Uno كعبد للاتصالات التسلسلية.
تستخدم Modbus في الغالب في PLCs (وحدات التحكم المنطقية القابلة للبرمجة). وبصرف النظر عن هذا ، يتم استخدام Modbus أيضًا في الرعاية الصحية والنقل وأتمتة المنازل وما إلى ذلك. يحتوي Modbus على 255 رمزًا وظيفيًا وهناك ثلاثة إصدارات شائعة من Modbus:
- مودبوس RTU
- مودبوس ASCII
- MODBUS / TCP
ما هو الفرق بين Modbus ASCII و Modbus RTU؟
يتحدث Modbus RTU و Modbus ASCII عن نفس البروتوكول. الاختلاف الوحيد هو أن البايتات التي يتم إرسالها عبر السلك يتم تقديمها على شكل ثنائي مع RTU وك ASCII قابل للقراءة مع Modbus RTU. سيتم استخدام Modbus RTU في هذا البرنامج التعليمي.
يدور هذا البرنامج التعليمي حول استخدام اتصال RS-485 Modbus مع Arduino UNO باعتباره Slave. هنا نقوم بتثبيت برنامج Simply Modbus Master في جهاز الكمبيوتر والتحكم في مصباحي LED ومحرك مؤازر باستخدام RS-485 كخط نقل. ترتبط مصابيح LED ومحرك سيرفو بـ Slave Arduino ويتم التحكم فيها عن طريق إرسال القيم باستخدام برنامج Master Modbus. نظرًا لأن هذا البرنامج التعليمي يستخدم RS-485 ، فمن المستحسن الانتقال أولاً عبر RS485 Serial Communication بين Arduino Uno و Arduino Nano. يمكن أيضًا استخدام RS485 مع وحدات تحكم أخرى للاتصال التسلسلي:
- RS-485 الاتصال التسلسلي بين Raspberry Pi و Arduino UNO
- الاتصال التسلسلي بين STM32F103C8 و Arduino UNO باستخدام RS-485
لنبدأ باستكشاف بعض المعلومات الأساسية حول RS-485 و Modbus. تعرف أيضًا على المزيد حول بروتوكولات الاتصال التسلسلي المختلفة هنا.
RS-485 الاتصال التسلسلي
RS-485 هو بروتوكول اتصال تسلسلي غير متزامن ولا يتطلب ساعة. يستخدم تقنية تسمى الإشارة التفاضلية لنقل البيانات الثنائية من جهاز إلى آخر.
إذن ما هي طريقة نقل الإشارة التفاضلية هذه ؟؟
تعمل طريقة الإشارة التفاضلية عن طريق إنشاء جهد تفاضلي باستخدام 5 فولت موجب وسالب. وهو يوفر نصف دوبلكس الاتصال عند استخدام اثنين من الأسلاك و كامل الازدواج يتطلب 4 أربع أسلاك.
باستخدام هذه الطريقة:
- يدعم RS-485 معدل نقل بيانات أعلى يبلغ 30 ميجابت في الثانية كحد أقصى.
- كما يوفر أقصى مسافة لنقل البيانات مقارنة ببروتوكول RS-232. ينقل البيانات حتى 1200 متر كحد أقصى.
- الميزة الرئيسية لـ RS-485 عبر RS-232 هي العبودية المتعددة مع Master واحد بينما تدعم RS-232 العبد الفردي فقط.
- يمكن أن يكون بحد أقصى 32 جهازًا متصلًا ببروتوكول RS-485.
- ميزة أخرى لـ RS-485 هي محصنة ضد الضوضاء لأنها تستخدم طريقة الإشارة التفاضلية للنقل.
- يعتبر RS-485 أسرع مقارنة ببروتوكول I2C.
توصيل RS-485 بالاردوينو
يمكن توصيل وحدة RS-485 بأي متحكم يحتوي على منفذ تسلسلي. لاستخدام وحدة RS-485 مع وحدات التحكم الدقيقة ، هناك حاجة إلى وحدة تسمى 5V MAX485 TTL إلى RS485 والتي تعتمد على Maxim MAX485 IC لأنها تسمح بالاتصال التسلسلي على مسافة طويلة تصل إلى 1200 متر. إنه ثنائي الاتجاه ونصف مزدوج ومعدل نقل بيانات يبلغ 2.5 ميغابت في الثانية. تتطلب هذه الوحدة جهدًا 5 فولت.
دبوس خارج من RS-485:
اسم الدبوس |
دبوس الوصف |
VCC |
5 فولت |
أ |
إدخال جهاز استقبال غير مقلوب إخراج سائق غير مقلوب |
ب |
عكس إدخال جهاز الاستقبال عكس إخراج السائق |
GND |
GND (0 فولت) |
R0 |
خرج جهاز الاستقبال (RX pin) |
إعادة |
خرج جهاز الاستقبال (تمكين منخفض) |
DE |
خرج السائق (عالي التمكين) |
دي |
مدخلات السائق (TX pin) |
وحدة محول USB إلى RS-485
هذه وحدة محول محول USB إلى RS485 تدعم WIN7 و XP و Vista و Linux و Mac OS وتوفر واجهة RS485 سهلة الاستخدام عن طريق استخدام منفذ COM في الكمبيوتر . هذه الوحدة هي جهاز التوصيل والتشغيل . لا توجد هياكل أوامر ، كل ما يتم إرساله إلى Virtual COM Port يتم تحويله تلقائيًا إلى RS485 والعكس صحيح. الوحدة تعمل بالطاقة الذاتية بالكامل من ناقل USB. لذلك ، لا حاجة إلى مصدر طاقة خارجي للتشغيل.
يظهر كمنفذ تسلسلي / COM ويمكن الوصول إليه من التطبيقات أو المحطة الطرفية. يوفر هذا المحول اتصال RS-485 أحادي الاتجاه. نطاق معدل الباود هو 75 بت في الثانية إلى 115200 بت في الثانية ، بحد أقصى 6 ميجابت في الثانية.
لاستخدام هذا الجهاز ، يتوفر العديد من برامج Modbus على الإنترنت. في هذا البرنامج التعليمي ، يتم استخدام برنامج يسمى Simply Modbus Software.
ببساطة Modbus Master Software
مطلوب تطبيق Modbus Master Software لإرسال البيانات إلى جهاز Modbus RS-485 Arduino التابع عبر COM.
ببساطة Modbus Master هو برنامج اختبار اتصال البيانات. يمكنك تنزيل برنامج Simply Modbus Master من الرابط المحدد ومعرفة المزيد عنه من خلال الرجوع إلى دليل البرنامج.
قبل استخدام البرنامج ، من المهم التعرف على المصطلحات التالية.
معرف الرقيق:
يتم تخصيص عنوان وحدة فريد لكل تابع في الشبكة من 1 إلى 127. عندما يطلب الرئيسي البيانات ، فإن البايت الأول الذي يرسله هو العنوان التابع. بهذه الطريقة يعرف كل عبد بعد البايت الأول ما إذا كان يتجاهل الرسالة أم لا.
كود الوظيفة:
البايت الثاني الذي يرسله السيد هو رمز الوظيفة. يخبر هذا الرقم العبد بالجدول الذي يجب الوصول إليه وما إذا كان يجب القراءة منه أو الكتابة إليه.
رموز وظيفة التسجيل المعتمدة:
كود الوظيفة |
عمل |
اسم الطاولة |
04 (04 ست عشري) |
اقرأ |
تسجيلات المدخلات التناظرية |
03 (03 ست عشري) |
اقرأ |
سجلات عقد المخرجات التناظرية |
06 (06 ست عشري) |
اكتب واحد |
سجل عقد المخرجات التناظرية |
16 (10 ست عشري) |
اكتب عدة |
سجلات عقد المخرجات التناظرية |
رموز وظيفة الملف المدعومة:
كود الوظيفة |
عمل |
اسم الطاولة |
02 (02 ست عشري) |
اقرأ |
جهات اتصال الإدخال المنفصلة |
01 (01 ست عشري) |
اقرأ |
ملفات الإخراج المنفصلة |
05 (05 ست عشري) |
اكتب واحد |
ملف الإخراج المنفصل |
15 (0F ست عشري) |
اكتب عدة |
ملفات الإخراج المنفصلة |
اتفاقية حقوق الطفل:
CRC تعني فحص التكرار الدوري. وهي عبارة عن 2 بايت تضاف إلى نهاية كل رسالة Modbus لاكتشاف الخطأ.
الادوات المطلوبة
المعدات
- اردوينو UNO
- وحدة تحويل MAX-485 TTL إلى RS-485
- وحدة محول USB إلى RS-485
- ال اي دي (2)
- 1k- المقاوم (2)
- شاشة LCD مقاس 16 × 2
- 10 كيلو الجهد
- محرك سيرفو SG-90
البرمجيات
- ببساطة Modbus Master
مخطط الرسم البياني
توصيل الدائرة بين وحدة تحويل MAX-485 TTL إلى وحدة المحول RS-485 و Arduino UNO:
اردوينو UNO |
وحدة تحويل MAX-485 TTL إلى RS-485 |
0 (RX) |
RO |
1 (تكساس) |
دي |
4 |
DE & RE |
+ 5 فولت |
VCC |
GND |
GND |
توصيل الدائرة بين MAX-485 TTL إلى RS-485 Module ومحول USB إلى RS-485:
MAX-485 TTL إلى RS-485 وحدة المحول |
USB إلى وحدة RS-485 متصل بجهاز الكمبيوتر |
أ |
أ |
ب |
ب |
توصيلات الدائرة بين Arduino UNO وشاشة LCD مقاس 16x2:
16x2 LCD |
اردوينو UNO |
VSS |
GND |
VDD |
+ 5 فولت |
V0 |
للتحكم في دبوس مقياس الجهد للتحكم في التباين / السطوع لشاشة LCD مقاس 16 × 2 |
RS |
8 |
RW |
GND |
ه |
9 |
د 4 |
10 |
د 5 |
11 |
د 6 |
12 |
د 7 |
13 |
أ |
+ 5 فولت |
ك |
GND |
توصيل الدائرة بين 2 LED ومحرك سيرفو و Arduino UNO:
اردوينو UNO |
LED1 |
LED2 |
أجهزة السيارات |
2 |
الأنود من خلال المقاوم 1 كيلو |
- |
- |
5 |
- |
الأنود من خلال المقاوم 1 كيلو |
- |
6 |
- |
- |
دبوس PWM (برتقالي) |
+ 5 فولت |
- |
- |
+5 فولت (أحمر) |
GND |
الكاثود GND |
الكاثود GND |
GND (بني) |
برمجة Arduino UNO لـ RS-485 MODBUS Slave
تم تكوين Arduino UNO ليكون Modbus Slave. أيضًا ، Arduino UNO مرفق بمصباحين LED ومحرك سيرفو واحد. لذلك يتم التحكم في العبد Arduino من Master Modbus Software. يتم الاتصال بين Arduino UNO و Modbus Master Software باستخدام وحدة RS-485. لتوصيله بجهاز الكمبيوتر ، يتم استخدام وحدة محول USB إلى RS-485. و Arduino UNO مع وحدة تحويل MAX-485 TTL إلى RS-485 ، سيبدو الملف كالتالي:
لاستخدام Modbus في Arduino UNO ، مكتبة
في البداية ، قم بتضمين المكتبة المطلوبة. مكتبة ModbusRTU مخصصة لاستخدام اتصالات RS-485 Modbus ، ومكتبة الكريستال السائل مخصصة لاستخدام LCD مع Arduino UNO ، ومكتبة المؤازرة مخصصة لاستخدام محرك سيرفو مع Arduino UNO.
#تضمن
الآن يتم تعريف دبابيس الأنود LED المتصلة بدبابيس Arduino 2 و 5 على أنها LED1 و LED2.
#define led1 2 # تعريف led2 5
بعد ذلك ، يتم الإعلان عن الكائن للوصول إلى فئة الكريستال السائل مع دبابيس LCD (RS ، E ، D4 ، D5 ، D6 ، D7) المتصلة بـ Arduino UNO.
LiquidCrystal LCD (8،9،10،11،12،13) ؛
عند الانتهاء من LCD ، تهيئة كائن مؤازر لفئة Servo. أيضا تهيئة كائن الناقل للفئة Modbus.
أجهزة مؤازرة حافلة مودبوس
بعد ذلك لتخزين قيم اتصالات Modbus ، يتم الإعلان عن المصفوفة بالقيم الثلاث التي تمت تهيئتها بصفر.
uint16_t modbus_array = {0،0،0} ؛
في وظيفة الإعداد ، يتم أولاً ضبط شاشة LCD في وضع 16x2 ويتم عرض رسالة ترحيب ومسحها.
lcd.begin (16.2) ؛ // شاشة LCD مضبوطة في وضع 16x2 lcd.print ("RS-485 Modbus") ؛ // Welcome Message lcd.setCursor (0،1) ؛ lcd.print ("Arduino Slave") ؛ تأخير (5000) ؛ lcd.clear () ؛
بعد ذلك ، يتم تعيين دبابيس LED1 و LED2 كدبابيس إخراج.
pinMode (led1 ، الإخراج) ؛ pinMode (led2 ، الإخراج) ؛
تم توصيل دبوس النبض المؤازر المتصل بـ PWM pin 6 من Arduino.
مؤازرة (6) ؛
الآن بالنسبة لاتصال Modbus ، تم تعيين المعلمات التالية. الأول يمثل "1" معرف الرقيق ، والثاني "1" يمثل أنه يستخدم RS-485 لنقل البيانات و "4" يمثل RS-485 DE&RE pin المتصل بـ Arduino UNO.
الحافلة = Modbus (1،1،4) ؛
تم ضبط Modbus التابع على 9600 باودرات.
تبدأ الحلقة بتعريف استطلاع bus ويستخدم bus.poll () لكتابة واستلام القيمة من Modbus الرئيسي.
bus.poll (modbus_array، sizeof (modbus_array) / sizeof (modbus_array)) ؛
تُستخدم هذه الطريقة للتحقق مما إذا كانت هناك أي بيانات متوفرة في المنفذ التسلسلي.
إذا كانت هناك أي بيانات متاحة في المنفذ التسلسلي ، فستقوم مكتبة Modbus RTU بفحص الرسالة (تحقق من عنوان الجهاز وطول البيانات و CRC) وتنفيذ الإجراء المطلوب.
على سبيل المثال ، لكتابة أو قراءة أي قيمة من المستوى الرئيسي ، يجب أن تتلقى ModbusRTU مصفوفة عدد صحيح 16 بت بدون إشارة وطولها من Master Modbus. تحمل هذه المصفوفة البيانات المكتوبة من السيد.
يوجد في هذا البرنامج التعليمي ثلاث مصفوفات لزاوية محرك مؤازر LED1 و LED2.
أولاً ، يتم استخدام modbus_array لتشغيل أو إيقاف تشغيل LED1.
if (modbus_array == 0) // يعتمد على القيمة في modubus_array التي كتبها Master Modbus { digitalWrite (led1، LOW) ؛ // LED OFF إذا 0 lcd.setCursor (0،0) ؛ lcd.print ("L1: إيقاف") ؛ } else { digitalWrite (led1، HIGH)؛ // LED ON إذا كانت القيمة بخلاف 0 lcd.setCursor (0،0) ؛ lcd.print ("L1: ON") ؛ }
بجانب تشغيل أو إيقاف تشغيل ، يتم استخدام modbus_array LED2.
if (modbus_array == 0) // يعتمد على القيمة في modbus_array التي كتبها Master Modbus { digitalWrite (led2، LOW) ؛ // LED OFF إذا كان 0 lcd.setCursor (8،0) ؛ lcd.print ("L2: إيقاف") ؛ } else { digitalWrite (led2، HIGH)؛ // LED ON إذا كانت القيمة بخلاف 0 lcd.setCursor (9،0) ؛ lcd.print ("L2: ON") ؛ }
بجانب ضبط زاوية محرك سيرفو ، يتم استخدام modbus_array ويتم طباعة القيمة على شاشة LCD مقاس 16 × 2.
int pwm = modbus_array ؛ مؤازرة الكتابة (pwm) ؛ lcd.setCursor (0،1) ؛ lcd.print ("زاوية مؤازرة:") ؛ lcd.print (pwm) ؛ تأخير (200) ؛ lcd.clear () ؛
هذا ينتهي ببرمجة Arduino UNO للعمل به كـ MODBUS Slave. ستكون الخطوة التالية هي اختباره على أنه Modbus Slave.
اختبار Arduino UNO كـ Rs485 Modbus Slave
بعد اكتمال توصيلات الدائرة وتحميل الكود إلى Arduino UNO ، حان الوقت لتوصيل USB بوحدة RS-485 بالكمبيوتر حيث يتم تثبيت برنامج Simple Modbus Master.
افتح مدير الجهاز وتحقق من منفذ COM وفقًا لجهاز الكمبيوتر الخاص بك حيث يتم توصيل USB إلى RS-485 Module وبعد ذلك افتح برنامج Simply Modbus Master 8.1.1.
1. بعد فتح برنامج Simply Modbus الآن ، افتح خيار الكتابة.
2. بعد فتح برنامج Simply Modbus Master Write. اضبط المعلمات
الوضع في RTU ، منفذ COM وفقًا لجهاز الكمبيوتر الخاص بك (كان لي هو COM6) ، Baud عند 9600 ، بتات البيانات 8 ، بت التوقف 1 ، بلا تماثل ومعرف الرقيق مثل 1.
3. بعد ذلك قم بتعيين التسجيل الأول كـ 40001 والقيم المراد كتابتها هي 3 ورمز الوظيفة كـ 16 (اكتب سجل الحفظ).
بعد ذلك ، اكتب 1 إلى 40001 (لـ LED1 قيد التشغيل) ومن 1 إلى 40002 (لـ LED2 قيد التشغيل) ومن 90 إلى 40003 (لزاوية محرك سيرفو) ثم انقر فوق الزر إرسال.
يمكنك رؤية حالة LED قيد التشغيل وزاوية المؤازرة بزاوية 90 درجة.
4. بعد ذلك أدخل 40001 كـ 1 و 40002 كـ 0 و 40003 كـ 180 وانقر فوق الزر إرسال.
5. الآن اكتب 135 إلى 40003 و 40001 كـ 0 و 40002 كـ 1.
هذه هي الطريقة التي يمكن بها استخدام RS-485 Modbus في الاتصال التسلسلي مع Arduino UNO باعتباره Slave. في البرنامج التعليمي التالي ، سوف نستخدم Arduino Uno كسيد في MODBUS commination.
ابحث عن الكود الكامل وفيديو توضيحي أدناه.