توصیه شده, آردوینو, پروژه, مقاله های سیسوگ

ارتباط آردوینو با HMI (نمایشگرهای صنعتی)

ارتباط آردوینو با HMI

در این مقاله سعی می‌کنیم با استفاده از برد آردوینو و کتابخانه Modbus که قبلا در این مورد مقاله‌ای انتشار شده بود، عملا ارتباط با یک نمایشگر صنعتی که امروزه به نام (Human Machine Interface (HMI از آن یاد می‌شود یک نمونه کد و یکی از کاربردهای ارتباط مدباس را آموزش بدیم که طرفدارهای خاص خودش رو داره.

HMI یا همان نمایشگر های صنعتی امروزه در اکثر دستگاههای بزرگ و کوچک استفاده می‌شود، که انواع مختلفی از برندها و امکانات متنوع در دنیا هستند و بیشتر پروتکل‌های ارتباطی عمومی و پیشرفته در آن لحاظ شده است که می‌توان از Rs232 – Modbus – Ethernet – Canbus -Canopen و … در آن نام برد که امروزه تبدیل به وصله جدانشدنی از صنعت و الکترونیک شده است.

هر HMI تنظیمات خاص و نرم افزار خاص خودش را دارد که در این مقاله ما با برند دلتا آموزش خواهیم داد. hmi نمایشگرهای صنعتی

همان طور که گفته شد هر برند از HMI‌ها دارای نرم‌افزار مخصوص خودشان می‌باشند که در این مبحث قرار هست با HMI دلتا که نسبتا محبوبیت زیادی از لحاظ قیمت و کیفیت و فراوانی دارد را کار بکنیم. نرم‌افزار مخصوص این برند DOPSoft است که معولا همراه HMI فروشنده در اختیار کاربر قرار میده.

نرم‌افزار DOPSoft

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

نرم‌افزار DOPSoft

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

 

نرم‌افزار DOPSoft

1-نام پورت (LINK NAME) که ما پورت 2 را انتخاب می‌کنیم.

2-نوع ارتباط کنترلر (CONTROLER) مود باس رو انتخاب می‌کنیم.

3-اینترفیس و تنظیمات مربوط به نرخ ارسال و دریافت که 485-9600-8-N-1 است رو انتخاب کردیم.

بعد از تنظیمات فوق برنامه آماده طراحی هست که در این مبحث به علت طولانی نشدن موضوع فقط یک افزونه به آن اضافه میکنیم که قراره مقدار یکی از ورودی‌های آنالوگ در برد آردوینو را برایمان نمایش بدهد.

نرم‌افزار DOPSoft ارتباط آردوینو با hmi

 

همان طور که در تصویر می‌بینید ما یک نمایشگر عقربه‌ای برای نشان دادن مقدار ورودی آنالوگ برد آردوینو انتخاب کردیم و آدرس ریجستر 10 را بهش دادیم یعنی هر تغییری در مقدار این آدرس از حافظه آردوینو اتفاق بیفتد نمایشگر همان مقدار را برایمان به صورت عقربه نمایش می‌دهد. مقدار آدرس اسلیو را نیز یک دادیم. (در این آموزش مستر نمایشگر هست و اسلیو برد آردوینو که آدرس یک رو براش اختصاص دادیم که در قسمت نرم‌افزار برد آردوینو به آن اشاره خواهیم کرد)

خب تا اینجا ما تنظیمات HMI را انجام دادیم و برنامه مربوطه رو روی HMI دانلود می‌کنیم و کار با نمایشگر تا اینجا به پایان می‌رسد.

برای ادامه کار ما علاوه بر برد آردوینو نیاز به بستر فیزیکی RS485 داریم که خوشبختانه هم میشه ساخت و هم از ماژول‌های آماده استفاده کرد چون بردهای آردوینو فقط بستر RS232 هست که از طریق ماژول مذکور این بستر را مهیا می‌کنیم. در این پروژه برای سهولت کار ما از ماژول آماده استفاده می‌کنیم. انواع مختلف این ماژول‌ها در بازار موجود و بسته به سلیقه و نیازمان انتخاب می‌کنیم.

مبدل ttl به سریال rs482

ماژول فوق بستر مورد نیاز ما را در این پروژه فراهم می‌کند. پین‌های این ماژول عبارتند از:

Vcc و gnd که تغذیه ماژول می‌باشند 5Vdc

A-B خروجی‌های RS485

Di به پین Tx برد آردوینو

Ro به پین Rx برد آردوینو

De-Re پین کنترل ارسال دریافت است که داخل برنامه به آن اشاره خواهیم کرد. این پین وضعیت ماژول را تعیین می‌کند که در حالت دریافت قرار گیرد یا ارسال اطلاعات از برد.

خب با توجه به مطالب بالا می‌رسیم به قسمت اصلی کارمان که کدهای مربوط به برد آردوینو است.

 

چند نکته در مورد کد

اول اینکه احتمالا شما هم مثل ما (البته در ابتدای کارمون) دنبال کتابخونه های زیادی برای مدباس در آردوینو گشتید و اونها رو نصب کردید ، اگر هنگام کامپایل به ارور میخورید ممکن هست که آردوینو کتابخونه های قبلی رو با کتابخونه این پروژه اشتباه بگیره که باعث ارور در کامپایل میشه (چیزی که برای ما و چندتا از کاربرهای دیگه اتفاق افتاد) برای همین کتابخونه های مدباس قبلی رو از این مسیر پاک کنید که به مشکل نخورید

نکته بعدی هم اینکه در صورتی که از آردوینویی استفاده میکنید که بیش از 1 سریال داره میتونید &Serial رو به مثلا &Serial1 تغییر بدید تا بتونید از سریال اصلی آردوینوتون هم استفاده کنید

 

 

 

 

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

42 دیدگاه در “ارتباط آردوینو با HMI (نمایشگرهای صنعتی)

  1. Avatar for علی قاسمیان علی قاسمیان گفت:

    من سعی کردم روی esp8266 اجراش کنم انجام شد ، اما این پیام هم داد…
    WARNING: library ModbusRTU_Slave_RS485 claims to run on avr architecture(s) and may be incompatible with your current board which runs on esp8266 architecture(s).
    فکر میکنید بدرستی اجرا میشه یا نه؟

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام دوست عزیز – فکر میکنم این کتابخانه برای بستر avr نوشته شده است و استفاده از آن برای پلتفرم های دیگر نیازمند تغییر در آن است

  2. Avatar for بهمن بهمن گفت:

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

  3. Avatar for amin msi2 amin msi2 گفت:

    با عرض سلام و خسته نباشید
    لطفا یه مثال در ارتباط مدباس دیتا از hmi به میکرو ارسال بشه رو هم بزارید باتشکر

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام دوست عزیز
      سعی میکنیم در لیست تولید محتوا قرارش بدیدم
      متشکرم از پیگیری شما 🙂

  4. Avatar for قاسم اردمه قاسم اردمه گفت:

    سلام
    امکان داره بجای اردوینو ار میکروکنترلر دیگه مثل خانواده picf18 استفاده کنیم ؟

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام دوست عزیز بله امکانش هست

  5. Avatar for اشکان عوض پور اشکان عوض پور گفت:

    با سلام، سپاس فراوان از مطلب خوبتون ، بنده پیگیر خطاهای پیش اومده بودم که خداروشکر رفع شد. که با اجازتون عرض میکنم: فایل LinkedList.h در utility نیاز به آپدیت داره ، اتصال A مبدل max485 به D+ و B به D- باید وصل بشه، و در تصویر تنظیمات نرم افزار DOPSOFT در تنظیمات meter در آدرس رجیستر به جای عدد 10 حرف A (در هگزا دسیمال) قرار بگیره. و همچنین من هم مانند شما با تنظیمات پورت 2 HMIجواب گرفتم در پورت 1 RS485 برای بنده جواب نداد. باز هم سپاس بی کران از شما و همکارانتون

    1. Avatar for Omid Omid گفت:

      ممنون از به اشتراک گذاری تجربیاتتون

  6. Avatar for alireza alireza گفت:

    سلام والا کامپایل نمیشه اررور داره از این خط ایراد rtu.addWordArea(VIRTUAL_ADDRESS, _D, DATA_SIZE);
    وخط قبلی پورت سریال چی کنم

    1. Avatar for Omid Omid گفت:

      سلام
      به DATA_SIZE یه مقدار اولیه بدید قبل این خط مثلا ۱۰
      بجای VIRTUAL_ADDRES هم عدد صفر رو بزارید اگه از آردوینو UNO استفاده می‌کنید بجای Serial1& اون عدد یک رو حذف بکنید و Serial& بزارید

  7. Avatar for حسن حسن گفت:

    با سلام
    همه سیم هارو وصل کردم برنامه هم کامپایل میشه ولی ارتباط نمیگیره با hmi
    مشکل چی میتونه باشه؟

    1. Avatar photo Digi Boy گفت:

      درود بر شما.
      شماره پین ها احتمالا در برنامه جدید تغییر کرده است که باید آن ها را اصلاح کنید و یا ترتیب سیم ها را اصلاح کنید.

      1. Avatar for حسن حسن گفت:

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

  8. Avatar for مهدی مهدی گفت:

    سلام ممنون از مطالب خوبی که به اشتراک میذارید این کد برنامه کامپایل نمیشه متاسفانه ممنون میشم اگر بررسی کنید

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      فکر میکنم کد توسط دوستمون اصلاح شد و اخر مطلب لینک اصلاح شده قرار گرفت – آیا همچنان کامپایل نمیشه ؟

      1. Avatar for مهدی مهدی گفت:

        نخیر متاسفانه کامپایل نمیشه

        1. Avatar photo Digi Boy گفت:

          درود بر شما.
          لطفا متن خطا رو بفرستید.
          بهتره برای بردی که گفته شد یا حداقل بردی که دو تا سریال داشته باشه کامپایل کنید. اگر آردوینو شما فقط یک سریال سخت افزاری داره، Serial1 رو با یک سریال مجازی روی یکی از پایه ها عوض کنید.

          1. Avatar for مهدی مهدی گفت:

            سلام
            ممنون بابت پیگیری شما
            هنگام کامپایل این خظا ها داده میشه
            ‘u16’ does not name a type
            ‘u8’ does not name a type
            ‘_D’ was not declared in this scope
            ‘_M’ was not declared in this scope

          2. Avatar photo Digi Boy گفت:

            درود بر شما.
            به جای u8
            uint8_t
            و
            بجای
            u16
            uint16_t
            قرار بدید ببینید مشکلتون حل نمیشه؟

  9. Avatar for میلاد میلاد گفت:

    سلام خدمت شما
    ببخشید وقتی برنامه رو کامپایل میکنم این خطا رو میده
    ‘serial1’ was not declared in this scope
    لطفا راهنمایی کنید

    1. Avatar for امین امین گفت:

      این برنامه اصلا کار نمیکنه اصلا مربط به عکس های بالا هم نیست

  10. Avatar for قشقایی قشقایی گفت:

    سلام متن برنامه رو که دادین کامپایل که میکنم ارور زیر رو میده
    ‘Serial1’ was not declared in this scope
    ModbusRTUSlave rtu(OUR_ID_AS_A_SLAVE, &Serial1, PIN_CONNECTED_TO_BOTH_DE_AND_RE);
    با تشکر قشقایی

    1. Avatar photo Digi Boy گفت:

      سلام.
      احتمالا از آردوینو ای استفاده میکنید که تنها یک پورت سریال دارد، به همین خاطر Serial1 تعریف نشده است. برنامه را برای آردوینو دیگری مثل مگا2560 کامپایل کنید.
      با تشکر.

  11. Avatar for Omid Omid گفت:

    لطفا نوع خطا را بفرستید

    1. Avatar for امین امین گفت:

      ارور کتابخانه میزنه هر دفعه یه اروری میدهد . چطور میتونم با شما ارتباط داشته باشم که عکس هاشو براتون بفرستم

  12. Avatar for امین امین گفت:

    سلام من پروژه تون رو کامپایل میکنم ارور میدهد آیا از درست بودن پروژه مطمعن هستید ؟ راهی هست که من بتوانم با شما ارتباط داشته باشم

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      فکر نمیکنم پروژه مشکل داشته باشه !!!
      چه خطایی دریافت میکنید ؟

      1. Avatar for امین امین گفت:

        اصلا کامپایل نمیشه اخطار میگیره یه تست بکنید

      2. Avatar for امین امین گفت:

        میشه شما کامپایلش کنید

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

          بررسی میکنیم حتما مساله رو
          ممنون برای پیگیریتون

    2. Avatar for Omid Omid گفت:

      پروژه کامل تست شده دوست عزیز لطفا نوع خطایی که دارید را بفرمائید تا بتونم کمکتان بکنم.

      1. Avatar for امین امین گفت:

        Arduino: 1.8.9 (Windows 10), Board: “Arduino Uno”

        C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\Amin\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\Amin\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\Amin\Documents\Arduino\libraries -fqbn=arduino:avr:uno -ide-version=10809 -build-path C:\Users\Amin\AppData\Local\Temp\arduino_build_942531 -warnings=none -build-cache C:\Users\Amin\AppData\Local\Temp\arduino_cache_219790 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avr-gcc.path=C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.arduinoOTA.path=C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -verbose C:\Users\Amin\Desktop\New folder\SimpleModbus485\SimpleModbus485.ino
        C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\Amin\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\Amin\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\Amin\Documents\Arduino\libraries -fqbn=arduino:avr:uno -ide-version=10809 -build-path C:\Users\Amin\AppData\Local\Temp\arduino_build_942531 -warnings=none -build-cache C:\Users\Amin\AppData\Local\Temp\arduino_cache_219790 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avr-gcc.path=C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.arduinoOTA.path=C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -verbose C:\Users\Amin\Desktop\New folder\SimpleModbus485\SimpleModbus485.ino
        Using board ‘uno’ from platform in folder: C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.2
        Using core ‘arduino’ from platform in folder: C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.2
        Detecting libraries used…
        “C:\\Users\\Amin\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR “-IC:\\Users\\Amin\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.2\\cores\\arduino” “-IC:\\Users\\Amin\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.2\\variants\\standard” “C:\\Users\\Amin\\AppData\\Local\\Temp\\arduino_build_942531\\sketch\\SimpleModbus485.ino.cpp” -o nul
        “C:\\Users\\Amin\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10809 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR “-IC:\\Users\\Amin\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.2\\cores\\arduino” “-IC:\\Users\\Amin\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.2\\variants\\standard” “-IC:\\Users\\Amin\\Documents\\Arduino\\libraries\\ModbusRTUSlave” “C:\\Users\\Amin\\AppData\\Local\\Temp\\arduino_build_942531\\sketch\\SimpleModbus485.ino.cpp” -o nul
        Multiple libraries were found for “ModbusRTUSlave.h”
        Used: C:\Users\Amin\Documents\Arduino\libraries\ModbusRTUSlave
        Not used: C:\Program Files (x86)\Arduino\libraries\ModbusRTUSlave
        In file included from C:\Users\Amin\Desktop\New folder\SimpleModbus485\SimpleModbus485.ino:1:0:

        C:\Users\Amin\Documents\Arduino\libraries\ModbusRTUSlave/ModbusRTUSlave.h:5:10: fatal error: utility/LinkedList.h: No such file or directory

        #include “utility/LinkedList.h”

        ^~~~~~~~~~~~~~~~~~~~~~

        compilation terminated.

        Using library ModbusRTUSlave in folder: C:\Users\Amin\Documents\Arduino\libraries\ModbusRTUSlave (legacy)
        exit status 1
        Error compiling for board Arduino Uno.

        هر دفعه یک خطایی میده . میتونم یه راه ارتباطی با شما داشته باشم مصل تلگرام که عکس براتون بفرستم

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

          اجازه بدید بررسی میکنیم .

    3. Avatar photo Digi Boy گفت:

      درود بر شما.
      دوست عزیز کد مربوط به راه اندازی مدباس اصلاح گردید.

      1. Avatar for امین امین گفت:

        اقا این کلا یه برنامه دیگس اصلا ربطی به اون بالایی نداره قبلا هم من دیده بودمش من تست هم کردم اصلا وصل نشد به hmi

        1. Avatar for Omid Omid گفت:

          سلام وقت بخیر.
          ضمن تشکر از دقت نظر شما .
          هردو برنامه درست بودن تنها نکته ای که هست در استفاده از نوع برد هست .که آدرس سریال پورت رو باید درست بدهیدو در ضمن در برنامه جدید آدرس دهی بیتی هم اضافه شده

  13. Avatar for صفری صفری گفت:

    عرض سلام و خسته نباشید و تشکر از بابت فایل نحوه ارتباط آردینو و HMI دلتا. در فایل SimpleModbus485.ino که مربوط به برنامه آردینو جهت ارتباط بین اچ ام آی دلتا میباشد شما از کتابخانه ای به نام include ModbusRTUSlave.h استفاده کردید. چگونه و از کدام سایت می توانم این تابع را در کتابخانه آردینو Add کنم ونیز توابع و به دستورات موجود در کتابخانه فوق دسترسی داشته باشم؟ لطفا مرا راهنمایی کنید.در اینترنت جستجو کردم ولی نتیجه ای نگرفتم.

    1. Avatar for Omid Omid گفت:

      سلام ممنون دوست عزیز . فایل مورد نظر رو بزودی اضافه میکنم

    2. Avatar photo Digi Boy گفت:

      درود بر شما.
      دوست عزیز کد مربوط به راه اندازی مدباس اصلاح گردید.

  14. Avatar for کیان کیان گفت:

    سلام وخدا قوت امید جان عالی بود اگر یک پروژه بزرگتر که از plc وhmi استفاده میشه
    رو با اردینو وhmi اموزش بدید عالی میشه. تشکر از اموزشتون

    1. Avatar for Omid Omid گفت:

      سلام ممنون از توجه شما .
      ایده خوبی هست در اولین فرصت نزدیک یک پروژه تقریبا تکمیل و همراه با plc و hmi و Arduino آماده میکنیم .

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *