תקשורת טורית עם עיבוד

תקשורת טורית עם עיבוד

תקשורת טורית עם עיבוד

הכיתה הסדרתית

הפעולות לשימוש בתקשורת טורית תהליך מוגדרים בכיתה Serial.הפעולה הראשונה שיש לבצע כדי להשתמש בהם בתוכנית (סקיצה) יהיה לשלב אותו בקוד עם import processing.serial.*;.

תוכן עניינים

    מעמד Serial יש לו חמישה בנאים שונים בהתאם לפרמטרים המצוינים. הפרמטר היחיד הנדרש הוא אובייקט האב (הורה) שבדרך כלל מתאימה לתוכנית הראשית (נגיד, חלון התוכנית) של הכיתה PApplet. כרגיל ההורה יהיה התוכנית הנכתבת (ה סקיצה הנוכחי), הערך של פרמטר חובה ראשון זה יהיה this.

    חמשת הפרמטרים האחרים שניתן להעביר לבנאי הם ① המהירות, ② שם היציאה הטורית ③ ה שִׁוּוּי בשימוש בפרוטוקול, ④ סיביות הנתונים ו⑤ סיביות העצירה. הפרמטרים המועברים בתדירות הגבוהה ביותר, בנוסף לאובייקט האב הנדרש, הם שם היציאה והמהירות.

    La מהירות תקשורת טורית הוא מספר שלם (int) מאשר ברירת המחדל היא הערך 9600 אם פרמטר זה לא מועבר לבנאי.

    יציאות טוריות זמינות. שיטת הרשימה

    El שם הנמל יש את הצורה שנקבעה על ידי המערכת, בדרך זו, למשל ב הפצות לינוקס זה יהיה משהו כמו /dev/ttyS4 / dev / ttyACM3 o /dev/ttyUSB1 (תלוי בסוג היציאה), בעוד שב-Windows זה יהיה משהו כמו COM12. אלא אם כן יציאה משויכת פיזית למכשיר, התוכנית בדרך כלל לא תדע באיזו יציאה להשתמש. דרך נפוצה לבחירת היציאה היא לקבל רשימה של היציאות הזמינות, להציג אותה למשתמש ולאפשר לו לבחור את היציאה שבה הוא רוצה להשתמש. השיטה Serial.list() מחזיר וקטור של מחרוזות טקסט (String) עם שמות היציאות הזמינות במערכת.

    היציאה המשמשת כברירת מחדל על ידי הספרייה Serial הוא הראשון מבין אלה המוחזרים בשיטה list (בוודאות COM1 ב- Windows או /dev/ttyS0 en גנו / לינוקס). למעט בהקשרים מוגבלים מאוד שבהם החומרה שאיתה עובדים ידועה לחלוטין (כגון מערכת במצב קיוסק), היא בדרך כלל לא מושמטת ויציאת היעד מצוינת במפורש.

    מעבד לינוקס טורית יציאת רשימה טורית ttyACM ttyS ttyUSB

    צילום המסך למעלה מציג את הפלט של מערכת גנו / לינוקס בעל ארבע יציאות טוריות RS-232 (ttyS0 a ttyS3) וחמישה מתאמים משני סוגים (ttyACM0 a ttyACM1 y ttyUSB0 a ttyUSB2).

    הרשאות התקנים טוריים של לינוקס ttyACM ttyS ttyUSB

    על מנת לגשת ליציאות הטוריות, המשתמש חייב להשתייך לקבוצה שאליה המערכת מקצה אותן, בדרך כלל tty o חיוג חיוג. בצילום המסך של התמונה למעלה אתה יכול לראות שהיציאות הטוריות הרשומות עם ls /dev/tty[ASU]* -la שייכים לקבוצה חיוג חיוג שיש להם הרשאות גישה לקריאה וכתיבה.

    פרמטרים של פרוטוקול סדרתי

    La שִׁוּוּי של תקשורת טורית בא לידי ביטוי ב תהליך בתור דמות (char) שיכול לקחת את הערכים: ① N (אף לא אחד) כדי לא לזהות את שִׁוּוּי, ② E (גם) כדי לציין כי קצת זוגיות שווה, ③ O (מוזר) כדי לציין כי קצת זוגיות הוא מוזר, ④ M (סימן) כדי להפוך תמיד לאפס את קצת זוגיות ו- ⑤ S (שטח) לעשות תמיד אחד את קצת זוגיות. ערך ברירת המחדל, אם לא מועבר לבנאי כפרמטר, הוא N (חטא שִׁוּוּי).

    מספר פיסות מידע, שהוא שמונה כברירת מחדל, מציין את מספר הביטים המרכיבים את מטען הנתונים נטו (הנקרא תו או לפעמים מילה) שמועבר בכל יחידה בסיסית של המסגרת. הפרמטר המציין את מספר סיביות הנתונים מבוטא כמספר שלם (int).

    לבסוף, הפרמטר החמישי האפשרי מציין את משך הציון הסופי, מבוטא כ פיסות לעצור (פיסות לעצור), אשר מצוין כמספר המיוצג ב נקודה צפה (float) שיכול לקחת את הערכים 1.0 (ערך ברירת המחדל אם הפרמטר לא מועבר לבנאי), 1.5, או 2.0.

    בונים של הכיתה הסדרתית

    הרשימה הבאה מציגה את השילובים השונים של פרמטרים שניתן להעביר לבנאי המחלקה Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    סיום תקשורת טורית. שיטת העצירה.

    כדי לשחרר את היציאה הטורית, שהוקצתה בעת המופע Serial, וכי יישומי מערכת אחרים יכולים להשתמש בו, התקשורת מופסקת בשיטה stop, שאינו מקבל פרמטרים.

    שלח נתונים דרך היציאה הטורית. שיטת הכתיבה

    כדי לשלוח נתונים, הכיתה Serial de תהליך משלבת את השיטה write שאיתם ניתן להעביר מחרוזות טקסט ① (String), ② בתים או וקטורים ③ בתים (byte[]). מעניין לזכור את זה byte en תהליךJava) מייצג מספר שלם בין -128 ל-127 וכברירת מחדל, מחרוזות משתמשות בקידוד Utf-16.

    קרא נתונים מיציאה טורית

    כדי שהתוכנית תוכל לבצע משימות אחרות בזמן שהנתונים מתקבלים דרך היציאה הטורית, נהוג לאחסן ב-a חיץ את הנתונים שמגיעים ולקרוא אותם במידת הצורך. למרות שבדרך כלל לא מאוד יעיל, אתה יכול לעצור את היישום כדי לטעון את כל הנתונים הזמינים; עם זאת, הדבר הנפוץ ביותר יהיה לקרוא את המידע כשהוא מגיע, בכל איטרציה של draw, כאשר כמות מסוימת זמינה או שהתקבל קוד מיוחד.

    כמות הנתונים הזמינה במאגר. השיטה הזמינה

    כדי לדעת אם הגיעו נתונים ל חיץ סדרה, השיטה available מחזירה את מספר הבתים שכבר אוחסנו בזה חיץ. בכל מקרה, פעולות קריאה יכולות להחזיר ערך מיוחד (כגון -1 o null) כאשר מנסים לטעון נתונים מ חיץ סדרה כשהיא ריקה.

    טען בייט אחד בכל פעם. שיטת הקריאה

    השיטות העיקריות של הכיתה Serial המשמשים לקריאת המידע המתקבל על ידי יציאה טורית הם אלה מסוג "סוג read» הנבדלים ביניהם, בעיקר, לפי סוג הנתונים שבהם הם מספקים את המידע שהתקבל.

    read משמש להעברת הבתים שהתקבלו על ידי היציאה הטורית כערך בין 0 ל-255. כסוג הנתונים byte de תהליך מייצג את הטווח שבין -128 ל-127 ולא בין 0 ל-255, יש צורך להשתמש ב- int על מנת לייצג את הטווח המוחזר על ידי read. אם תנסה לקרוא עם read ו - חיץ המחרוזת ריקה, מחזירה ערך -1

    קרא תווים מהיציאה הטורית. שיטת readChar

    השיטה readChar זה דומה ל read אבל זה מחזיר ערך בפורמט char במקום int. כמו פנימית, ה char en תהליךJava) מאוחסנים עם שני בתים, הערך שנבחר להחזיר בעת קריאה readChar על ידי חיץ סדרה ריקה היא 0xFFFF o -1.

    טען מחרוזת טקסט. השיטות readString ו-readStringUntil.

    השיטה readString מחזיר אובייקט String נוצר מכל הנתונים הזמינים ב- חיץ סדרה בזמן הייעוץ.

    השיטה readString יוצר את מחרוזת הטקסט בהנחה שהבתים שהתקבלו ביציאה הטורית הם בפורמט ASCII כך שלא ניתן להשתמש בשיטת קריאה זו עבור קידודים אחרים.

    אם זה קשור לקריאת חיץ סדרה עם readString כאשר ריק, ערך ההחזרה הוא null.

    השיטה readStringUntil להוסיף ל readString היכולת להחזיר מידע שנטען לתוך חיץ סדרה המפצלת אותו על ידי תו מיוחד (קוד) המועבר כפרמטר. דרך זו של קריאת המידע המתקבל מאפשרת לנו להבחין הן במפרידים והן במסיימים המסייעים לפרש את המידע המתקבל.

    השיטה readStringUntil להחזיר null כאשר ב חיץ סדרה לא מוצאת את הקוד שצוין בארגומנט המועבר אליו (בייט אחד).

    בקוד הבא עבור Arduino שולח שלוש הודעות דרך היציאה הטורית. השניים הראשונים מסתיימים בכרטיסייה, כך שהם יופיעו במסוף. תהליך, בעוד שהשלישית, למרות שהיא תישלח דרך היציאה הטורית, לא תיקרא עם readStringUntil(9) מכיוון שהוא לא מסתיים בכרטיסייה (עם קוד ASCII 9).

    מעבד Serial.readStringUntil לקרוא מחרוזת סדרתית

    קרא בלוקי נתונים. השיטות readBytes ו-readBytesUntil.

    השיטות הנראות לעיל משמשות לקריאת נתונים בפורמטים ספציפיים, לקריאת בלוקים של נתונים גולמיים או בפורמט שאינו מסופק ב- תהליך נעשה שימוש בשיטות readBytes y readBytesUntil

    השיטה readBytes נסה לקרוא את הנתונים הזמינים ב חיץ סִדרָה. אם לא מועבר פרמטר לשיטה readBytes כל הנתונים הזמינים נקראים ומוחזרים בווקטור (byte[]). אם מספר שלם מועבר כפרמטר, מקסימום מספר הבתים המצוין במספר זה נקרא והם מוחזרים גם כווקטור.

    יש דרך שלישית לשימוש readBytes, יעיל יותר, שלוקח כארגומנט וקטור בתים שבו התוכן של ה- חיץ סִדרָה. אופן השימוש הזה readBytes מחזיר מספר שלם (int) המייצג את מספר הבתים שנקראו.

    השיטה readBytesUntil עובד בצורה דומה אך כולל פרמטר ראשון המייצג את הערך של ה-byte שאם נמצא ב- חיץ, יציין את סיום הקריאה. בשיטה זו, הפרמטר הקובע את המספר המרבי של בתים שייקראו אינו הגיוני שכן הכמות תיקבע על ידי הקוד המיוחד.

    לבדיקת פעולת השיטה readBytes בואו נניח את הקוד הבא עבור Arduino ששולח טקסט דרך היציאה הטורית.

    התוכנית הבאה לדוגמה עבור תהליך קורא טקסט מהיציאה הטורית בבלוקים של 32 בתים (TOTAL_BYTES). כדי לוודא שהוא עובד, הוא מציג אותו דרך המסוף כתווים, ומאלץ את סוג הבתים שהתקבלו char.

    בצילום המסך הבא תוכלו לראות כיצד הם מוצגים בקונסולה תהליך הנתונים שנטענו בבלוקים של (מקסימום) 32 בתים (TOTAL_BYTES) בכל פעם. אבל יש בעיה שכבר דיברו עליה: Arduino שולח את הפסוקים של פדריקו גרסיה לורקה של הדוגמה מקודדת כטקסט בפורמט UTF-8, שאינו זה שבו נעשה שימוש תהליך (Java), מה אתה מעדיף Utf-16 אז מי שלא מתאים לדרגת ה ASCII להדפסה מתפרשים בצורה שגויה.

    מעבד Serial.readBytes UTF-16

    כדי לפתור בעיה זו, ניתן לטעון את ערכות התווים (ערכה) ולהגדיר אובייקט חדש String מאלץ אותו להיות מיוצג באמצעות קידוד UTF-8 כפי שמוצג בקוד הדוגמה הבא.

    מעבד Serial.readBytes UTF-8

    קרא את הנתונים האחרונים שהתקבלו. שיטות אחרון ו-lastChar.

    בעוד שאר שיטות הקריאה ("סוג read») הם טוענים את המידע של חיץ סדרה באותו סדר שהגיעה (FIFO), בשתי השיטות הללו ה-byte האחרון שהגיע ל- חיץ סִדרָה. השיטה last מחזירה את הערך של הבית האחרון בתור a int y lastChar מחזירה את הערך בתור a char.

    ניהול מאגר טורי

    למרות שהשיטות שנראו עד כה פונקציונליות לחלוטין, הן לא תמיד מייצגות את הדרך הטובה ביותר לנצל את הגישה ליציאה הטורית. כדי לטעון את הנתונים, הם צריכים לבדוק מעת לעת את המצב של חיץ סדרה וקרא את הנתונים הזמינים בחלק חוזר של הקוד. בדרך כלל, דרך יעילה יותר היא לקרוא את הנתונים רק כאשר אתה יודע שהם זמינים.

    קרא את היציאה הטורית כאשר הנתונים מתקבלים. האירוע הסדרתי.

    כדי לגשת ל חיץ סדרתי כאשר הנתונים מתקבלים, ניתן לנצל את האירוע הסדרתי על ידי ניהולו באמצעות הגדרת השיטה serialEvent. שיטה זו משתמשת ביציאה הטורית שמפעילה אותה כארגומנט.

    גודל המאגר הטורי. שיטת החוצץ.

    אם אתה יודע את מספר הבתים המרכיבים גוש של נתונים שימושיים, אתה יכול לייעל עוד יותר את סגנון קריאת הנתונים הזה. חיץ סדרה דרך serialEvent. השיטה buffer מאפשר לך להגדיר את מספר הבתים שיישמרו ב- חיץ לפני השקת אירוע סדרתי. השיטה מצפה כפרמטר למספר שלם המייצג את מספר הבתים.

    מלא את המאגר עד לקבלת ערך. שיטת bufferUntil.

    במקום להגדיר את קריאת השיטה serialEvent עבור כמות נתונים ב- חיץ, עם השיטה bufferUntil אתה יכול להגדיר לאחסן נתונים עד שמגיע ערך מיוחד ולאחר מכן להעלות את האירוע הסדרתי. הפרמטר המועבר לשיטה זו הוא א int המייצג את הערך שנוצר מהקריאה אל serialEvent.

    מחק את הנתונים המאוחסנים במאגר. השיטה הברורה.

    עם השיטה clear אתה יכול למחוק את הנתונים שנמצאים כעת ב- חיץ. ניתן להשתמש בשיטה זו, למשל, כדי להתחיל סשן קליטת נתונים חדש תוך התעלמות מהנתונים שנותרו מהקודם.

    אפליקציית עיבוד טיפוסית לקריאת נתונים דרך היציאה הטורית

    לבסוף, נוח לשחזר את פעולות האובייקט Serial de תהליך שנמצאים בשימוש נפוץ יותר, עוברים דרך דוגמה טיפוסית של קבלת נתונים דרך היציאה הטורית כדי לצייר איתם גרף, במקרה זה של אזורים מוערמים.

    ייבא את הספרייה הטורית

    קביעת פרוטוקול נתונים (מפרידים)

    קבע את האובייקט של המחלקה Serial

    הצג את אובייקט המחלקה Serial על ידי הגדרת היציאה הטורית שבה נעשה שימוש

    הגדר את מאגר היציאה הטורית

    הטמע מטפל עבור האירוע הסדרתי

    קרא מאגר טורי

    התנה את הנתונים שהתקבלו

    סיום תקשורת טורית

    הקוד לדוגמה להלן ממחיש את הסיכום עם יישום פונקציונלי (אם כי פשוט מאוד) שמייצר גרף שטח עם הערכים המתקבלים דרך היציאה הטורית, משהו דומה למה שהאנימציה הבאה מציגה.

    גרפי עם עיבוד עם נתונים שהתקבלו דרך היציאה הטורית

    כדי לא ללכת לאיבוד בשאר התוכנית ולמקד את תשומת הלב בתקשורת סדרתית עם תהליך, שורות הקוד המתאימות לפעולות הקודמות מסומנות.

    לפרסם תגובה

    אולי פספסת