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

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

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

 

ویرایش جدید، بروز رسانی 1399/01/19

تعدادی از دوستان از طریق بخش نظرات و دیگر راه‌های ارتباطی اطلاع دادند که کد بارگذاری شده در سایت، در هنگام کامپایل با مشکل مواجه می‌شود.

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

ابتدا فایل زیپ کتابخانه را از انتهای مطلب دانلود کرده از طریق منوی زیر به نرم افزار آردوینو اضافه کنید:

Sketch->include Libary -> Add .ZIP Libary…

 

اضافه کردن کتابخانه زیپ به آردوینو

 

سپس فایل پروژه را نیز دانلود کرده و پس از استخراج آن را در آردوینو باز کنید. اگر برد آردوینو Mega2560 دارید، بهتر است کد را برای این برد کامپایل نمایید.

 

بروز رسانی و رفع خطا توسط: Digi Boy (Sina)

لینک‌های دانلود

 

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

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

ModbusRTUSlave rtu(1,&Serial1); اونم این که عدد ۱ بعد از Serial رو حذف بکنیم .

در ضمن این برنامه بصورت عملی تست  و اجرا هم شده است

امیدوارم که مفید باشه. در صورت نیاز به راهنمایی بیشتر لطفا با آی دی (@omid_ele) بنده در تلگرام در ارتباط باشید

 

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

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

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

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

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

  1. حسن گفت:

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

    1. Digi Boy Digi Boy گفت:

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

      1. حسن گفت:

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

  2. مهدی گفت:

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

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

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

      1. مهدی گفت:

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

        1. Digi Boy Digi Boy گفت:

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

          1. مهدی گفت:

            سلام
            ممنون بابت پیگیری شما
            هنگام کامپایل این خظا ها داده میشه
            ‘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. Digi Boy Digi Boy گفت:

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

  3. میلاد گفت:

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

    1. امین گفت:

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

  4. حمید ترک قشقایی قشقایی گفت:

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

    1. Digi Boy Digi Boy گفت:

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

  5. Omid Z_A Omid Z_A گفت:

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

    1. امین گفت:

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

  6. امین گفت:

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

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

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

      1. امین گفت:

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

      2. امین گفت:

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

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

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

    2. Omid Z_A Omid Z_A گفت:

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

      1. امین گفت:

        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. زئوس Zeus زئوس Zeus گفت:

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

    3. Digi Boy Digi Boy گفت:

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

      1. امین گفت:

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

        1. Omid Z_A Omid Z_A گفت:

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

  7. صفری گفت:

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

    1. Omid Z_A Omid Z_A گفت:

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

    2. Digi Boy Digi Boy گفت:

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

  8. کیان گفت:

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

    1. Omid Z_A Omid Z_A گفت:

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