PDA

View Full Version : سوال: خواندن اطلاعات رمز شده در پورت com



Reza.Plus
دوشنبه 24 خرداد 1389, 22:41 عصر
یه برنامه با vb6 نوشتم که از طریق کابل RS232 اطلاعات یک ترازوی الکترونیکی رو می خونه ولی وقتی اطلاعات خونده و در یک label نوشته می شه قابل فهم نیست. مثلا صفر کیلوگرم بصورت " ک" نشون داده می شه. لطفا کمک کنید.

poorhasan
سه شنبه 25 خرداد 1389, 09:47 صبح
یه برنامه با vb6 نوشتم که از طریق کابل RS232 اطلاعات یک ترازوی الکترونیکی رو می خونه ولی وقتی اطلاعات خونده و در یک label نوشته می شه قابل فهم نیست. مثلا صفر کیلوگرم بصورت " ک" نشون داده می شه. لطفا کمک کنید.
با سلام
اول چک کن ببین baud rate برنامه با baud rate ترازو یکی هست یا نه بعدش هم کارکتر ها رو چه جوری از پورت سریال می خونی یکی یکی یا به صورت یکجا اگه یکی یکی می خونی باید به این صورت نمایششون بدی
label1.caption=label1.caption+mscomm1.input
که این دستور در رویداد oncomm کنترل mscomm1 فرار می گیره

اگه ممکن هست برنامه تون رو بذارید تا بتونم توضیح بیشتری بدم

Reza.Plus
سه شنبه 25 خرداد 1389, 12:29 عصر
من مقدار mscomm1.input رو توي يك متغير مي ريزم و اونو مي خونم در حقيقت همشو يه جا خونده و كنترل مي كنم كه متاسفانه جواب نمي ده.
به عبارتي يه تايمر روي فرم قرار داره و هر چند ثانيه پورت رو كنترل مي شه اگه مقدار بود به متغير يا به label ارسال مي شه.
در ضمن type متغير از نوع string هست.
و برنامه رو امروز عصر مي فرستم كه كنترل كنين

ahp_online
سه شنبه 25 خرداد 1389, 13:32 عصر
سلام
آموزش پورت سریال با وی بی را می تونید از لینک زیر دانلود کنید:
http://www.hayatieng.com/index.php?option=com_remository&Itemid=75

poorhasan
چهارشنبه 26 خرداد 1389, 07:18 صبح
من مقدار mscomm1.input رو توي يك متغير مي ريزم و اونو مي خونم در حقيقت همشو يه جا خونده و كنترل مي كنم كه متاسفانه جواب نمي ده.
به عبارتي يه تايمر روي فرم قرار داره و هر چند ثانيه پورت رو كنترل مي شه اگه مقدار بود به متغير يا به label ارسال مي شه.
در ضمن type متغير از نوع string هست.
و برنامه رو امروز عصر مي فرستم كه كنترل كنين

با سلام
از این کد ها استفاده کن فکر کنم جواب بده باود ریت رو هم حتما چک کن
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputLen = 1
MSComm1.PortOpen = True
End Sub


Private Sub MSComm1_OnComm()

Select Case MSComm1.CommEvent
Case comEvReceive


serial =serial+ MSComm1.Input
label1.caption=serial
End Select
End sub
البته یه چیزی رو بگم که این برنامه یه ایرادی داره اونم اینه که با سرعت نسبتا زیاد مقادیر درج شده در لیبل یک ممکنه تغییر کنه که می تونی برای حل این کار یه تغییراتی بدی این کد رو گذاشتم که فقط مشکلت تو خوندن از پورت حل شه بازم برنامه ت رو بذار تا بتونم اظهار نظر دقیقتری بکنم یه چیز دیگم یادم رفت بگم دیتا بیت و پریتی و استپ بیت ترازو رو هم چک کن باید با اونی که تو برنامه گذاشتی یکی باشه

Reza.Plus
چهارشنبه 26 خرداد 1389, 23:17 عصر
سلام برنامه از خوندن پورت تو لیست پایین هست که کنترل کن

Private Sub Form_Load()

MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"

If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
MSComm1.PortOpen = True

End Sub



Private Sub Timer1_Timer()
Dim A As String
A = MSComm1.Input
End Sub

این تایمر که رو فرم گذاشتم هر چند ثانیه پورت رو می خونه و همچنین تمام تنظیمات ترازو و MSComm یکی هست ولی تو متغییر A که پورت رو می خونه مثلا وقتی وزن 180 کیلوگرم هست "ک $ک $ک $ک $ک $ک $ک $ک $ک $ک $ک $ک $" به این صورت نشون داده می شه. درضمن من این برنامه رو به چند تا ترازوی دیگه هم دادم ولی فقط تو این یکی این مشکل وجود داره . کمکم کنید وافعا نمی دونم چیکار کنم.

