Transcript מערכות מידע
תרשים מצביםStatecharts-
נוסחא חזותית
Statechartsהוא פורמאליזם ויזואלי המאפשר לתאר
תבנית התנהגותית של מערכות מורכבות.
Statechartsפותחו ע”י דוד הראל.
]rest[break
Employee
Resting
work /punch card
Working
מצבים
לדוגמא :די.וי.די יכול להיות במצב המתנה ,מצב נכן ,המתן וכו'
כל רכיב ,או עצם במערכת יכול להיות במצב מסוים בזמן נתון .כל רכיב
למשל כאשר DVDמחובר אין בו פעילות כאשר הוא מנגן
שוהה במצב פרק זמן מסוים.
הוא פעול
שם של מצב הנו ישות לוגית והוא אינו מתאר פעילות .בזמן היות העצם
במצב הוא יכול לבצע פעילות ( )Activityהניתנת להפרעה .יש לתאר
במפורש את הפעילות המתבצעת במצב.
כאשר מתארים מצב שיש בו פעילות יש
צריך לתאר את הפעילויות באותם הוא
מבצע.
רובוט
מצבים בהם הרובוט יכול להיות
שם מצב:
שם מצב:
בטל
נע לעבר המדפים
נוטל רכיב
נע לעבר הדלפק
יש 4מצבים שהרובוט
(במחסן אוט') יכול
להימצא בהם
לדוגמא:
פעולות במכונת
כביסה יכולה להיות
סיבוב מהיר של
התוף (מצב סחיטה)
פעילות
מתבצעת במצב.
יכולה להיות רציפה (הצגה תמונה) או סדרתית
אורכת זמן
שם מצב
Take an item
State1
do: take
do:activity
שם הפעולה
Doקבוע בתחביר
תיאור פעולה
מעברים
בין מצבים
הקשר בין מצב למצב נעשה באמצעות מעבר שקורה בנקודת
זמן .מעבר מסומן כחץ.
מעבר יכול להכיל מזניק ( )triggerופעולה (.)Action
המזניק מכיל אירועים ותנאים המתנים את קיום המעבר.
פעולה הנה יחידה אטומית (אינה ניתנת להפרעה) המתבצעת
בעת במעבר (כאשר האירוע קורה ובאם התנאי מתקיים).
כלומר מעבר זהו משהו שלא לוקח זמן .למשל מכונת כביסה עוברת לסחיטה באופן נקודתי
הדק
תיאור המעבר ממצב למצב
מזניק מכיל שני דברים :אירוע
ותנאי
מדבילים בין
פעולה
ולפעילות
מצב2
Trigger
event [condition] /action
מידי וקצר :לדוגמא:
הפעל את משאבת
המים
במעבר יש פעולה
קצרה במצבים
יכולים להיות מס'
פעולות
מתאר משהו
מתמשך
מצב1
מזניק
המזניק מכיל אירועים ותנאים המתנים את קיום המעבר .בין
האירועים והתנאים יכולים להופיע יחסים לוגיים של .AND, OR
המזניק מקבל ערך TRUEאו .FALSE
אירוע הוא שינוי במערכת (יצירת עצם ,ביטול עצם ,שינוי במצב
עצם ,תחילה או סיום של פעילות ,קבלת פקודה או הודעה).
דוגמא :הגיע למדפים .מזניק אינו חייב להכיל אירוע.
תנאי הוא הצהרה לוגית לגבי מצב של העצם .תנאי יסומן ע”י
סוגרים מרובעים .דוגמא[ :האור ברמזור ירוק].
תנאי שאין לפניו אירוע ייבדק אך ורק עם סיום הפעילות במצב .אם
אין במצב פעילות ,התנאי ייבדק עם הכניסה למצב.
אירוע אומר שינוי במערכת
כמו לחיצה על payאו
pause
אם קמתי ב 6ע"י שעון מעורר אז :
האירוע :השעון הגיע לשעה 6
תנאי :השעון דרוך אז השעון יצלצל
סוגי אירועים
.1
אירועים עם שמות:
.reset, a, e, call
אירועים המודיעים על התחלת פעילות:
הודעה על תחילת הפעולה :בדר"כ כאשר אח"כ
).started(A), stopped(A
רוצים להתחיל אירוע נוסף
אירועים המודיעים על תחילת קיום תנאי:
).true(c), false(c
אירועים המודיעים על כניסה למצב:
).entered(S), exited(S
אירועים המודיעים על פסק זמן :המערכת נכנסה ויצאה ממצב מסויים
) ,tm(e, nכאשר eהוא אירוע ו n -פרק
זמןבשניות)
(
למשל :הדלק אור כבה אור
.2
.3
תנאי מסוים
להפסיק להתקיים
.4
תנאי מסוים להתקיים
לדוגמא :כשמתחילה
הסחיטה במכונת כביסה
המשאבה תקבל הודעה
להתחיל לפעול
למשל :השעון הגיע להשעה
מסויימת
השהיות
.5
מספר שניות
אירוע
time
) Tm(3אומר שנמצאים במצב 3שניות ואז יוצאים ממנו (כמו קביעת תחנות ברדיו המכונית
למשל :באזעקה ביתית אם היא דרוכה
ומישהו נכנס אז תוך 30שניות היא מתחילה
לצפצף.
דוגמא נוספת :השהיית המזגן -מרגע
הלחיצה (האירוע) עובר פסק זמן מסוים עד
לתחילת הפעולה
סוגי תנאים
נשוא
נושא
.1נשוא (.)Predicate
,in(S) .2כאשר Sהוא מצב.
,active(A) .3כאשר Aהיא פעילות.
הילד יפה
נושא
נשוא
החשמל פועל
סוגי פעולות ()Actions
.1יצירת אירוע עם שם.
.2השמה למשתנה (.)x:=x+1
.3התחלת פעילות .start(A), stop(A) -
.4מחיקת היסטוריה – .clh
.5שרשור פעולות בטור (.)a;x:=x+1
לא לוקח זמן
ההבדל בין תנאי ואירוע
מצב :3האדם
נמצא על הרכבת
הוספת הקו הזה
הוא המידול הנכון
של התהליך
אירוע :הרכבת נכנסה
והאדם עליה עלה עליה
אירוע :נכנס
לתחנה
][c
S3
Entered C
E1
S2
מצב 1האדם הולך
לתחנת רכבת
S1
אירוע :הרכבת כבר
נמצאת ברכבת לפני
כניסת האדם
S3
][C
E1
S2
S1
התנאי נבדק בסוף
פעולה s2
הוספנו את התנאי ][cכדי לאפשר 2מצבים:
מה קורה כאשר Cנהפך ל TRUE-לפני שקרה ?E1
.1כשהרכבת בתחנה כשהאדם עולה
.2האדם ממתין לרכבת
מעבר מאופשר -זאב" :לא נכנס לזה"
מעבר Tiנקרא מאופשר אם העצם נמצא במצב
המקדים למעבר .Ti
S2
]E1 [C1
S1
מעבר מאופשר יופעל עם הפעלת המזניק שלו.
דוגמא
אם רוצים לרשום את הפעולות שהמצבים
עושים צריך לרשום למטהdo….. :
3פעולות שמתרחשות יחד
מצב שני
שם מצב
נוטל רכיב
אירוע
actions
מצב ראשון
למדפים
לעבר המדפים
הפסק פעולת מנוע .שים בלם .הפעל זרוע /הגיע נע
מעבר
=
+
פעולה
מזניק
יתחיל לנוח אם הוא נמצא במצב של הפסקה אז הוא עובר למצב
של מנוחה .אבל אם הוא נח ואין מצב של הפסקה הוא לא נכנס
למצב מנוחה (כמו Pouseו stop
]rest[break
Employee
Resting
Working
work /punch card
מעבר :ברגע שהוא מתחיל אירוע לעבוד אז הוא דופק
כרטיס
מצבים התחלתיים וסופיים
אם בתור של השחור הוא אומר שח מת אז כאשר
המגיע התור של הלבן השחור מנצח
בררת מחדל :שהתחלשת
המשחק היא שהלבן מתחיל
מצבים סופיים
checkmate
Black wins
stalemate
white
moves
Draw
White’s
turn
העברת
תור
מאחד
לשני
stalemate
White wins
checkmate
Black’s
turn
משחק שח
start
black
moves
מעבר התחלתי /מעבר ברירת מחדל
המעבר ההתחלתי מציין שברירת המחדל היא
להיכנס למצב .S2מעבר התחלתי הוא מעבר
חסר מזניק שיוצא ממצב התחלתי.
מתחיל ב (s2לא מגיעים ל s1
E2
S3
E1
S2
S1
מעברים — המשך
כניסה ויציאה לאותו מצב
מעבר יכול לצאת ולהיכנס חזרה לאותו מצב.
פעולה
עם הכניסה למצב 2
נותנים ל c -את הערך
אפס
/ c=0
האירוע –E2מוציא ומכניס אותנו מהמצב
והפעולה סופרת כמה פעמיים נכנסנו ל s2
(כל פעם הפרמטר cעולה ב 1
יש תכונות מחשב שלא מקבלות
פעולות על ברירת המחדל
E2 / c++
S2
פעילות -דוגמא
מצב הנקרא restingבתוכו יש מצבים
אחרים -זהו מצב של קינון.
אנו צריכים לסמן איפה המערכת מתחילה (רק בפנים
מסומן)
Employee
Resting
doing nothing
]rest[break
Working
do: shovel
Cleaning
do: wash hands
work
Empty transition
זהו מעבר ריק-אנו
עוברים ממצב רק
בגמר הפעילות
מתחיל לעבוד כשיש הפסקה עוברים
ל restingוכשחוזרים לעבוד חוזרים
ל working
מעבר ריק
מעבר ריק יתבצע כאשר הפעילות שמתבצעת
במצב המקדים לו (אם יש כזאת) הסתיימה.
כאן אנחנו נעבור ממצב 1רק כאשר
הפעילות הסתיימה ולא לפני
S1
בצע :פעילות
S2
המעבר שלמטה יפסיק את הפעילות.
כאן אנחנו נעבור מהמצב S1
כאשר המעבר E1יפסיק את
הפעילויות במצב ולא בהכרח
כאשר הפעילות במצב הסתיימה
E1
S2
S1
בצע :פעילות
• אם במצב לא תהייה פעילות ויש
לנו מעבר ריק אז מיד כשנכנסנו למצב
אנחנו נצא ממנו ונכנס למצב הבא-
כלומר פעולות שהסתיימו ללא
הקצבת זמן
חוסר דטרמיניזם
אם שני מעברים היוצאים מאותו מצב מקדים
מאופשרים באותו רגע ,אחד מהם יתבצע באופן
לא דטרמיניסטי.
יש כאן מצב כשהפעולה s1מסתיימת יש 2אפשרויות:
מעבר ל S2דרך אירוע e1
.1
.2
מעבר ישיר ל s3
E1
S2
נפתור את בעיה זו ע"י הצבת התנאי c1ואם התנאי מתקיים נעבור ל
S3ועם הוא לא נעבור למצב S2
S1
][C1
S3
דוגמא :רמזור בצומתז
אם יש מכוניות שרוצות לפנות
שמאלה
) - Tm(nסימן לזמן כאשר יש אירוע
Eבמשך Nשניות
אורך האור הירוק
הוא nשניות
צפון/דרום נוסעים ישר
N/S may
turn left
]tm(n) [cars in N/S left lanes
tm(n) [no cars in
]N/S left lanes
)tm(n
אחרי nשניות נעבור
למצב
אם התנאי
מתקיים אנו
ממשיכים
E/W may go
straight
אין מכוניות בנתיב
השמאלי
tm(n) [no cars in
]E/W left lanes
]tm(n) [cars in E/W left lanes
N/S may go
straight
)tm(n
E/W may
turn left
לצלם מלימור
קו טלפון:דוגמא
on hook
on hook
Idle
הרמת שפרפרת
מצב השמעת צליל
חיוג
on hook
off hook
Dial tone
do: sound dial tone
digit (n)
Busy tone
do: sound busy tone
Time out
digit (n)
invalid number
Dialing
valid number
busy
Recorded
message
do: play message
Connecting
do: find connection
on hook
on hook
routed
message done
Ringing
on hook / disconnect line
on hook
time out
time out
Connected
called phone answers
/ connect line
called phone hangs up
/ disconnect line
Disconnected
push Fמעביר למצב קדימה ואז ברירת
המחדל שלי היא להתחיל בהילוך ראשון
קינון מצבים והכללה
בררת המחדל של
המערכת היא להיות ב
neutral
Push R
Reverse
קינון מצב המורכב
ממספר מצבים
Transmission
Neutral
Push N
Push F
Push N
לא משנה באיזה הילוך קדמי אנו
נמצאים כאשר אנו לוחצים על
push Nאנו מגיעים ל neutral
Forward
upshift
Third
stop
upshift
First
Second
downshift
downshift
קינון המצבים ראשון ,שני ושלישי משיג הכללה וחוסך במעברים.
המעבר ל Nממצב Fדומה בראשון שני ושלישי ולכן הם במצב קינון
יש חץ אחד במקום שלושה
Stopיצוא מהיקף המלבן כי
ברגע שהגעתי ל stopלא
חשוב באיזה הילוך אני נמצא
אני עובד להילוך ראשון.
בגלל שהוא יוצא מהיקף
המלבן אז הוא קשור לכל
המצבים בקינו וניתן להגיע
אליו מכל ההילוכים
הקינון כאן חוסך לנו חזרה על מעברים
דומים ,למשל אם לא היה לנו קינון היינו
צריכים עוד שני חצים נוספים של push N
בררת המחדל
של המצב היא
first
קינון מצבים — דוגמא נוספת
אם היינו רוצים לתת הפסקה לעובד בין
9:00ל : 9:10
working
)True (t=9:10
)True (t=9:00
Min/min++
עובד יכול להיות בשני מצבים או בעבודה או
בבית
resting
Employee
תנאי :נבדוק את התנאי כאשר
הפעילות מסתיימת (אם אין פעילות
אז ברגע תחילת מצב)
At home
do: sleep
אם הוא קם בבוקר אז הוא
Working
הולך לעבוד
][In morning
do: shovel
]rest [break
][In evening
תנאי אם הוא מתחיל לנוח
ב\זמן הפסקה אז הוא הולך
למנוחה
כאשר גומרים לרחוץ ידיים בודקים או ערב .אם
זה ערב אז הולכים הביתה ואם לא אז לא
עושים כלום
][evening arrived
doing nothing
מכיוון שאין כאן פעילות לא נבדוק כאן
אם הגיע ערב או לא ולכן ניתן להוסיף
עוד אירוע evening arrived
At Work
work/
punch card
Resting
Cleaning
do: wash hands
בררת מחדל במנוחה היא הניקוי
כניסות ויציאות ממצבים מקוננים
כניסה/יציאה ל/מתת-מצב של מצב-העל ( Aמבלי לפרט ברמה
זו).
מצב מורכב שאנו לא רוצים לפרט את מה שקורה בתוכו .אנו נפרט את
מה שהולך בתוכו בתרשים אחר
a
A
b
היסטוריה
- Hחזרה למצב-העל האחרון ( Fאו – )Gהיסטוריה רדודה
* - Hחזרה לרמת הקינון העמוקה ביותר ( -)A-Dהיסטוריה
עמוקה
מצב kמורכב מה gו F
F
G
C
A
D
B
K
H
מעבר מ eל K: Kמורכב משני מצבים a :ו B
Hאומרת שאם הייתי לאחרונה ב Aאו Bאז היסטוריה רדודה תחזיר אותי ל Gובתוך Gל .Bואם היית לאחרונה ב
Cאו ב Dאז היסטוריה רדודה תחזיר אותי ל Fובתוך Fל C
אם היה * Hאז הייתי חוזר בדיוק לאותו מצב שהייתי בו ולא לבררת מחדל
E
אם היינו לאחרונה ב Bאו Dאז ההיסטוריה
הרדודה תחזיר אותנו ל Gאו ל Fובהם אל ברורות
המחדל שלהן
היסטוריה — המשך
אם יש התנגשות בין היסטוריה
לבררת מחדל אז היסטוריה
"מנצחת"
K
F
אם היינו לאחרונה ב Cאז נלך ל Cאו
ואם היינו לאחרונה ב D -אז נחזור ל
( .Dאם לא היינו לאחרונה ב Fבכלל
אז בררת נלך לבררת המחדל שלנו)
G
H
C
A
D
B
H
E
הסטוריה רדודה אם היינו
לאחרונה ב Fאז נחזור ל F
ואם היינו ב Gנחזור ל G
נחזור למצב-העל האחרון בו ביקרנו F ,או ,Gואם לF-
אז גם בו למצב האחרון בו ביקרנו .אם זו הפעם
הראשונה בה בקרנו ב F-אזי ניכנס למצב ההתחלתי,
.C
מצבים מקביליים
מספר המצבים של כל המכונית הוא מכפלה קרטזית של מצבי רכיביה )(3X5X2X2כך שהמקביליות משיגה חסכון רב
במספר המצבים.
שימו לב שיש תקשורת בין רכיבים .רכיב ההתנעה תלוי ברכיב ההילוכים.
אנו ננתח את בנפרד כל רכיב ורכיב
התנאי אומר שיש קשר בין הנעה לתיבת הילוכים בכך שאם רוצים להתניע צריך להיות
ונוטרל (הנעה ותיבת הילוכים הם מצבים מקבילים
turn key to start
[Transmission
]in Neutral
Ignition
release key
On
Off
Starting
turn key off
סימון למצבים
מקבילים
Transmission
Push R
Neutral
Reverse
Push N
Push F
Push N
Forward
upshift
Third
upshift
First
Second
downshift
downshift
Brake
depress
On
depress
Off
stop
On
release
Off
release
4מצבים מקבילים נפרדים אי אפשר לחבר בניהם
Accelerator
מס' המצבים 2*3=6
מצבים מקביליים -חסכון בהצגה
אם אנו נמצאים במצב
שימוש במצבים
מקבילים
אם אנו במצב CGאז אנו נעבור למצב BG
m
אם אנו במצב BEאז נעבור ל ( BGבמצב למדה)
d
a
a
D
E
F
כאשר אנו מצב
b
A
B
g
b
a
)(in G
G
אם נמצאים במצב BEאז עוברים למצב .CE
C
אם אנו נמצאים ב מצב BFאז אנו עוברים למצב .CG
אם אנו נמצאים במצב BGאז אנו עוברים למצב CG
ללא שימוש
במצבים מקבילים
d
B,F
B,G
לפי המעברים האפשריים ללא שימוש במצבים מקבילים ננסח את
השימוש במצבים המקבילים:
b
a
.1
.2
.3
g
B,C
E,F,G
אשר בתוך הקבוצות הללו אין חיבור
C,G
d
g
B,E
a
a
רואים שיש כאן 2קבוצות:
m
a
C,F
m
C,E
מצבים מקביליים — דוגמא נוספת
Working
Employee
Mouth
Hands
humming
Resting
client
left
client
arrive
d
Busy
filing
true(in
humming)
idle
true(in talking)
talking
typing
פעילויות מקביליות וסינכרוניזציה
Emitting
Setting
up
ready
Take cash
do: dispense cash
Take card
do: eject card
c1=cash taken [in Take card]
c3=cash taken [in wait2]
c3
c1 wait1
c2 wait2
c4
Ready
to reset
c2= card taken [in Take cash]
c4= card taken [in wait1]
. עוברים סימולטנית לשני המצביםready כאשר קורה האירוע
נפסקותcard taken, cash taken כאשר קורים האירועים
.הפעילויות
מעביר לשני מצבים עוקביםReady שימו לב שהמעבר
יש שני מצביםReady to reset מקביליים ושלמעבר למצב
תגובת שרשרת
סדרת מעברים
מעבר יכול להוות אירוע
האירוע יכול להזניק מעברים נוספים
הרבה מעברים יכולים להתרחש בצעד בודד.
נגביל את מספר המעברים שיכולים להתרחש בכל
צעד.
C
c/b
A
d/a
D
b/d
a/c
B
ברירות מחדל במצבים מקביליים
ומקוננים
H
d
]h [in B
D
E
J
A
g
B
w
F
G
e
H
a
C
q
I
b
K
אורגנית
.1
.2
לכל שיר יש 9מצבים שונים
(סגנון) כ
.3
כדי להחליף שיר צריך להיות בצב ( cשיר)
.4
Displayמייצג modeשאני נמצא בו
(שיר או סגנון) את מספרו ( )1-9ואת
שמו
.5
כאשר נגמר שיר עוצרים
כפתור aמשמש להדלקה וכיבוי של האורגנית.
האורגנית מאפשרת בחירה של שיר ושל הסגנון בו יושמע השיר .כאשר
האורגנית דלוקה התצוגה מראה האם ה Mode-הנוכחי הוא סגנון או שיר
ובהתאם את מספר ושם השיר או הסגנון הנוכחיים .כאשר מדליקים את
האורגנית נבחרים אוטומטית שיר מספר 1וסגנון מספר 1כשיר והסגנון
הנוכחיים וה Mode-מוגדר כסגנון.
על מנת לבחור סגנון יש ללחוץ על כפתור bהמעביר את האורגנית לMode-
סגנון ואז ללחוץ על מספר הסגנון הרצוי (( .)1-9לכל סגנון יש פונקציה אשר
מחזירה את שמו בהנתן מספרו ))StyleName(x
על מנת לבחור שיר יש ללחוץ על כפתור cהמעביר את האורגנית לMode-
שיר ואז ללחוץ על מספר השיר הרצוי (( .)1-9לכל שיר יש פונקציה אשר
מחזירה את שמו בהנתן מספרו ))SongName(x
לחיצה על כפתור STARTגורמת להתחלת נגינה של השיר הנוכחי בסגנון
הנוכחי .לחיצה נוספת על כפתור זה מפסיקה את המוסיקה .ניתן לשנות את
הסגנון ו/או השיר תוך כדי נגינה.
אם באמצע שיר מחליפים סגנון אז נתחיל את
השיר מהתחלה במצב הסגנון החדש
אורגנית
מקצבים שונים9 שירים ב9 יכול לנגן
ON\OFF
a
Display
STYLE
SONG
b
c
1
2
3
4
5
6
7
8
9
START
Name
Mode
Number
אורגנית
סימוני ארועים:
– aלחיצה על כפתור a
– bלחיצה על כפתור b
– cלחיצה על כפתור c
– sלחיצה על כפתור START
– iלחיצה על כפתור i{2,…,9} i
– 1לחיצה על כפתור 1
– songendהסתיימה השמעת השיר הנוכחי
סימוני משתנים:
– i,jמשתנים היכולים לקבל ערכים בין 2ל9 -
– k,mמשתנים היכולים לקבל ערכים בין 1ל9 -
– Wמשתנה היכול לקבל שם שיר או שם סגנון
Somg_number-song#
mose in song c1
mode in style C2
gערך מסום של השיר הנוכחי
tסגנון נוכחי
t=1 ואתsong בg=1 על מנת לחסוך את
\t=1,g=1 On אנו נרשום עלstyle ב
אורגנית
style ובsing הם מצבים מקוננים ב1-9 כל המוצרים
on
play
a
mode
song#
/g=1
disable
off
Song end
enable
Do: play song g
In style t
מסמן חזרה לתחילת
השיר כשמנים את השיר
או את הסגנון
b
song
display
disp-mode
1
Style
Do: x1
c
1[c1]/g=1
1[c2]/t=1
Song
Do: x2
current item
e4
k
Do: display k & w
j
i
e1
any numeric
button pressed
true(c1)
true(c2)
1
a
/t=1
style
s
S or
style#
j[c1]/g=j
e2
i[c2]/t=i
c1= mode in song, c2= mode in style,
e1= true(c1)/ w=songname(g),k=g. e2= true(c2)/ w=stylename(t), k=t.
e3= true(song# in m)/ w=songname(m),k=m. e4= true(style# in m)] / w=stylename(m), k=m.
X1= display “style”, x2= display “song”
או1 ' למשל אם נחליף שיר אז נגיע למקום שלחצנו שיר מס.החץ הוא מההיקף כי לא משנה איפה נמצאים לשם נגיע
אם לחצנו אחד1 סגנון
e3
אורגנית
a/g=1, t=1
on
play
mode
song#
style#
display
disp-mode
disable
off
a
S or
songend
s
enable
Do: play song g
In style t
style
b
true(c2)
c
change
song
change
style
song
m[c1]/g=m
m[c2]/t=m
Style
Do: x1
true(c1)
Song
Do: x2
e4
current item
k
Do: display k & w
e1
e2
any numeric
button pressed
c1= mode in song, c2= mode in style,
e1= true(c1)/ w=songname(g),k=g. e2= true(c2)/ w=stylename(t), k=t.
e3= true(g= m)/ w=songname(m), k=m. e4= true(t= m)] / w=stylename(m), k=m.
X1= display “style”, x2= display “song”
e3