خوش آمدید به رمان ۹۸ | بهترین انجمن رمان نویسی

رمان ۹۸ با هدف ترویج فرهنگ کتاب خوانی و تقویت قلم عزیزان ایجاد شده است.
هدف ما همواره ایجاد محیطی گرم و صمیمی و دوستانه بوده
برای مطالعه کامل رمان‌ها و استفاده از امکانات انجمن
به ما بپیوندید و یا وارد انجمن شوید.

~XFateMeHX~

کاربر برتر
کاربر رمان ۹۸
  
عضویت
6/4/20
ارسال ها
7,079
امتیاز واکنش
10,095
امتیاز
428
زمان حضور
35 روز 22 ساعت 26 دقیقه
نویسنده این موضوع
دراین برنامه از دو پورت سریال (COM) استفاده شده است شما می توانید هر دو برنامه را با هم اجرا کنید یا هر کدام را به صورت مجزا دقت داشته باشید

در صورتیکه شما برنامه مربوط به پورت سریال 1 را اجرا کنید.والمان دیگری مثل موس (Mouse) در این پورت باشد با پیغامی تحت عنوان پورت در دسترس نیست مواجه می شوید .این امر در مورد پورت 2 نیز صادق است.دقت داشته باشید این برنامه در ویندوز های با FAT32 اجرا می شود.
حال نحوه کد نویسی برنامه را با هم بررسی میکنیم

کد نویسی بدنه اصلی برنامه

به سراغ Private Form Load در خط 52 میرویم. .پارامترهای داخل این عبارت
اشاره به مسایلی میکند که در هنگام اجرای اولیه برنامه Load می شوند. با یک دستور شرطی If اگر پورت سریال در اتصال به چیز دیگری مثل موس باشد با ارسال پیغام COM unavailabld کاربر را از این قضیه مطلع می سازد. در این قسمت همچنین دو عبارت DTR,RTS را مشاهده می کنید .اینها بیتهای ارسال RS232 هستند که در هنگام Load برنامه هر دو مقدار یک را دارند. اگر در هنگام Load برنامه تغذیه آیسی و موتور پله ای وصل باشد متوجه حرکت کوچکی در موتور پله ای می شوید.که این به خاطر مقدار دهی DTR,RTS در هنگام Load برنامه است .
در قسمت Private Command1_Clickدو متغییر i,U با مقادیر وارد شده توسط کاربر مقداردهی می شو ند. یکی مربوط به تعداد پله ودیگری مربوط به شمارش پله موتور پله ای
پس از اجرا متوجه می شوید text مربوط به تعداد پله غیر فعال است .با کلیک بر روی Check Box بالای تعداد پله این text فعال می شود وشما مثلا در آن عدد 1000 را وارد کنید وسپس کلید شروع را بزنید. شمارش پله بعد از هر 30میلی ثانیه (30 میلی ثانیه در واقع فاصله بین هر پالس است.این عبارت در ُسابروتین Output قرار دارد وشما می توانید فاصله پالسها وسرعت موتور پله ای را با تغییر این پارامتر مطابق میل خودتان تنظیم کنید) یکی یکی اضافه می شود تا به مقدار 1000 که مقدار تعیین شده درtext تعدادپله توسط شما است برسد .در این پروژه تعداد دورهای موتور پله ای نیز در صورت تمایل شما با فعال کردن Check Box سمت راست بالای صفحه هم به صورت نهایی و هم به صورت لحظه به لحظه نشان داده می شود.پس از توضیح خلاصه از نحوه عملکرد برنامه سراغ کلید شروع می رویم


Source برنامه کنترل موتور پله ای

 

~XFateMeHX~

کاربر برتر
کاربر رمان ۹۸
  
عضویت
6/4/20
ارسال ها
7,079
امتیاز واکنش
10,095
امتیاز
428
زمان حضور
35 روز 22 ساعت 26 دقیقه
نویسنده این موضوع
در انتهای سابروتین مربوط به Command1
در خط 27 به سابروتین Output اشاره شده است.در این سابروتین در خط 58 با رستور While بر خورد می کنید.
در دستور While گفته شده تا زمانیکه مقدار تعداد پله با شمارش پله یکی نشده در حلقه While بمان و آنقدر مقدار شمارش پله را کم وزیاد بکن تا به مفدار تعدادپله برسد.فا صله زمانی بین هر دو پالس نیز در دستور While TimeREADدر خط 71 وجود دارد.دراین کد برنامه هر بار که مقدار تعداد پله با شمارش آن متفاوت باشد
به آن مقدار یک را اضافه می کند.سپس باقیمانده تقسیم صحیح شمارش پله بر عدد 4 را در متغییر Phase می ریزد. و بر حسب اینکه این حاصل تقسیم 0و1و2و3 باشد به سابروتینهایPhase 1,Phase 2,Phase3 Phase 4 میرود.ودر اینجا بیتهای DTR,RTS را یک و صفر می شوند.البته این نحوه 0و1 کردن بیتها بر مبنای علاقه‌مند دوبیتی سیم پیچهای موتور پله ای است .که می بایست در هر لحضه دو سیم پیچ به توالی 1و0 شوند بقیه کد های برنامه بسیار ساده است .وتنها جهت آموزشی شدن برنامه ارایه شده است مثل برنامه نویسی محاسبه تعداد دور یا حرکت عکس موتور پله ای در حالت عکس حرکت موتور پله ای که کد آن در خط 30 وجود دارد مقادیر شمارش پله با مقادیر حرکت پله جابجا می شود.در این حالت موتور در حالت عکس حرکت فعلیش می چرخد.شما به جای RTS می توانید از TXD نیز استفاده کنید.
در ضمن زمانیکه دکمه توقف را کلیک کنید.پورت سریال مربوطه بسته می شود.وبا صفر کردن مقادیر U,i شما حتی در حالت نرم افزاری هم متوقف می شوید.کد این قسمت از برنامه در خط
جهت اجرا کردن این برنامه در کامپیوتر کدهای DLL مورد نیاز این برنامه را در دارکتوری system ویندوز کپی کنید.


