כללי:
הפרויקט
הבא מופעל דרך המפתח המקבילי של המחשב וכולל תוכנת צד שרת השולטת על התנועה של
מנוע צעד ותוכנת צד לקוח המאפשר שליטה על השרת דרך תקשורת אינטרנט.
שלבי
העבודה:
1.
בנה את המעגל האלקטרוני הבא:
2.
הורד את הקובץ inpout32.dll מהאתר והצמד אותו לתקייה שבה נימצא הפרויקט שלך
3.
פתח פקויקט חדש במקום שנימצא הקובץ inpout32.dll.
4.
גש לחלון הטופס והוסף לו את הפקדים הבאים:
הטופס כולל
שמונה פקדים והם:
Command1 – לחצן עם הכיתוב "סע".
Text1 – עם המספר 360
Label1 – עם הכיתוב "זוית
במעלות"
Label2 – עם הכיתוב "0"
Label3 – עם הכיתוב "כיוון
המנוע עכשיו"
Timer1 – עם interval
של 10
Shape1 – בצורה של עיגול
Line1 – קו
5.
גש לכתיבת הקוד של Form1 וכתוב בו את הקוד הבא:
Dim A, B, C
Private Declare Sub Out Lib "inpout32.dll" Alias "Out32"
(ByVal PortAddress As Integer, ByVal Value_
As Integer)
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub
Private Sub Form_Load()
Out &H378, &H0
C = 7.5
Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
A = Val(Text1.Text) / C
If A > B Then B = B + 1
If A < B Then B = B - 1
Phase = B Mod 4
If Phase = 0 Then Out &H378, 3
If Phase = 1 Then Out &H378, 6
If Phase = 2 Then Out &H378, 12
If Phase = 3 Then Out &H378, 9
Line1.Y2 = Line1.Y1 + Sin(B * C * 3.14 / 180) * 1200
Line1.X2 = Line1.X1 + Cos(B * C * 3.14 / 180) * 1200
Label2.Caption = B * C
If Abs(A - B) < 1 Then Timer1.Enabled = False
End Sub
הסבר
התוכנית:
המעגל
עושה שימוש שקובץ DLL
שונה מהדוגמאות של הפרויקטים הבאים כדי לאפשר תאימות ל- WindowsXP . כמו כן אני מדגים כאן כיצד ניתן להכריז
כל הפונקציה Out שלא דרך כתיבת מודול. החיסרון בזה שלא מכריזים על הפונקציה במודול
היא שניתן לקרוא לפונקציה רק מהטופס בה הוא הוכרז.
המשתנה C משמש לקביעת זוית הפסיעה של
המנוע. להסבר מפורט על מנועי צעד כנס לכתובת: http://mop.ort.org.il/mechatronics/scripts/inner.asp?pc=852628868
התנועה של
המנוע ניגרמת על ידי הפעלה של Timer1 תכונת ה- Interval של ה- Timer1 קובע את מהירות התנועה של המנוע.
כל פעם שהאירוע
של ה- Timer1
קורה המחשב בודק האם הזוית הרצויה, משתנה A,
גדול או קטן מהזוית הנוכחית של המנוע, משתנה B , וכתוצאה מכך המחשב
מוסיף או מוריד אחד מהמשתנה B
תזוזת המנוע
מתבצעת על ידי בדיקת השארית של חלוקת המשתנה B ב- 4
הארית זו
קובעת איזה סלילים יש להפעיל כדי לגרום למנוע לבצע קפיצת זיות אחת. האפשרויות
הם:
If Phase = 0 Then Out &H378, 3
If Phase = 1 Then Out &H378, 6
If Phase = 2 Then Out &H378, 12
If Phase = 3 Then Out &H378, 9
השורות הבאות
מחשבות את המיקום של הקו Line1 המורה על הזוית של המנוע, משתנה A, שים של שכל הזיות שהמחשב מחשב הם ברדיאנים
ולא במעלות כל כן
יש להכפיל
את הזיות בפאי ולחלק ב- 180 כדי להמיר אותה ממעלות לרדיאנים.
Line1.Y2 = Line1.Y1 + Sin(B * C * 3.14 / 180) * 1200
Line1.X2 = Line1.X1 + Cos(B * C * 3.14 / 180) * 1200
סוף התהליך
כלומר הפסקת פעולת ה- Timer
מתרחש כאשר זיות היעד, משתנה A, שווה לזיות הנוכחית של המנוע, משתנה B.
If Abs(A - B) < 1 Then Timer1.Enabled = False
להורדת התוכנה
המלאה לחץ כאן s_m.zip.
שילוב
השליטה על המנוע דרך האינטרנט:
בתוכנה אני
עושה שימוש באוביקט בתיקשורת של Microsoft בשם Winsock. פקד זה היינו פקד תעבורה של נתונים בפרוטוקול TCP/IPאו בקיצור רשת האינטרנט. פקד
זה יכול להעביר נתונים בין מחשבים המחוברים לרשת האינטרנט או בין שני מחשבים
שלא מחוברים לאינטרנט אלא דרך כרטיסי רשת ובמחשב מוגדר הפרוטוקול TCP/IP.
להסבר מפורט
על הפקד גלוש לאתר:
http://www.dr-vb.co.il/articles/article.php?id=19
הוספת
הפקד לתוכנית:
פקד זה אינו
פקד שמופיע דרך קבע באיזור הפקדים של ויזואל ביסק על כן יש להוסיפו באופן נקודתי
כל פעם שרוצים לבנות תוכנית מחשב שעושה שימוש בפקד:
1. בחרו בתפריט Project ולאחר מכן ב-Components .
2. בחלון שיפתח, תוסיפו את הפקד Microsoft winsock control 6.0 (על ידי סימון V ליד שמו).
3. הוסיפו כעת, את הבקר לטופס שלכם על ידי גרירתו מאיזור הפקדים.
כדי לעבוד
עם הפקד צריך לכתוב שתי תוכנות האחת תוכנת לקוח שתכיל את הממשק של הלקוח בו תהיה
תיבת הטקסט להכנסת הזיות היעד של המנוע. ותוכנת שרת שתקלוט דרך האינטרנט את הזיות
ותפעיל את המנוע שיחובר ליציאת המדפסת שבו רצה תוכנת השרת.
כתיבת
תוכנת השרת:
1.
פתח פרויקט חדש ושמור אותו בתקייה שבו נימצא הקובץ inpout32.dll
.
2.
הוסף לפרויקט את הפקד Microsoft winsock control.
3.
לחלון הטופס והוסף לו את הפקדים הבאים:
4.
גש לכתיבת הקוד של Form1 וכתוב בו את הקוד הבא:
Dim A, B, C As Integer
Dim data As String
Private Declare Sub Out Lib "inpout32.dll"
Alias "Out32" _
(ByVal PortAddress As Integer, ByVal Value As
Integer)
Private Sub Form_Load()
Winsock1.LocalPort = 3000
Winsock1.Listen
Out &H378, &H0
C = 7.5
Timer1.Enabled = False
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal
requestID As Long)
Winsock1.Close
Winsock1.Accept requestID
Label4.Caption = "On Line"
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal
As Long)
Winsock1.GetData data
If data = "disconnect"
Then
Winsock1.Close
Winsock1.Listen
Else
Text1.Text = data
Timer1.Enabled = True
End If
End Sub
Private Sub Timer1_Timer()
A = Val(Text1.Text) / C
If A > B Then B = B + 1
If A < B Then B = B - 1
Phase = B Mod 4
If Phase = 0 Then Out &H378,
3
If Phase = 1 Then Out &H378,
6
If Phase = 2 Then Out &H378,
12
If Phase = 3 Then Out &H378,
9
Line1.Y2 = Line1.Y1 + Sin(B
* C * 3.14 / 180) * 1200
Line1.X2 = Line1.X1 + Cos(B
* C * 3.14 / 180) * 1200
Label2.Caption = B * C
If Abs(A - B) < 1 Then Timer1.Enabled
= False
End Sub
הסבר התוכנית:
בזמן הטעינה
של הטופס, אירוע FormLoad,
השרת מקבל אישור להאזין לתקשורת אינטרנט דרך פורט מספר 3000. כל תוכנת מחשב המשתמשת
באינטרנט לתקשורת מקבלת ערוץ האזנה פרטי לדוגמה תוכנת הדפדפן מקבלת באופן מוסכם
על ידי רשויות האינטרנט את פורט 80 כדי חשלוח ולקבל מיעד באינטרנט כל הפורטים
מעל 100 הם לשימוש עתידי על כן אני עושה שימוש בפורט 3000 הפנוי.
Winsock1.LocalPort = 3000
Winsock1.Listen
כאשר מגיע מידע דרך פורט זה מופעל האירוע
הבא:
Private Sub Winsock1_DataArrival(ByVal bytesTotal
As Long)
Winsock1.GetData data
If data = "disconnect"
Then
Winsock1.Close
Winsock1.Listen
Else
Text1.Text = data
Timer1.Enabled = True
End If
End Sub
באירוע זה ניבדק באים המידע שהגיע הוא
המילה disconnect שכן
במצב זה תוכנת השרת מנתקת את התקשורת. אחרת המחשב מעביר את המידע שהגיע לתיבת
הטקסט ומפעיל את ה- timer שמבצע את התנועה של המנוע.
להורדת התוכנה
המלאה לחץ כאן server.zip.
כתיבת תוכנת הלקוח:
1.
פתח פרויקט חדש ושמור אותו בתקייה שבו נימצא הקובץ inpout32.dll
.
2.
הוסף לפרויקט את הפקד Microsoft winsock control.
3.
לחלון הטופס והוסף לו את הפקדים הבאים:
4.
גש לכתיבת הקוד של Form1 וכתוב בו את הקוד הבא:
Private Sub Command1_Click()
Winsock1.Close
Winsock1.RemoteHost = Text1.Text
Winsock1.RemotePort = 3000
Winsock1.Connect
End Sub
Private Sub Command2_Click()
If Winsock1.State = 7 Then
Dim data As String
data = "disconnect"
Winsock1.SendData data
Else
MsgBox "ãøåùä
äúçáøåú"
End If
End Sub
Private Sub Command3_Click()
If Winsock1.State = 7 Then
Dim data As String
data = Text2.Text
Winsock1.SendData data
Else
MsgBox "ãøåùä
äúçáøåú"
End If
End Sub
הסבר התוכנית:
לחצן מספר
1 יוצר את הקשר בין תוכנת הלקוח (תוכנה זו) לבין תוכנת השרת שבה מחובר המנוע.
התוכנה מעבירה את תוכן תיבת הטקסט מבלקוח לשרת.
יצירת הקשר מתחיל בהגדרת פורט היציאה
ופתיחתו בכתובת האינטרנט שכתובה בטיבת הטקסט.
לחצן מספר 2 נבצע ניתוק על ידי בדיקת
מצב החיבור (Winsock1.State = 7) מורה על חיבור תקין. אם אכן יש חיבור
המחשב שולח את המילה (disconnect) כדי להודיע לשרת על הניתוק.
לחצן מספר 2 שלוח את תוכן תיבת הטקסט
בה כתובה זוית לשרת לא ליפני שבדק שמצב החיבור תקין שוב על ידי הבדיקה (Winsock1.State
= 7).
להורדת התוכנה
המלאה לחץ כאן client.zip.
|