.
.
مقدمه :
در این مقاله تلاش شده تا چگونگی کار با پورت سریال کامپیوتر و ارتباط آن با کامپیوترهای دیگر و یا با میکروکنترلر تشریح گردد. برای ارتباط با روالهای VB و همچنین چگونگی ارتباط با مودم و انتقال اطلاعات از طریق آن بررسی شده است. در اینجا ما از VC++ استفاده کردهایم که البته اکثر توضیحات ذکر شده در زبانهای دیگری مانند ACTIVEX و یا کنترلهای API نیز صادق میباشند.
هر کامپیوتر دارای تعدادی پورت سریال میباشد که به ترتیب به نامهای Com2, Com1 و Com3 نامیده میشوند و هر کدام ممکن است که برای ارتباط با وسیله خاصی در نظر گرفته شود . مثلا ممکن است موش به Com1 و اسکنر به Com2 و هر دستگاه سریال دیگری نیز به همین صورت بر روی یکی از پورتهای سریال نصب شده در PC متصل شود. «پورت سریال»، کانالی برای انتقال اطلاعات و دریافت آن به صورت بیت به بیت است. I/O به روش سریال نمونهای از نحوهی ارتباط حمایت شده توسط ویندوز است این روش هنگام ارتباط (ONE TO ONE) بین دو وسیله استفاده میشود .این روش میتواند با استفاده از کابل یا مودم یا استفاده از فرستنده-گیرندههای مادون قرمز ایجاد گردد .ارتباط سریال با استفاده از روالهای API بسیار شبیه کار با فایلها میباشد. همچنین ویندوز دارای توابعی برای باز یا بسته کردن و دستکاری مشخصات پورت میباشد. برای کار با پورت سریال توابعی موجود است تا بتوان اطلاعات CPU را به زبان پورت ترجمه نمود و آن را به فرم بیت به بیت درآورد تا برای ارسال آماده شوند. همچنین، در حالت «دریافت اطلاعات» نیز با کنار هم قرار گرفتن این بیتها یک بایت ایجاد شده و به CPU برای پردازش فرستاده میشود. البته این فرایند توسط لایههای مختلفی صورت میگیرد. ویندوز برای کار با پورت سریال از یک «درایور انتقال سریال» به نام COMM.DRV استفاده میکند. البته با وجود روالهای API دیگر نیازی به چنین ارتباطهای سطح پایینی برای برنامهنویس احساس نمیشود. به عنوان یک برنامهنویس، بسته به نیاز خود میتوان از روالهای API و یا از یک سری ACTIVEX استفاده نمود. در این مقاله ما به ذکر برخی از روالهای API مهم و توضیح یک ACTIVEX ارایه شده، همراه با VISUAL STADIO PRO به نام ٣٢ COMM خواهیم پرداخت. در انتها نیز به روش ارتباط با میکروکنترلر خواهیم پرداخت.
.
قدم اول: ایجاد ارتباط با پورت سریال توسط ٣٢ COMM
برای شروع به کار و دسترسی به پورت توسط ٣٢ COMM یک سری property گنجانده شده است که با set کردن آنها میتوان پورت را آماده دسترسی نمود. در زیر به توضیح این property ها میپردازیم.
١– Setکردن شمارهی پورت mscomm1.Comport=[value]
این property شماره پورت مورد نظر را SET مینماید. این مقدار میتواند بین ٠ - ١٦ باشد. اگر پورتی با شمارهی مورد نظر شما موجود نباشد، یک خطا رخ میدهد که میتوان از آن برای اطمینان از انجام کار سود برد.
٢ set –کردن مشخصات پورت mscomm1.setting = [string value]
این property امکان تعریف مشخصات پورت را میدهد .این مشخصات بایستی به صورت یک رشته تعریف شود. این رشته شامل تعریف baud rate, parity bit, data bit, stop bit میباشد.
مقادیر معتبر برای این مقادیر در جدول زیر نشان داده شده است .
.
.
٣– portopen = [value bolean]
با setکردن آن به TRUE پورت مورد نظر باز شده و در اختیار کاربر قرار میگیرد .برای قطع ارتباط، این خاصیت را FALSE میکنیم. اگر شمارهی پورت در comport درست set نشود (موجود نبودن پورت) با باز کردن پورت یک خطا رخ میدهد که میتوان با چککردن آن درستی عمل را تست نمود.
‘ Open the serial port
MSComm1.CommPort = 2
MSComm1.Settings = “9600,N,8,1”
MSComm1.PortOpen = True
قدم دوم: سازماندهی و تنظیمات مورد نیاز
تنظیم بافرهای ورودی و خروجی: وقتی که شما یک پورت را باز میکنید، دو بافر ورودی و خروجی ایجاد میشود. این بافرها نگهدارندهی اطلاعات ورودی و خروجی میباشند .برای سازماندهی این بافرها تعدادی property وجود دارد.
.
Inbuffersize و Outbuffersize برای تعیین مقدار حافظهی بافر برای ورودی و خروجی میباشد. افزایش مقدار این حافظهها باعث احتمال کاهش حافظه برای برنامه میشود. البته با وجود کامپیوترهای امروزی نیازی به نگرانی نیست. کاهش این مقدار نیز باعث بروز over flow میشود مگر این که از «دستدهی» hand shaking استفاده شود.
.
Rthershold , Sthershold:
Sthershold وظیفهی setکردن و برگرداندن حداقل تعداد کاراکترهای قابل قبول در بافر خروجی قبل از رویداد oncomm و تغییر مقدار commevnt به مقدار commevsend را دارد. مثلا صفرکردن آن باعث غیرفعال شدن رویداد oncomm در برابر این مورد میشود و ١ کردن آن باعث رویدادن آن در زمان خالیشدن بافر میشود .برای توضیحات بیشتر به توضیحات رویداد oncomm مراجعه شود.
Rthershold وظیفهی set کردن و برگرداندن تعداد کاراکترهای موجود در بافر ورودی قبل از ایجاد رویداد oncomm و تغییر مقدار commevnt به مقدار commevrecive را دارد.
.
Inputlen
Setکننده و برگردانندهی طول رشتهی خوانده شده توسط input میباشد. قرار دادن صفر در آن باعث خواندن تمام محتویات بافر گیرنده میشود.
.
Eofenable
نشانگررسیدن به یک رشتهی end of file ((٢٦ )$Z - str^) میباشد و با ١ کردن آن با رسیدن به eof یک رویداد oncomm رخ خواهد داد.
.
اداره کردن بافرهای ورودی و خروجی
همان طور که گفته شد، بافرهای ورودی و خروجی هنگام ایجاد یک پورت ایجاد میشوند. با یکسری property میتوان بر رفتار این بافرها کنترل داشت. اطلاعات را میتوان به صورت binary با text دریافت کرد.
.
Input
این خاصیت برای ذخیره کردن و بازیابی اطلاعات درون بافر ورودی بکار میرود. مثل، اگر بخواهیم اطلاعات رسیده را در یک text box نشان دهیم: text1.text=mscomm1.input
نکته : ابتدا بایستی طول رشتهی مورد نظر با inputlen معین شود.
.
Inputmode
از برای تعیین فرمت ورودی به کار میرود. میتوان اطلاعات را به صورت binary با text دریافت کرد. این کار با استفاده از ثابتهای vb به نامهای comminputmodebinary یا comminputmodetext انجامپذیر است. در این صورت، اطلاعات به صورت text و یا باینری در یک آرایهی باینری ذخیره میشود.
.
Inbuffercount
بیانگر تعداد بایتهای رسیده میباشد. همچنین با صفر کردن آن، بافر ورودی پاک میشود.
.
بافر فرستنده
Output
از این خاصیت برای ارسال اطلاعات یا دستورات استفاده نمود .مانند خاصیت input میتوان binary با text را ارسال کرد. این کار را میتوان با استفاده از تعریف مقادیر به صورت binary با text انجام دهید.
.
مثال:
MSComm1.Output = "ATDT 111-111111" Send an AT command
MsComm1.Output = "This is a text string" Send a text string
MSComm1.Output = Out Send Byte array data
.
نکته: برای آشنایی با دستورات AT به بخش ارتباط با مودم مراجعه شود.
.
Outbuffercount
همچنین میتوان به تعداد کاراکترهای ارسالی از طریق این خاصیت پی برد .
.
دستدهی Hand Shaiking
یک بخش مهم در سازماندهی بافرهای ورودی و خروجی، اطمینان از صحت اطلاعات رسیده و اطلاعات ارسالی است و اطمینان از این که سرعت در اطلاعات رسیده باعث سرریز (over flow) نشده است. Hand Shaking با استفاده ار پروتکل ارتباطی خود اطلاعات رسیده را بررسی میکند تا در اثر سرریز از بین نرفته باشند.
کاربر بایستی پروتکل مورد نیاز را تعیین کند. این پروتکل در حالت عادی غیرفعال است (comnone).
.
.
انتخاب پروتکلها بستگی زیادی به دستگاهی که میخواهید به آن متصل شوید، دارد. با انتخاب comRTSXOnXOff هر دو پروتکل حمایت میشوند.
نکته : اگر این خاصیت را به هر کدام از مقادیر ١ و ٢ set کنیم، باید که خاصیت rtsenable را true کنید، وگرنه، قادر به دریافت اطلاعات نخواهیم بود.
.
Rtsenable = [bolean]
این خاصیت باعث high شدن پایهی rts میگردد. پایه rts در دستدهی rtc/cts استفاده شده و وجود این خاصیت به ما اجازه میدهد که به صورت دستی این کار را انجام دهیم.
.
Dsrholding
تشخیص دهندهی وضعیت پایه dsr است. این سیگنال از طرف فرستنده برای اعلام آمادگی خود فرستاده میشود.
.
Dtrenable
با setکردن آن به true خط Dtr با باز شدن پورت، high و با بسته شدن آن، low میشود.
.
.
نکته: در اکثر مواقع «صفرکردن» این خاصیت باعث hangup مودم میشود .
.
Ctsholding
این خاصیت تشخیصدهندهی آمادگی برای ارسال اطلاعات میباشد که با چک کردن پایهی cts این کار را انجام میدهد. این پایهی ورودی است و از طرف فرستنده ارسال میشود.
.
.
Parityreplace
این خاصیت setکننده و برگردانندهی کاراکتر جایگزین در هنگام رخداد خطای parity است. این کاراکتر در حالت معمول این خاصیت برابر ؟ است ولی میتوان آن را به هر کاراکتر دیگر setکرد و یا با مقداردهیِ "" آن را غیرفعال کرد .
.
رخداد Oncomm و خاصیت Commevent
در هنگام اجرای برنامه بایستی به رویدادهای مختلف یا خطاهای ایجاد شده توجه نمود. «رخداد» Oncomm و «خاصیت» commevent به کاربر اجازهی به دام انداختن و چک کردن رخدادها و خطاهای گوناگون را میدهد. در هنگام رخدادن خطا، یک رویداد oncomm اجرا شده و مقدار خاصیت Commevent تغییر میکند. بنابراین، میتوان با تست این خاصیت متوجه عملکرد برنامه شد.
جدول زیر مقادیر خطاها در commevent را نشان میدهد.
.
.
جدول زیر مقادیر رویدادها را در commevent نشان میدهد.
.
.
با تست این مقادیر در هنگام رویداد oncomm میتوان اطلاعات مفیدی در مورد اجرای برنامه کسب کرد.
.
ارتباط با مودم
یکی از کاربردهای جالب پورت سریال استفاده از آن برای ارتباط با مودم میباشد. مثلاً میتوان با آن شمارهگیری کرد و یا اطلاعات را از طریق خط تلفن ارسال و یا دریافت نمود. مثلا برای شمارهگیری با آن میتوان از این دستور استفاده کرد:
MSComm1.Output = "ATDT 0571-2642332" & vbcr
در این مثال AT آغازگر ارتباط است. D نشاندهندهی شمارهگیری (dialing) و T شمارهگیری به روش تُن است. در حالت ارتباط با یک شبکه بایستی از یک کاراکتر برگشتی نیز استفاده نمود .اگر شمارهگیری درست انجام شود، برگشتی تابع ”ok“ است.
دیگر دستورات همراه AT به صورت زیر است .
.
.
مثال : ارسال و دریافت یک فایل از طریق مودم
بخش فرستنده:
.
Dim Offset As Long
Dim FileData As Byte
Dim FileName As String
()Private Sub Form_Load
MSComm1.Settings = “28800,N,8,1”
MSComm1.InputLen = 1
MSComm1.CommPort = 2
MSComm1.PortOpen = True
Offset = 1
Open FileName For Binary Access Read As #1
End Sub
()Private Sub MSComm1_OnComm
If MSComm1.CommEvent = 2 Then
temp = MSComm1.Input
If Offset <= FileLen(FileName) Then
Get #1, Offset, FileData
q = FileData
MSComm1.Output = Format(q, “000”)
Offset = Offset + 1
End If
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Close #1
End Sub
.
بخش گیرنده:
.
Dim ByteCount As Long
Dim FileData As Byte
()Private Sub Form_Load
MSComm1.Settings = “28800,N,8,1”
MSComm1.InputLen = 3
MSComm1.CommPort = 1
MSComm1.PortOpen = True
Open “c:\sample.txt” For Binary Access Write As #1
End Sub
()Private Sub MSComm1_OnComm
If MSComm1.CommEvent = 2 And MSComm1.InBufferCount > 0 Then
FileData = CInt(MSComm1.Input)
ByteCount = ByteCount + 1
Put #1, ByteCount, FileData
MSComm1.Output = Chr$(26)
End If
End Sub
()Private Sub Command1_Click
MSComm1.Output = Chr$(26)
End Sub
Private Sub Form_Unload (Cancel As Integer)
Close #1
End Sub
.
توضیح پایه های پورت سریال
.
.
ارتباط میکروکنترلر و کامپیوتر از طریق پورت سریال
برای ارتباط با میکرو از طریق پورت سریال ٢٣٢ RS بایستی از یک رابط سختافزاری برای تطابق سطح سیگنال ٢٣٢ RS با سطح TTL استفاده نمود. برای این کار میتوان از تراشههایی مانند ٢٣٢ MAX یا ٢٣٣ MAX و یا ٢٧٥ DS استفاده نمود. طرح ارایه شده در زیر را میتوان برای ارتباط میکرو با ٢٣٢ RS به کار برد.
.
.
مدار ارایه شده در زیر را نیز میتوان به راحتی جایگزین تراشه ٢٧٥ DS نمود.
.
.
با کامل شدن ارتباط سختافزاری میتوان شروع به ایجاد نرمافزار لازم نمود. برای ارتباط با پورت سریال کامپیوتر نیاز به تنظیم BAUD RATE و دیگر تنظیمات لازم داریم که توسط میکرو و کامپیوتر حمایت شده باشند.
.
- برای تنظیم این مقدار در کامپیوتر با توجه به توضیحات قبلی بایستی :
MSComm1.Settings = "9600,N,8,1"
البته میتوان مقادیر Parity bit - Data bit - Stop bit را به مقدار دلخواه در میکروکنترلر و کامپیوتر set نمود.
.
- برای تنظیمات لازم در میکروکنترلر به مثال زیر توجه نمایید .
.
ORG 00
DB 1, 2, 3, 4, 5, 0
ORG 100
MOV TMOD,#20H timer1 , mode 2 (auto reload)
MOV TH1,#0FAH 4800 baud rate (with xtall = 11.0592 mhz)
MOV SCON,#50H 8 bit , 1 stop , ren enable
SETB TR1 run timer 1
MOV DPTR,#00H load data pointer to transfer data
LL1:
CLR A
MOVC A,@A+DPTR load ACC with data
JZ LL2 test for 0 data (end data)
CALL SEND call sender data function
INC DPTR inc data poniter
JMP LL1
SEND:
MOV SBUF,A load SBUF with data and send it
LL3:
JNB T1,LL3 wait for end send
RET
LL2:
END
.
مثال ارایه شده در بالا طرح سادهای از ارسال چند عدد به کامپیوتر میباشد . همچنین شما میتوانید اطلاعات را به همین صورت به میکرو منتقل نمایید .
برای آشنایی بیشتر با ارتباط سریال در میکروکنترلر میتوانید به کتابهای موجود در این زمینه و یا آدرس نگارنده مراجعه نمایید .
به امید سودمند بودن این مقاله و ارتقای روز افزون سطح تکنولوژی در کشورمان ایـران .
.
نویسنده: بهزاد خزاما
.
.
منبع:
.
.
www.etesalkootah.ir || 2018-01-01 © 2015 www.etesalkootah.ir © All rights reserved. تمامی حقوق برای www.etesalkootah.ir محفوظ است. بیان شفاهی بخش یا تمامی یک مطلب از www.etesalkootah.ir در رادیو، تلویزیون و رسانه های مشابه آن با ذکر واضح "اتصال کوتاه دات آی آر" بعنوان منبع مجاز است. هر گونه استفاده کتبی از بخش یا تمامی هر یک از مطالب www.etesalkootah.ir در سایت های اینترنتی در صورت قرار دادن لینک مستقیم و قابل "کلیک" به آن مطلب در www.etesalkootah.ir مجاز بوده و در رسانه های چاپی نیز در صورت چاپ واضح "www.etesalkootah.ir" بعنوان منبع مجاز است. |
.