poorhasan
پنج شنبه 27 خرداد 1389, 12:40 عصر
سلام برنامه از خوندن پورت تو لیست پایین هست که کنترل کن

Private Sub Form_Load()

MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"

If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
MSComm1.PortOpen = True

End Sub



Private Sub Timer1_Timer()
Dim A As String
A = MSComm1.Input
End Sub

این تایمر که رو فرم گذاشتم هر چند ثانیه پورت رو می خونه و همچنین تمام تنظیمات ترازو و MSComm یکی هست ولی تو متغییر A که پورت رو می خونه مثلا وقتی وزن 180 کیلوگرم هست "ک $ک $ک $ک $ک $ک $ک $ک $ک $ک $ک $ک $" به این صورت نشون داده می شه. درضمن من این برنامه رو به چند تا ترازوی دیگه هم دادم ولی فقط تو این یکی این مشکل وجود داره . کمکم کنید وافعا نمی دونم چیکار کنم.

اگه توی ترازو های دیگه مشکل نداره و درست جواب میده که پس ترازوت مشکل داره یعنی خروجی سریالش
به نظر من از رویداد oncomm کنترل mscomm استفاده کنی بهتره چون شما میاین هر چند ثانیه یک بار بافر کنترل کام رو می خونید اصلا مشخص نیست که بافر این کنترل چه مقدار داده را در خود قرار داده است اگر هم می خواهید با تایمر کار کنید فکر می کنم باید این دستور رو تو قسمت لود بنویسید
MSComm1.InputLen = x
که x تعداد کارکترهای ارسال شده از ترازو است بعد اونو بخونید شاید تو برنامه شما این دستور با مقدار کمی تنظیم شده باشد من پیشنهاد می کنم که شما با استفاده از هایپر ترمینال خود ویندوز ابتدا از صحت خروجی ترازو مطمئن شید بعدن برنامه تو وی بی تست کنید
all programm>accessories>communication>Hyper Terminal
به جای مودم com رو انتخاب کنید تنظیمات رو هم انجام بدید (باود و ...) بعد هر چی رو هایپر نشون داد رو تو این تاپیک بذارید تا بگم حالا چکار کنید
اگه بازم سوالی بود من در خدمتم

Reza.Plus
یک شنبه 30 خرداد 1389, 12:05 عصر
سلام
هايپر ترمينال چيزي نشون نمي ده يعني عكس العملي نداره

poorhasan
یک شنبه 30 خرداد 1389, 17:57 عصر
سلام
هايپر ترمينال چيزي نشون نمي ده يعني عكس العملي نداره
با سلام پس پورت سریال ترازویی که ازش استفاده می کنی خرابه و خروجی نداره و یا حتما باید یک مقدار رو به ترازو ارسال کنی تا یک مقدار رو برات بفرسته
شما باید از اون ترازو کاتالوگی به دست بیاری و نحوه ارسال وزن رو دقیقا بدونی که به چه شکلی هست این احتمال وجود داره که به ازای درخواست وزن ترازو وزن رو ارسال کنه
اگه تو هایپر ترمینال بتونی وزن رو ببینی خیلی راحت تو وی بی می شه برنامش رو نوشت البته تو اینجا هایپر ترمینال فقط برای تست پورت سریاله ربطی به برنامه ای که ما تو وی بی می نویسیم نداره
در هر حال این کار دردسرای خودشو داره ولی مطمئنا اگه تلاش کنی نتیجه می گیری

a_mohammadi_m
دوشنبه 31 خرداد 1389, 11:55 صبح
با سلام
با اينكه ممكنه نظر دوستان در مورد اشكال سخت افزاري پورت Com كامپيوتر يا ترازو درست باشه
اما من هم خواستم تجربه خودم رو در اين مورد بگم
قرار بود من هم نرم افزاري مشابه اين براي يك باسكول 60 تني ديجيتال طراحي كنم
پس از بررسي امكانات سخت افزاري باسكول موضوع به اين شكل در اومد
1- باسكول اطلاعات خودش رو موقع توزين يا موقعي كه خالي بود از طريق پورت سريال ارسال مي كرد به يك دستگاه واسط كه كارهاي محاسباتي رو مي تونست انجام بده و يك صفحه شمال اطلاعات توزين رو چاپ بگيره
قرار بود اون دستگاه از پروسه حذف بشه و بجاش كامپيوتر اون كارها رو انجام بده و همچنين بانك اطلاعاتي نگهداري بشه
2 - اول مسئله پروتكل ارتباطي باسكول با پورت Com بود. يعني يك راهنماي كوچك همراه باسكول داده بودن كه نوع اطلاعات ارسالي رو تشريح ميكرد . مثلا نوشته بود كه در هر ارسال 4 بايت اطلاعات ارسال مي شه با سرعت فلان و پاريته فلان و ... اين چهار بايت تقسيم شده بوده به چند قسمت مثلا 16 بايت اول وزن فعلي رو مي گفت و 5 بايت بعدي ... و 4 بايت بعدي ... و الي آخر
3- نوع كابل ارتباطي باسكول با پورت Com اون دستگاه واسط يا كامپيوتر سيم بندي خاصي داشت يعني كابل نول مودم يا كابل يك به يك يا ... استاندارد نبود و براي خودش طراحي شده بود
.......