Source برنامه کنترل موتور پله ای

 

~XFateMeHX~

کاربر برتر
کاربر رمان ۹۸
  
عضویت
6/4/20
ارسال ها
7,079
امتیاز واکنش
10,095
امتیاز
428
زمان حضور
35 روز 22 ساعت 26 دقیقه
نویسنده این موضوع
5: If Check1.Value = 1 Then
6: Text3.Enabled = True
7: Else
8: Text3.Enabled = False
9: End If
10: End Sub
11:
12: Private Sub Check2_Click()
13: If Check2.Value = 1 Then
14: Label15.Caption = Left((Text1.Text * Text3.Text) / 360, 6)
15: Else
16: Label15.Caption = "تعداد دور"
17: End If
18: End Sub
19:
20: Private Sub Command1_Click()
21: i = Val(Text3.Text)
22: U = Val(Text6.Text)
23: If Check2.Value = 1 Then Label15.Caption = Left((Text1.Text * Text3.Text) / 360, 6)
24: OPENCOM ("COM2:9600,N,8,1")
25: If i = U Then MsgBox "جهت حرکت موتور پله ای مقدار تعداد پله را متفاوت با شمارش پله وارد کنید", vbInformation
26: Text7 = Text1
27: Output
28: End Sub
29:
30: Private Sub Command2_Click()
31: If Command1.Caption = "مستقیم" Then
32: Command1.Caption = "معکوس"


Source برنامه کنترل موتور پله ای

 

~XFateMeHX~

کاربر برتر
کاربر رمان ۹۸
  
عضویت
6/4/20
ارسال ها
7,079
امتیاز واکنش
10,095
امتیاز
428
زمان حضور
35 روز 22 ساعت 26 دقیقه
نویسنده این موضوع
33: Z = Text3.Text
34: Text3.Text = Text6.Text
35: Text6.Text = Z
36: Call Command1_Click
37: Else
38:
39: Z = Text6.Text
40: Text6.Text = Text3.Text
41: Text3.Text = Z
42: Call Command1_Click
43: End If
44: End Sub
45:
46: Private Sub Command3_Click()
47: CLOSECOM
48: U = 0
49: i = 0
50: End Sub
51:
52: Private Sub Form_Load()
53: i = 0: U = 0
54: DTR 1
55: RTS 1
56: End Sub
57: Sub Output()
58: While i <> U
59: If Check2.Value = 1 Then Label16.Caption = Left((Text6.Text * Text7.Text) / 360, 5)
60: If Check1.Value = 1 Then Check1.Enabled = True
61: If i > U Then U = U + 1
62: If i < U Then U = U - 1
63: Text6.Text = Str$(U)
64: Phase = U Mod 4


Source برنامه کنترل موتور پله ای

 

~XFateMeHX~

کاربر برتر
کاربر رمان ۹۸
  
عضویت
6/4/20
ارسال ها
7,079
امتیاز واکنش
10,095
امتیاز
428
زمان حضور
35 روز 22 ساعت 26 دقیقه
نویسنده این موضوع
65: If Phase < 0 Then Phase = Phase + 4
66: If Phase = 0 Then Phase1
67: If Phase = 1 Then Phase2
68: If Phase = 2 Then Phase3
69: If Phase = 3 Then Phase4
70: TIMEINIT
71: While TIMEREAD < 30
72: DoEvents
73: Wend
74: Wend
75: End Sub
76: Sub Phase1()
77: DTR 1
78: RTS 1
79: Text4.Text = "1"
80: Text5.Text = "1"
81: End Sub
82: Sub Phase2()
83: DTR 1
84: RTS 0
85: Text4.Text = "1"
86: Text5.Text = "0"
87: End Sub
88: Sub Phase3()
89: DTR 0
90: RTS 0
91: Text4.Text = "0"
92: Text5.Text = "0"
93: End Sub
94: Sub Phase4()
95: DTR 0
96: RTS 1
97: Text4.Text = "0"
98: Text5.Text = "1"
99: End Sub
100:
101: Private Sub Form_Unload(Cancel As Integer)
102: CLOSECOM
103: End Sub


