تقدیم به تمام دوستان خوبم در IranLed
من سورس را در سی شارپ دات نت 2010 نوشتم .
از لحاظ توضیحات نرم افزاری این موارد قابل ذکر است:
نرم افزار کاملا به زبان ساده نوشته شده و در نرم افزار شما قادر هستید سنسور را در هر لحظه خوانده و مشاهده کنید، از طرفی قادر هستید تا آدرس سنسور را به آدرس دلخواه خودتون تغییر بدهید.
در ابتدای کار یک آرایه دو بعدی از نوع بایتی حاوی (آدرس سنسور و درخواست نوع اطلاعات که در اینجا درخواست به سانتی متر است، به صورت هگز) تعریف می شود.
سپس با دستور Write و متد Oveload دوم آن با یک بازه 1 میلی ثانیه ای درخواست ارسال شده است.(ایجاد وقفه با system.Threading.Thread.Sleep تعریف شده است.)
نهایتا چون سنسور 2 بار اطلاعات را در قالب بایت ارسال می کند، دستور Readbyte در برنامه 2 بار نوشته شده است.
برای پرهیز از هنگ کردن برنامه، من timeout خواندن اطلاعات را تعریف کردم(دستور های serialPort1.ReadTimeout = 1; و serialPort1.WriteTimeout = 20; )
این زمان را شما در ابتدای برنامه می توانید تغییر دهید.... (در صورتی که مشکلی پیش آمد زمان را که بر حسب میلی ثانیه هست تغییر دهید.)
همچنین دستور ReadByte را در دستور try قرار دادم تا مشکلی ایجاد نشود.
تمامی تنظیمات ارسال دیتا و تغییر عدد سنسور نیز به همین شکل اما در آرایه ای جدید تعریف شده است که در صورتی که
PDF فارسی جناب ilgar را مطالعه بفرمایید، به راحتی متوجه می شوید.
به مثال زیر که بخشی از برنامه است دقت کنید:
کد:
byte[] Sensor1 = new byte[8];
Sensor1[0] = first_value;
Sensor1[1] = 0xA0;
Sensor1[2] = first_value;
Sensor1[3] = 0xAA;
Sensor1[4] = first_value;
Sensor1[5] = 0xA5;
Sensor1[6] = first_value;
Sensor1[7] = final_value;
if (serialPort1.IsOpen == true)
{
serialPort1.Write(Sensor1, 0, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 1, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 2, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 3, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 4, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 5, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 6, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 7, 1);
return;
}
در اینجا اگر به ابتدای سورس دقت کنید، در واقع من یک بایت را با اسم first value انتخاب کرده ام که با دستور Switch case در خطوط بالاتر سمپل، پر می شود.
این دستور switch case شماره ابتدایی سنسور را مشخص کرده است .
مقدار final value نیز از comboBox مقدار مورد نیاز را با استفاده از دستور Switch case به خود می گیرد و نهایتا در آرایه جایگزاری می شود.
هدف از این کار تغییر آدرس (شماره سنسور) از هر آدرسی به آدرس دیگر است.
دلیل موفقیت من، تسلط به ز بان c و basic بود که ترجیحا آنرا در C#.net نوشتم و شما می توانید به راحتی آنرا در VB.net نیز شبیه سازی کنید.
دقت فرمایید اجرای این برنامه فقط در C#.net نسخه سال 2010 انجام گیرد و در نسخه های قدیمی تر، با مشکل مواجه می شوید.... (در حقیقت visual Studio 2010 را باید نصب کرده باشید.)
ضمنا برای ارتباط سخت افزاری هم از ماژول آماده FT232 استفاده کنید و tx ماژول را به Rx سنسور و Rx ماژول را به TX سنسور بدهید. که به دلیل سادگی مدار آنرا دیگه قرار ندادم...
در صورتی هم که پورت کام سیستم را می خواهید استفاده کنید، از یه max232 به عنوان واسط استفاده کنید تا سطح ولتاژ پورت com را به سطح TTl بیاره.....
موفق باشید.
محمدرضا ناظم
برنامه فوق را در پیوست دریافت کنید :