در این برنامه از دو پورت سریال (COM) استفاده شده است شما می توانید هر دو برنامه را با هم اجرا کنید یا هر کدام را به صورت مجزا دقت داشته باشید
در صورتیکه شما برنامه مربوط به پورت سریال 1 را اجرا کنید در صورتیکه المان دیگری مثل موس (Mouse) در این پورت باشد با پیغامی تحت عنوان پورت در دسترس نیست مواجه می شوید .این امر در مورد پورت 2 نیز صادق است
حال نحوه کد نویسی برنامه را با هم بررسی میکنیم
در قسمت سمت راست صفحه ویژوآل بیسیک بر روی گزینه Form کلیک کنید تا آبی شود سپس از منوی View گزینه Code را کلیک کنید و وارد کد برنامه شوید .در ابتدای برنامه متوجه دو متغیر U,i می شوید که به صورت Integer معرفی شده اند.به سراغ Private Form Load میرویم .پارامترهای داخل این عبارت
اشاره به مسایلی میکند که در هنگام اجرای اولیه برنامه Load می شوند. با یک دستور شرطی If اگر پورت سریال در اتصال به چیز دیگری مثل موس باشد با ارسال پیغام COM unavailabld کاربر را از این قضیه مطلع می سازد. در این قسمت همچنین دو عبارت DTR,RTS را مشاهده میکنید .اینها بیتهای ارسال RS232 هستند که در هنگام Load برنامه هر دو مقدار یک را دارند. اگر در هنگام Load برنامه تغذیه آیسی و موتور پله ای وصل باشد متوجه حرکت کوچکی در موتور پله ای می شوید.که این به خاطر مقدار دهی DTR,RTS در هنگام Load برنامه است .اگر از منوی View گزینه Object را انتخاب کنید وسپس بر روی
کلید شروع کلیک کنید وارد قسمت کد نویسی این دکمه کنترلی می شوید.در اینجا دو مقدار Text3,text6 که هر کدام با برچسبی درObject کنارشان توضیح داده شده است. یکی تعدا پله ودیگری شمارش پله در قسمت شکل یا فرم برنامه پس از اجرا متوجه می شوید text مربوط به تعداد پله غیر فعال است .با کلیک بر روی Check Box بالای تعداد پله این text فعال می شود وشما مثلا در آن عدد 1000 را وارد کنید وسپس کلید شروع را بزنید. شمارش پله بعد از هر 30میلی ثانیه (30 میلی ثانیه در واقع فاصله بین هر پالس است.این عبارت در ُسابروتین Output قرار دارد وشما می توانید فاصله پالسها وسرعت موتور پله ای را با تغییر این پارامتر مطابق میل خودتان تنظیم کنید) یکی اضافه می شود تا به مقدار 1000 که مقدار تعیین شده درtext تعدادپله توسط شما است برسد .در این پروژه تعداد دورهای موتور پله ای نیز در صورت تمایل شما با فعال کردن Check Box سمت راست بالی صفحه هم به صورت نهایی و هم به صورت لحظه به لحظه نشان داده میشود.پس از توضیح خلاصه از نحوه عملکرد برنامه سراغ کلید شروع می رویم .برای متوقف کردن برنامه از منوی Run گزینه Stop را انتخاب کنید وسپس بر روی کلید شروع کلیک کنید و وارد کد برنام شوید در انتهای کد مربوط به این کلید به سابروتین Output اشاره شده است.
در دستور While گفته شده تا زمانیکه مقدار تعداد پله با شمارش پله یکی نشده در حلقه While بمان و آنقدر مقدار شمارش پله را کم وزیاد بکن تا به مفدار تعدادپله برسد..فا صله زمانی بین هر دو پالس نیز در دستور While TimeREAD دارد .دراین کد برنامه هر بار که مقدار تعداد پله با شمارش آن متفاوت باشد
به آن مقدار یک را اضافه می کند.سپس باقیمانده تقسیم صحیح شمارش پله بر عدد 4 را در متغییر Phase می ریزد. و بر حسب اینکه این حاصل تقسیم 0و1و2و3 باشد به سابروتینهایPhase 1,Phase 2,Phase3 Phase 4 میرود.ودر اینجا بیتهای DTR,RTS را یک و صفر می کند.البته این نحوه 0و1 کردن سیمها بر مبنای تحریک دوبیتی سیم پیچهای موتور پله ای است .که می بایست در هر لحضه دو سیم پیچ به توالی 1و0 شوند بقیه کد های برنامه بسیار ساده است .وتنها جهت آموزشی شدن برنامه ارایه شده است مثل برنامه نویسی محاسبه تعداد دور یا حرکت عکس موتور پله ای
جهت اجرا شدن این برنام در کامپوتر کدهای DLL زیر را در folder سیستم ویندوز کپی کنید.
Private Sub Check1_Click()
If Check1.Value = 1 Then
Text3.Enabled = True
Else
Text3.Enabled = False
End If
End Sub
Private Sub Check2_Click()
If Check2.Value = 1 Then
Label15.Caption = Left((Text1.Text * Text3.Text) / 360, 6)
Else
Label15.Caption = "ÊÚÏÇÏ ÏæÑ"
End If
End Sub
Private Sub Command1_Click()
i = Val(Text3.Text)
U = Val(Text6.Text)
If Check2.Value = 1 Then Label15.Caption = Left((Text1.Text * Text3.Text) / 360, 6)
OPENCOM ("COM1:9600,N,8,1")
If i = U Then MsgBox "ÌåÊ ÍÑßÊ ÊÚÏÇÏ áå ÑÇ ãÎÇáÝ ÔãÇÑÔ áå æÇÑÏ ßäíÏ", vbInformation
Text7 = Text1
Output
End Sub
Private Sub Command2_Click()
If Command1.Caption = "ãÚßæÓ" Then
Command1.Caption = "ãÓÊÞíã"
Z = Text3.Text
Text3.Text = Text6.Text
Text6.Text = Z
Call Command1_Click
Else
Z = Text6.Text
Text6.Text = Text3.Text
Text3.Text = Z
Call Command1_Click
End If
End Sub
Private Sub Command3_Click()
CLOSECOM
End Sub
Private Sub Form_Load()
i = 0: U = 0
DTR 1
RTS 1
End Sub
Sub Output()
While i <> U
If Check2.Value = 1 Then Label16.Caption = Left((Text6.Text * Text7.Text) / 360, 5)
If Check1.Value = 1 Then Check1.Enabled = True
If i > U Then U = U + 1
If i < U Then U = U - 1
Text6.Text = Str$(U)
Phase = U Mod 4
If Phase < 0 Then Phase = Phase + 4
If Phase = 0 Then Phase1
If Phase = 1 Then Phase2
If Phase = 2 Then Phase3
If Phase = 3 Then Phase4
TIMEINIT
While TIMEREAD < 30
DoEvents
Wend
Wend
End Sub
Sub Phase1()
DTR 1
RTS 1
Text4.Text = "1"
Text5.Text = "1"
End Sub
Sub Phase2()
DTR 1
RTS 0
Text4.Text = "1"
Text5.Text = "0"
End Sub
Sub Phase3()
DTR 0
RTS 0
Text4.Text = "0"
Text5.Text = "0"
End Sub
Sub Phase4()
DTR 0
RTS 1
Text4.Text = "0"
Text5.Text = "1"
End Sub
Private Sub Form_Unload(Cancel As Integer)
CLOSECOM
End Sub
|