Source برنامه کنترل موتور پله ای

 

~XFateMeHX~

کاربر برتر
کاربر رمان ۹۸
  
عضویت
6/4/20
ارسال ها
7,079
امتیاز واکنش
10,095
امتیاز
428
زمان حضور
35 روز 22 ساعت 26 دقیقه
نویسنده این موضوع
کد نویسی Module برنامه

در قسمت module برنامه از فایلهای API ویندوز استفاده شده است .فایلهای API در واقع فایلهای برنامه ویندوز است .که برنامه نویس ها جهت بالا بردن کارایی برنامه از آن در برنامه های خود استفاده می کنند.
نحوه معرفی کردن API در هر زبان برنامه نویسی متفاوت است .در زبان ویژوآل بیسیک نحوه معرفی API به صورت زیر است.
بعد از عبارت Declare Function نام تابع API , پس از آن عبارت Lib می آوریم.Lib بیانگر کتابخانه ای است که این فایل dll در آن وجود دارد پس از آن نوع متغییر ورودی یا خروجی بودن آن مشخص می شود.

1:
2:
3: Declare Sub CLOSECOM Lib "Port" ()
4: Declare Sub SENDBYTE Lib "Port" (ByVal b%)
5: Declare Function READBYTE Lib "Port" () As Integer
6: Declare Sub DTR Lib "Port" (ByVal b%)
7: Declare Sub RTS Lib "Port" (ByVal b%)
8: Declare Sub TXD Lib "Port" (ByVal b%)
9: Declare Function CTS Lib "Port" () As Integer
10: Declare Function DSR Lib "Port" () As Integer
11: Declare Function RI Lib "Port" () As Integer
12: Declare Function DCD Lib "Port" () As Integer
13: Declare Sub DELAY Lib "Port" (ByVal b%)
14: Declare Sub TIMEINIT Lib "Port" ()
15: Declare Sub TIMEINITUS Lib "Port" ()
16: Declare Function TIMEREAD Lib "Port" () As Long
17: Declare Function TIMEREADUS Lib "Port" () As Long
18: Declare Sub DELAYUS Lib "Port" (ByVal l As Long)
19: Declare Sub REALTIME Lib "Port" (ByVal i As Boolean)
20: Declare Sub OUTPORT Lib "Port" (ByVal A%, ByVal b%)
21: Declare Function INPORT Lib "Port" (ByVal p%) As Integer
22: Declare Function JOYX Lib "Port" () As Long
23: Declare Function JOYY Lib "Port" () As Long
24: Declare Function JOYZ Lib "Port" () As Long
25: Declare Function JOYW Lib "Port" () As Long
26: Declare Function JOYBUTTON Lib "Port" () As Integer
27: Declare Function SOUNDSETRATE Lib "Port" (ByVal Rate%) As Integer
28: Declare Function SOUNDGETRATE Lib "Port" () As Integer
29: Declare Function SOUNDBUSY Lib "Port" () As Boolean
30: Declare Function SOUNDIS Lib "Port" () As Boolean
31: Declare Sub SOUNDIN Lib "Port" (ByVal Puffer$, ByVal Size%)
32: Declare Sub SOUNDOUT Lib "Port" (ByVal Puffer$, ByVal Size%)
33: Declare Function SOUNDGETBYTES Lib "Port" () As Integer
34: Declare Function SOUNDSETBYTES Lib "Port" (ByVal b%) As Integer
35: Declare Sub SOUNDCAPIN Lib "Port" ()
36: Declare Sub SOUNCAPDOUT Lib "Port" ()

module فوق یک module کلی است.و در خیلی از برنامه های دیگر جواب می دهد.برای این برنامه شما میتوانید از module زیر که ساده شده module فوق می باشد استفاده کنید.همانطور که ملا حظه می کنید تنها از فایل API مربوط به باز کردن وبستن پورت وبیتهای DTR,RTS وعبارات مربوط به فاصله زمانیها استفاده شده است.

1:
2: Declare Function OPENCOM Lib "Port" (ByVal A$) As Integer
3: Declare Sub CLOSECOM Lib "Port" ()
4: Declare Sub DTR Lib "Port" (ByVal b%)
5: Declare Sub RTS Lib "Port" (ByVal b%)
6: Declare Sub DELAY Lib "Port" (ByVal b%)
7: Declare Sub TIMEINIT Lib "Port" ()
8: Declare Sub TIMEINITUS Lib "Port" ()
9: Declare Function TIMEREAD Lib "Port" () As Long
10: Declare Function TIMEREADUS Lib "Port" () As Long
11: Declare Sub DELAYUS Lib "Port" (ByVal l As Long)

منبع: رشد


Source برنامه کنترل موتور پله ای

 
shape1
shape2
shape3
shape4
shape7
shape8
بالا