.

.

مقدمه :

در این مقاله تلاش شده تا چگونگی کار با پورت سریال کامپیوتر و ارتباط آن با کامپیوترهای دیگر و یا با میکروکنترلر تشریح گردد. برای ارتباط با روال‌های 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 می‌باشد.

مقادیر معتبر برای این مقادیر در جدول زیر نشان داده شده است .

.

جدول 1

.

٣– 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).

.

جدول 2

.

انتخاب پروتکل‌ها بستگی زیادی به دستگاهی که می‌خواهید به آن متصل شوید، دارد. با انتخاب comRTSXOnXOff هر دو پروتکل حمایت می‌شوند.

نکته : اگر این خاصیت را به هر کدام از مقادیر ١ و ٢ set کنیم، باید که خاصیت rtsenable را true کنید، وگرنه، قادر به دریافت اطلاعات نخواهیم بود.

.

Rtsenable = [bolean]

این خاصیت باعث high شدن پایه‌ی rts می‌گردد. پایه rts در دستدهی rtc/cts استفاده شده و وجود این خاصیت به ما اجازه می‌دهد که به صورت دستی این کار را انجام دهیم.

.

Dsrholding

تشخیص دهنده‌ی وضعیت پایه dsr است. این سیگنال از طرف فرستنده برای اعلام آمادگی خود فرستاده می‌شود.

.

Dtrenable

با  setکردن آن به true خط Dtr با باز شدن پورت، high و با بسته شدن آن، low می‌شود.

.

جدول 3

.

نکته: در اکثر مواقع «صفرکردن» این خاصیت باعث  hangup مودم می‌شود .

.

Ctsholding

این خاصیت تشخیص‌دهنده‌ی آمادگی برای ارسال اطلاعات می‌باشد که با چک کردن پایه‌ی cts این کار را انجام می‌دهد. این پایه‌ی ورودی است و از طرف فرستنده ارسال می‌شود.

.

جدول 4

.

Parityreplace

این خاصیت  setکننده و برگرداننده‌ی کاراکتر جایگزین در هنگام رخداد خطای parity است. این کاراکتر در حالت معمول این خاصیت برابر ؟ است ولی می‌توان آن را به هر کاراکتر دیگر  setکرد و یا با مقداردهیِ "" آن را غیرفعال کرد .

.

رخداد  Oncomm و خاصیت  Commevent

در هنگام اجرای برنامه بایستی به رویدادهای مختلف یا خطاهای ایجاد شده توجه نمود. «رخداد» Oncomm و «خاصیت» commevent به کاربر اجازه‌ی به دام انداختن و چک کردن رخدادها و خطاهای گوناگون را می‌دهد. در هنگام رخ‌دادن خطا، یک رویداد oncomm اجرا شده و مقدار خاصیت Commevent تغییر می‌کند. بنابراین، می‌توان با تست این خاصیت متوجه عملکرد برنامه شد.

جدول زیر مقادیر خطاها در  commevent را نشان می‌دهد.

.

جدول 5

.

جدول زیر مقادیر رویدادها را در commevent نشان می‌دهد.

.

جدول 6

.

با تست این مقادیر در هنگام رویداد oncomm می‌توان اطلاعات مفیدی در مورد اجرای برنامه کسب کرد.

.

ارتباط با مودم

یکی از کاربردهای جالب پورت سریال استفاده از آن برای ارتباط با مودم می‌باشد. مثلاً می‌توان با آن شماره‌گیری کرد و یا اطلاعات را از طریق خط تلفن ارسال و یا دریافت نمود. مثلا برای شماره‌گیری با آن می‌توان از این دستور استفاده کرد:

MSComm1.Output = "ATDT 0571-2642332" & vbcr

در این مثال AT آغازگر ارتباط است. D نشاندهنده‌ی شماره‌گیری (dialing) و T شماره‌گیری به روش تُن است. در حالت ارتباط با یک شبکه بایستی از یک کاراکتر برگشتی نیز استفاده نمود .اگر شماره‌گیری درست انجام شود، برگشتی تابع ”ok“ است.

دیگر دستورات همراه AT به صورت زیر است .

.

جدول 7

.

مثال : ارسال و دریافت یک فایل از طریق مودم

بخش فرستنده:

.

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

.

توضیح پایه های پورت سریال

.

جدول 8

.

ارتباط میکروکنترلر و کامپیوتر از طریق پورت سریال

برای ارتباط با میکرو از طریق پورت سریال ٢٣٢ RS بایستی از یک رابط سخت‌افزاری برای تطابق سطح سیگنال ٢٣٢ RS با سطح TTL استفاده نمود. برای این کار می‌توان از تراشه‌هایی مانند ٢٣٢ MAX یا ٢٣٣ MAX و یا ٢٧٥ DS استفاده نمود. طرح ارایه شده در زیر را می‌توان برای ارتباط میکرو با ٢٣٢ RS به کار برد.

.

مداری برای ارتباط میکروکنترلر با آر اس 232

.

مدار ارایه شده در زیر را نیز می‌توان به راحتی جایگزین تراشه ٢٧٥ DS نمود.

.

مدار جایگزین تراشه دی اس 275

.

با کامل شدن ارتباط سخت‌افزاری می‌توان شروع به ایجاد نرم‌افزار لازم نمود. برای ارتباط با پورت سریال کامپیوتر نیاز به تنظیم 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" بعنوان منبع مجاز است.

.