- תקשורת טורית RS-485
- חיבור RS-485 עם Arduino
- מודול ממיר USB ל- RS-485
- פשוט תוכנת מאסטר Modbus
- כלים נדרשים
- תרשים מעגל
- תכנות Arduino UNO עבור עבד MODBUS RS-485
- בודקים את ארדואינו UNO כעבד Modbus Rs485
מודבוס הוא פרוטוקול תקשורת טורית שהתגלה על ידי מודיקון בשנת 1979 והוא משמש להעברת נתונים בקווים טוריים בין המכשירים האלקטרוניים התעשייתיים. RS-485 Modbus משתמש ב- RS-485 עבור קווי תמסורת. יצוין כי Modbus הוא פרוטוקול תוכנה ואת לא פרוטוקול חומרה. הוא מחולק לשני חלקים כגון Modbus Master ו- Modbus Slave. ברשת RS-485 Modbus יש מאסטר אחד ו -127 עבדים שלכל אחד מהם כתובת ייחודית מ -1 עד 127. בפרויקט זה של MAX485 Arduino, נשתמש ב- Arduino Uno כעבד לתקשורת סדרתית.
Modbus משמשים בעיקר ב- PLCs (בקרי לוגיקה ניתנים לתכנות). ומלבד זאת, המודבוס משמש גם בבריאות, תחבורה, אוטומציה ביתית וכו 'במודבוס יש 255 קודי פונקציה ויש בעיקר שלוש גרסאות פופולריות למודבוס:
- MODBUS RTU
- MODBUS ASCII
- MODBUS / TCP
מה ההבדל בין Modbus ASCII לבין Modbus RTU?
Modbus RTU ו- Modbus ASCII מדברים על אותו פרוטוקול. ההבדל היחיד הוא שבתים המועברים דרך החוט מוצגים כבינאריים עם RTU וכ ASCII קריא עם Modbus RTU. Modbus RTU ישמש במדריך זה.
הדרכה זו עוסקת בשימוש בתקשורת RS-485 Modbus עם ארדואינו UNO כעבד. כאן אנו מתקינים תוכנת מאסטר פשוט של מחשב במחשב ושולטים בשני נוריות ומנוע סרוו באמצעות RS-485 כקו העברה. נוריות LED ומנוע סרוו זה מחוברים ל- Slave Arduino ונשלטים על ידי שליחת ערכים באמצעות תוכנת Master Modbus. מכיוון שמדריך זה משתמש ב- RS-485, מומלץ לעבור תחילה על תקשורת טורית RS485 בין Arduino Uno ו- Arduino Nano. ניתן להשתמש ב- RS485 גם עם בקרים אחרים לתקשורת סדרתית:
- תקשורת טורית RS-485 בין Raspberry Pi ו- Arduino UNO
- תקשורת טורית בין STM32F103C8 ל- Arduino UNO באמצעות RS-485
נתחיל בחקר רקע כלשהו על ה- RS-485 ומודבוס. למידע נוסף על פרוטוקולים שונים של תקשורת טורית כאן.
תקשורת טורית RS-485
RS-485 הוא פרוטוקול תקשורת סדרתי אסינכרוני שאינו דורש שעון. היא משתמשת בטכניקה הנקראת אות דיפרנציאלי להעברת נתונים בינאריים ממכשיר אחד לאחר.
אז מהי שיטת העברת אות דיפרנציאלית זו ??
שיטת אות הדיפרנציאל פועלת על ידי יצירת מתח דיפרנציאלי באמצעות 5V חיובי ושלילי. הוא מספק תקשורת חצי דופלקס בעת שימוש בשני חוטים ו- Full-Duplex דורש 4 חוטי ארבע.
באמצעות שיטה זו:
- RS-485 תומך בקצב העברת נתונים גבוה יותר של מקסימום 30 מגה לשנייה.
- הוא גם מספק מרחק העברת נתונים מרבי בהשוואה לפרוטוקול RS-232. הוא מעביר נתונים עד למקסימום 1200 מטר.
- היתרון העיקרי של RS-485 על פני RS-232 הוא עבד מרובה עם מאסטר יחיד ואילו RS-232 תומך בעבד יחיד בלבד.
- יכול להיות לכל היותר 32 מכשירים המחוברים לפרוטוקול RS-485.
- יתרון נוסף של ה- RS-485 הוא חסין מפני הרעש כאשר הם משתמשים בשיטת אות דיפרנציאלית להעברה.
- RS-485 מהיר יותר בהשוואה לפרוטוקול I2C.
חיבור RS-485 עם Arduino
ניתן לחבר את מודול RS-485 לכל מיקרו-בקר בעל יציאה טורית. לשימוש במודול RS-485 עם מיקרו-בקרים, יש צורך במודול בשם 5V MAX485 TTL ל- RS485 המבוסס על Maxim MAX485 IC מכיוון שהוא מאפשר תקשורת טורית למרחקים ארוכים של 1200 מטר. זה דו כיווני וחצי דופלקס ויש לו קצב העברת נתונים של 2.5 Mbps. מודול זה דורש מתח של 5 וולט.
Pin-Out של RS-485:
שם סיכה |
תיאור סיכה |
VCC |
5V |
א |
קלט מקלט לא הפוך פלט נהג שאינו הפוך |
ב |
היפוך קלט מקלט הפיכת פלט הנהג |
GND |
GND (0V) |
R0 |
מקלט (פין RX) |
מִחָדָשׁ |
פלט מקלט (LOW-Enable) |
DE |
פלט נהג (HIGH-Enable) |
DI |
קלט נהג (פין TX) |
מודול ממיר USB ל- RS-485
זהו מודול מתאם ממיר USB ל- RS485 התומך בתומך WIN7, XP, Vista, Linux, Mac OS ומספק ממשק RS485 קל לשימוש באמצעות שימוש ביציאת COM במחשב . מודול זה הוא מכשיר plug-and-play . אין מבני פקודה, כל מה שנשלח ליציאת ה- COM הווירטואלי מומר אוטומטית ל- RS485 ולהיפך. המודול מופעל לחלוטין מאוטובוס ה- USB. לכן, אין צורך באספקת חשמל חיצונית להפעלה.
זה מופיע כיציאה טורית / COM ונגיש מאפליקציות או מהטרמינל. ממיר זה מספק תקשורת RS-485 עם חצי דופלקס. טווח קצב השידור הוא 75 bps עד 115200 bps, מקסימום עד 6 Mbps.
לשימוש במכשיר זה קיימות תוכנות Modbus שונות באינטרנט. במדריך זה משתמשים בתוכנה הנקראת Simply Modbus Software.
פשוט תוכנת מאסטר Modbus
יש צורך ביישום תוכנת מאסטר Modbus כדי לשלוח נתונים למכשיר Modbus RS-485 Arduino עבד באמצעות COM.
פשוט מודבוס מאסטר היא תוכנת בדיקת תקשורת נתונים. באפשרותך להוריד את ה- Master Modbus פשוט מהקישור הנתון וללמוד עליו יותר על ידי עיון במדריך התוכנה.
לפני השימוש בתוכנה, חשוב להכיר את המינוחים הבאים.
מזהה עבד:
לכל עבד ברשת מוקצית כתובת יחידה ייחודית מ -1 עד 127. כאשר המאסטר מבקש נתונים, הבית הראשון שהוא שולח הוא כתובת ה- Slave. בדרך זו כל עבד יודע לאחר הבית הראשון אם להתעלם מההודעה או לא.
קוד פונקציה:
הבית השני שנשלח על ידי המאסטר הוא קוד ה- Function. מספר זה אומר לעבד לאיזה טבלה לגשת והאם לקרוא או לכתוב לטבלה.
קודי פונקציה של רישום נתמכים:
קוד פונקציה |
פעולה |
שם שולחן |
04 (04 hex) |
לקרוא |
רושמי קלט אנלוגיים |
03 (03 hex) |
לקרוא |
רושמי החזקת תפוקה אנלוגית |
06 (06 hex) |
כתוב יחיד |
פנקס אחזקות תפוקה אנלוגית |
16 (10 משושה) |
כתוב מספר רב |
רושמי החזקת תפוקה אנלוגית |
קודי פונקצית סליל נתמכים:
קוד פונקציה |
פעולה |
שם שולחן |
02 (02 hex) |
לקרוא |
אנשי קשר קלט בדידים |
01 (01 hex) |
לקרוא |
סלילי פלט בדידים |
05 (05 hex) |
כתוב יחיד |
סליל פלט דיסקרטי |
15 (משושה 0F) |
כתוב מספר רב |
סלילי פלט בדידים |
CRC:
CRC מייצג בדיקת יתירות מחזורית. זה שני בתים שנוספו בסוף כל הודעת Modbus לזיהוי שגיאות.
כלים נדרשים
חוּמרָה
- ארדואינו UNO
- מודול ממיר MAX-485 TTL ל- RS-485
- מודול ממיר USB ל- RS-485
- נורת LED (2)
- נגד 1k (2)
- תצוגת LCD 16x2
- פוטנציומטר 10k
- מנוע סרוו SG-90
תוֹכנָה
- פשוט מודבוס מאסטר
תרשים מעגל
חיבור מעגל בין MAX-485 TTL למודול ממיר RS-485 לבין Arduino UNO:
ארדואינו UNO |
מודול ממיר MAX-485 TTL ל- RS-485 |
0 (RX) |
RO |
1 (TX) |
DI |
4 |
DE & RE |
+ 5 וולט |
VCC |
GND |
GND |
חיבור מעגל בין MAX-485 TTL למודול RS-485 לבין ממיר USB ל- RS-485:
MAX-485 TTL ל- RS-485 מודול ממיר |
מודול USB ל- RS-485 מחובר למחשב |
א |
א |
ב |
ב |
חיבורי מעגל בין Arduino UNO לתצוגת LCD 16x2:
LCD בגודל 16x2 |
ארדואינו UNO |
VSS |
GND |
VDD |
+ 5 וולט |
V0 |
לבקרת סיכה של פוטנציומטר לבקרת ניגודיות / בהירות של 16x2 LCD |
RS |
8 |
RW |
GND |
ה |
9 |
D4 |
10 |
D5 |
11 |
D6 |
12 |
D7 |
13 |
א |
+ 5 וולט |
ק |
GND |
חיבור מעגל בין 2 נוריות, מנוע סרוו ו- Arduino UNO:
ארדואינו UNO |
LED1 |
LED2 |
מנוע סרוו |
2 |
אנודה דרך הנגד 1k |
- |
- |
5 |
- |
אנודה דרך הנגד 1k |
- |
6 |
- |
- |
סיכת PWM (כתום) |
+ 5 וולט |
- |
- |
+ 5 וולט (אדום) |
GND |
קתודה GND |
קתודה GND |
GND (חום) |
תכנות Arduino UNO עבור עבד MODBUS RS-485
UNO Arduino מוגדר כעבד Modbus. כמו כן, Arduino UNO מחובר עם שני נוריות LED ומנוע סרוו אחד. אז העבד Arduino נשלט מתוכנת Master Modbus. התקשורת בין ארדוינו UNO לבין תוכנת Master Modbus מתבצעת באמצעות מודול 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.
# הגדר led1 2 # הגדר led2 5
בשלב הבא מוכרז האובייקט לגישה לכיתת גביש נוזלי באמצעות סיכות LCD (RS, E, D4, D5, D6, D7) המחוברות ל- Arduino UNO.
LiquidCrystal lcd (8,9,10,11,12,13);
לאחר סיום ה- LCD, אתחל את אובייקט הסרוו עבור הכיתה סרוו. גם אתחל את אובייקט האוטובוסים עבור הכיתה Modbus.
סרוו סרוו; אוטובוס מודבוס;
הבא לאחסון ערכים לתקשורת Modbus מוכרז מערך עם שלושת הערכים מאותחל באפס.
uint16_t modbus_array = {0,0,0};
בשנת התקנת פונקציה, ראשית LCD מוגדר במצב 16x2 ו הודעת ברכה מוצגת ופינה.
lcd.begin (16,2); // Lcd מוגדר במצב 16x2 lcd.print ("RS-485 Modbus"); // הודעת קבלת פנים lcd.setCursor (0,1); lcd.print ("עבד ארדואינו"); עיכוב (5000); lcd.clear ();
לאחר מכן, סיכות LED1 ו- LED2 מוגדרות כסיכות פלט.
pinMode (led1, OUTPUT); pinMode (led2, OUTPUT);
סיכת הדופק סרוו המחוברת לסיכת PWM 6 של Arduino מחוברת.
servo.attach (6);
כעת עבור תקשורת המודבוס מוגדרים הפרמטרים הבאים. הראשון '1' מייצג את מזהה העבדים, השני '1' מייצג שהוא משתמש ב- RS-485 כדי להעביר נתונים ו- '4' מייצג את ה- PIN של RS-485 DE&RE המחובר ל- Arduino UNO.
אוטובוס = מודבוס (1,1,4);
עבד המודבוס נקבע על 9600 שידור.
הלולאה מתחילה בהגדרה של סקר אוטובוסים ו- bus.poll () משמש לכתיבה וקבלת ערך מה- Modbus הראשי.
bus.poll (modbus_array, sizeof (modbus_array) / sizeof (modbus_array));
שיטה זו משמשת כדי לבדוק אם קיימים נתונים ביציאה הטורית.
אם ישנם נתונים זמינים ביציאה הטורית, ספריית ה- Modbus RTU תבדוק את ההודעה (תבדוק את כתובת המכשיר, אורך הנתונים ו- CRC) ותבצע את הפעולה הנדרשת.
לדוגמא כדי לכתוב או לקרוא ערך כלשהו ממאסטר, על ModbusRTU לקבל מערך שלם של 16 סיביות לא חתום ואורכו ממאסטר מודבוס. מערך זה נושא את הנתונים שנכתבים מהמאסטר.
במדריך זה ישנם שלושה מערכים לזווית מנוע LED1, LED2 וסרוו.
ראשית כדי להפעיל או לכבות את השימוש ב- LED1 modbus_array.
אם (modbus_array == 0) // תלוי בערך ב- modubus_array שנכתב על ידי Master Modbus { digitalWrite (led1, LOW); // LED OFF אם 0 lcd.setCursor (0,0); lcd.print ("L1: OFF"); } אחר { digitalWrite (led1, HIGH); // נורית LED אם ערך שאינו 0 lcd.setCursor (0,0); lcd.print ("L1: ON"); }
ליד הפעלה או כיבוי משתמשים ב- LED2 modbus_array.
אם (modbus_array == 0) // תלוי בערך ב- modbus_array שנכתב על ידי Master Modbus { digitalWrite (led2, LOW); // נורית כבויה אם 0 lcd.setCursor (8,0); lcd.print ("L2: OFF"); } אחר { digitalWrite (led2, HIGH); // נורית LED אם ערך שאינו 0 lcd.setCursor (9,0); lcd.print ("L2: ON"); }
לצד הגדרת הזווית של מנוע הסרוו מודב_מערך המשמש והערך מודפס בתצוגת LCD 16x2.
int pwm = modbus_array; servo.write (pwm); lcd.setCursor (0,1); lcd.print ("זווית סרוו:"); lcd.print (pwm); עיכוב (200); lcd.clear ();
זה מסיים את התכנות Arduino UNO לעבודה בתור עבד MODBUS. השלב הבא יהיה לבדוק את זה כעבד Modbus.
בודקים את ארדואינו UNO כעבד Modbus Rs485
לאחר השלמת חיבורי המעגל והעלאת הקוד ל- Arduino UNO, הגיע הזמן לחבר את ה- USB למודול RS-485 עם המחשב שבו מותקנת תוכנת ה- Modbus Master Simple.
פתח את מנהל ההתקנים ובדוק את יציאת ה- COM בהתאם למחשב האישי שלך שבו מחובר מודול ה- USB ל- RS-485 ולאחר מכן פתח את תוכנת ה- Simply Modbus Master 8.1.1.
1. לאחר פתיחת תוכנת פשוט Modbus כעת פתח את אפשרות הכתיבה.
2. לאחר פתיחת כתיבת מאסטר ה- Simply Modbus . הגדר את הפרמטרים
מצב ב- RTU, יציאת COM בהתאם למחשב האישי שלך (שלי היה COM6), Baud ב- 9600, Data Bits 8, Bit bit 1, Parity None ו- Slave ID כ- 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 כעבד. במדריך הבא נשתמש ב- Arduino Uno כמאסטר בהתחלת MODBUS.
מצא את הקוד המלא וסרטון ההפגנה למטה.