مسئله شما اينه كه اول بايد پروتكل ارتباطي رو بدونين يعني اطلاعات دريافتي رو به همون شكلي بخونيد و تقسيم كنين كه دستگاه فرض كرده بعد كابل ارتباطي بايد درست باشه يعني ممكن با يك كابل استاندارد شما اطلاعاتي رو بگيرين ولي ممكن اطلاعات بي معني بشن حالا اگه همه اين موارد رو درست انجام دادين اون وقت نوبت نرم افزار شماست كه اطلاعات دريافتي رو پردازش كنه و وزن و ساير اطلاعات رو از دل اطلاعات دريافتي بياره بيرون
موفق باشيد
( البته بگم كه من يك هفته با اين موضوع ور رفتم و نهايتا معلوم شد كابلشون درست نبود و هنوز هم دو ساله قراره كابل بخرن من هم براشون برنامه بنويسم (: !!! )

poorhasan
دوشنبه 31 خرداد 1389, 17:12 عصر
:لبخند:با سلام
دوست عزیزمون درست می گن من با فرض اینکه کابل رو درست متصل کردند توضیجات بالا رو دادم حتما و حتما کابل رو چک کنید که ممکنه خیلی سرکارتون بذاره اتصالات رو هم که می دونید
TX ترازو ( پایه شماره 3 کانکتور اگه از نوع DB9 باشه اگه DB25 باشه فرق می کنه) به RX کامپیوتر اونم اگه DB9 باشه میشه پایه شماره 2 ) و GND رو که در هر دوطرف به هم وصل میشن پایه 5 به 5
همین دو سیم کافیه که اطلاعات از ترازو به کامپیوتر ارسال بشه
من خودم یه برنامه برای یه باسکول 100 تنی تو یه مجتمع فولاد نوشتم و با دستورات ساده vb6 وزن رو از نشانگر باسکول می خونه و داخل دیتا بیس دخیره می کنه اولش خیلی دردسر داره ولی قلقشو که به دست بیاری مثل خمیر تودستته می تونی هر کاری باهاش بکنی :لبخند::لبخند::لبخند::گیج::گی :

jamshid2008
یک شنبه 17 مرداد 1389, 01:12 صبح
یه برنامه با vb6 نوشتم که از طریق کابل RS232 اطلاعات یک ترازوی الکترونیکی رو می خونه ولی وقتی اطلاعات خونده و در یک label نوشته می شه قابل فهم نیست. مثلا صفر کیلوگرم بصورت " ک" نشون داده می شه. لطفا کمک کنید.

هر ترازویی اطلاعات را بصورت کد اسکی به پورت سریال ارسال می کند.باید ابتدا کل اطلاعات ارسالی را در یک بافر ذخیره کنیدو سپس کد اسکی تک تک خانه های بافر را که بصورت یک رشته ساخته شده است بدست آورده و به باینری تبدیل نمایید. هریک از خانه های بافر باید یک بایت باشد. حال طبق فرمولی که سازنده ارائه می دهد مقدار وزن خروجی را از بایتهای مذکور بدست می آورید.

vbhamed
یک شنبه 17 مرداد 1389, 08:52 صبح
سلام
تو اين تاپيك يك نمونه برنامه گذاشته شده
http://barnamenevis.org/forum/showthread.php?t=104916

البته همانطور كه دوستان گفتن چند تا نكته مهمه
1 - حتما اول كابل رو چك كنيد
2 - تنظيمات ارتباطي رو طبق كاتالوگ بدست بياريد (اگر كاتالوگ نداشتيد حتما تو اينترنت از رو مدلش پيدا ميشه)
3 - قبل از اينكه تو هايپر ترمينال جواب بگيريد نريد تو ويژوال بيسيك

اگر مورد 3 رو انجام دادين، اونموقع مطمئنيد كه مورد 1 و 2 هم درسته