در این مقاله سعی میکنیم بااستفادهاز برد آردوینو و کتابخانه Modbus که قبلا در این مورد مقالهای انتشار شده بود، عملا ارتباط با یک نمایشگر صنعتی که امروزه به نام(Human Machine Interface (HMI از آن یاد میشود یک نمونه کد و یکیاز کاربردهای ارتباط مدباس را آموزشبدیم که طرفدارهای خاص خودش رو داره.
HMI یا همان نمایشگرهای صنعتی امروزه در اکثر دستگاههای بزرگ و کوچک استفاده میشود، که انواع مختلفی از برندها و امکانات متنوع در دنیا هستند و بیشتر پروتکلهای ارتباطی عمومی و پیشرفته در آن لحاظ شدهاست که میتوان از Rs232 – Modbus – Ethernet – Canbus -Canopen و… در آن نام برد که امروزه تبدیل به وصله جدانشدنی از صنعت و الکترونیک شدهاست.
هر HMI تنظیمات خاص و نرمافزار خاص خودش را دارد که در این مقاله ما با برند دلتا آموزش خواهیم داد.
همانطورکه گفتهشد هر برند از HMIها دارای نرمافزار مخصوص خودشان میباشند که در این مبحث قرار هست با HMI دلتا که نسبتا محبوبیت زیادی از لحاظ قیمت و کیفیت و فراوانی دارد را کار بکنیم. نرمافزار مخصوص این برند DOPSoft است که معمولا همراه HMI فروشنده در اختیار کاربر قرار میده.
برای شروع در این نرمافزار ابتدا باید، ایجاد فایل جدید و انتخاب نوع نمایشگری که قراره از آن استفادهکرد را تعیینکنیم.
گزینه بعدی انتخاب پروتکل ارتباطی و درگاهی که از آن در برنامه استفاده میشود رو انتخاب میکنیم.(چون در این نمایشگرها اکثرا بیش از یک درگاه و نوع ارتباط ممکناست باشد)
1-نام پورت(LINK NAME) که ما پورت ۲ را انتخاب میکنیم.
2-نوع ارتباط کنترلر(CONTROLER) مود باس رو انتخاب میکنیم.
3-اینترفیس و تنظیمات مربوط به نرخ ارسال و دریافت که 485-9600-8-N-1 است رو انتخاب کردیم.
بعداز تنظیمات فوق برنامه آماده طراحی هست که در این مبحث به علت طولانینشدن موضوع فقط یک افزونه به آن اضافه میکنیم که قراره مقدار یکیاز ورودیهای آنالوگ در برد آردوینو را برایمان نمایشبدهد.
همانطورکه در تصویر میبینید ما یک نمایشگر عقربهای برای نشاندادن مقدار ورودی آنالوگ برد آردوینو انتخابکردیم و آدرس ریجستر ۱۰ را بهش دادیم یعنی هر تغییری در مقدار این آدرس از حافظه آردوینو اتفاق بیفتد نمایشگر همان مقدار را برایمان بهصورت عقربه نمایش میدهد. مقدار آدرس اسلیو را نیز یک دادیم. (در این آموزش مستر نمایشگر هست و اسلیو برد آردوینو که آدرس یک رو براش اختصاصدادیم که در قسمت نرمافزار برد آردوینو به آن اشارهخواهیمکرد)
خب تا اینجا ما تنظیمات HMI را انجام دادیم و برنامه مربوطه رو روی HMI دانلود میکنیم و کار با نمایشگر تا اینجا به پایان میرسد.
برای ادامه کار ما علاوهبر برد آردوینو نیاز به بستر فیزیکی RS485 داریم که خوشبختانه هم میشه ساخت و هم از ماژولهای آماده استفادهکرد چون بردهای آردوینو فقط بستر RS232 هست که از طریق ماژول مذکور این بستر را مهیا میکنیم. در این پروژه برای سهولت کار ما از ماژول آماده استفاده میکنیم. انواع مختلف این ماژولها در بازار موجود و بسته به سلیقه و نیازمان انتخاب میکنیم.
ماژول فوق بستر مورد نیاز ما را در این پروژه فراهم میکند. پینهای این ماژول عبارتند از:
Vcc و gnd که تغذیه ماژول میباشند 5Vdc
A-B خروجیهای RS485
Di به پین Tx برد آردوینو
Ro به پین Rx برد آردوینو
De-Re پین کنترل ارسال دریافت است که داخل برنامه به آن اشاره خواهیم کرد. این پین وضعیت ماژول را تعیین میکند که در حالت دریافت قرار گیرد یا ارسال اطلاعات از برد.
خب باتوجهبه مطالب بالا میرسیم به قسمت اصلی کارمان که کدهای مربوط به برد آردوینو است.
#include <ModbusRTUSlave.h> int sensorPin = A0; //ورودی آنالوگ که اینجا ما ولوم استفاده میکنیم // size of data which will be read and written #define DATA_SIZE 100 //تعداد ریجستر هایی که بسته به نیاز افزایش یا کاهش میدیم // data array which will be read and written u16 _D[DATA_SIZE]; #define OUR_ID_AS_A_SLAVE 1 //آدرس اسلیو #define PIN_CONNECTED_TO_BOTH_DE_AND_RE 3 //پین مربوط به کنترل ارسال و دریافت ModbusRTUSlave rtu(OUR_ID_AS_A_SLAVE, &Serial1, PIN_CONNECTED_TO_BOTH_DE_AND_RE); void setup() { rtu.addWordArea(VIRTUAL_ADDRESS, _D, DATA_SIZE); rtu.begin(9600); } void loop() { // waiting for requests from master // reading and writing _D according to requests from master happens here rtu.process(); _D[10] = analogRead(sensorPin); //از ورودی آنالوگ خوانده و در ریجستر شماره 10 ذخیره میکنیم }
لینکهای دانلود
منبع: سیسوگ