آموزش راه اندازی مدباس با STM32

(دیدگاه کاربر 42)

تومان249,000

آموزش نحوه راه اندازی پروتکل MODBUS RTU بصورت SLAVE بر روی میکروکنترلر STM32 با استفاده از توابع HAL و نرم افزار cubeMX

4 نفر در حال مشاهده این محصول هستند!
توضیحات

در این آموزش نحوه راه اندازی پروتکل مدباس (MODBUS RTU)  بصورت SLAVE بر روی میکروکنترلر STM32 با استفاده از توابع HAL و نرم افزار cubeMX انجام شده است. در این آموزش از پایه پروتکل مدباس را توضیح داده و نحوه ارتباط آن با دیگر دستگاه های روی شبکه و پیاده سازی آن روی میکرو کنترلر STM32 با استفاده از یکی از کاملترین کتابخانه های مدباس برای سیستم های امبدد مینماییم.

این آموزش شامل 88 دقیقه اموزش ویدیویی به همراه مثال و فایل های متنی مورد استفاده در ویدیو میباشد.

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

فانکشن کدهای پشتیبانی شده در این کتابخانه (0X03 | 0X06 | 0X10 | 0X17 | 0X01 | 0X05 | 0X15)

فهرست مطالب ویدیو اول (مقدمات و نحوه کار)

  1. چرا مدباس
  2. نحوه ارتباطات master و slave در مدباس
  3. تفاوت پروتکل و لایه فیزیکی
  4. هر بخش از فریم چه کاری انجام میدهد
  5. تفاوت پروتکل و لایه فیزیکی
  6. توضیح دیاگرام ارتباطی master و بررسی حالت های مختلف
  7. توضیح دیاگرام ارتباطی slave و بررسی حالت های مختلف

  8. تعداد بایت های هر بخش از فریم ها
  9. اهمیت timing در فریم ها و میزان زمان مورد نیاز و محاسبه آن ها
  10. ارتباطات سخت افزاری روی خطوط rs485
  11. ارتباطات سخت افزاری روی خطوط rs422
  12. توضیح انواع فانکشن کدهای پرکاربرد (0X03 | 0X06 | 0X10 | 0X17 | 0X01 | 0X05 | 0X15)
  13. مثالی از فریمینگ یک فانکشن کد
  14. توضیح مختصر در رابطه با کتابخانه مورد استفاده در آموزش
  15. راه اندازی مثال همراه با محصول روی میکرو کنترلر
  16. ارتباط مدباس بین برد (SLAVE) و نرم افزار modbus pool به عنوان master
  17. تست ارتباط در فانکشن کد های (0X03 | 0X06 | 0X10 | 0X17 | 0X01 | 0X05 | 0X15)
  18. توضیح فریم های ارسالی و دریافتی بین نرم افزار و برد
  19. توضیح کاربرد هر قسمت از فریم در فانکشن 0x03 جهت مثال بخش قبل
  20. توضیح کاربرد هر قسمت از فریم در فانکشن 0x17 جهت مثال بخش قبل
  21. تست ارتباط ساده بین برد و نرم افزار HMI دلتا dopsoft در حالت شبیه سازی آنلاین
  22. شماتیک و نکات مهم در راه اندازی rs485
  23. تشریح برخی از قسمت های کتابخانه مدباس

فهرست مطالب ویدیو دوم (نحوه پورت کردن کتابخانه روی میکرو)

  1. دریافت کتابخانه
  2. انتخاب میکرو  و کانفیگ در cubeMX
  3. ساخت پروژه با keil v5
  4. وارد کردن کتابخانه مورد نیاز
  5. پورت کردن تایمر و پورت سریال به کتابخانه
  6. کانفیگ کتابخانه
  7. دانلود کد نوشته شده روی برد
  8. ارتباط با نرم افزار modbus pool به عنوان master

با استفاده از این آموزش میتوانید پروتکل modbus rtu را بصورت slave روی میکرو کنترلر stm32 خودتان پیاده سازی کرده و ارتباطات بین میکروکنترلر و دستگاه های متصل روی این شبکه ارتباط گرفته و تبادل داده انجام دهید.

اطلاعیه مهم : در صورت نیاز به راهنمایی در رابطه با محصول و مطالب عنوان شده لطفا فقط در بخش کامنت ها سوال خود را مطرح کنید به طور معمول بین 2  تا حداکثر 24 ساعت پاسخ شما داده خواهد شد. همکاران ما در قسمت تماس با ما امکان راهنمایی فنی را ندارند لطفا فقط در قسمت کامنت ها سوال خود را مطرح نمایید.

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

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

توضیحات تکمیلی
نام محصول

راه اندازی پروتکل MODBUS RTU بصورت SLAVE

میکرو کنترلر

STM32

نوع آموزش

ویدیویی به همراه مثال

زمان آموزش

88 دقیقه

فانکشن کدهای استفاده شده

0X03

,

0X06

,

0X10

,

0X17

,

0X01

,

0X05

,

0X15

نرم افزارهای مورد استفاده

KEILV5

,

STM32 CUBEMX

,

MODBUS POOL

,

DOPSOFT

42 دیدگاه برای آموزش راه اندازی مدباس با STM32

  1. خریدار محصول hossein.mahdinia (مالک تایید شده)

    سلام
    من از بورد bluepill با میکروی STM32F103C8t6 استفاده می کنم.
    مطالبی که در سایت powerelec.ir داشتید رو خوندم و یک ماژول RS485 با آی سی max485 تهیه کردم.
    فقط توضیح ندادید که چطور ماژول به کامپیوتر متصل میشه.
    اگر یک مبدل سریال به usb بین ماژول RS485 و USB کامپیوتر بگذارم حل میشه؟
    یا راه دیگری رو باید امتحان کنم؟

    ممنون میشم جوابم رو بدید

    • مدیر فروشگاه حمیدرضا محبوب مقدم (مالک تایید شده)

      سلام
      برای ارتباط بین سیستم و لایه فیزیکی rs485 باید از یک مبدل usb به rs485 استفاده کنید تا روی ترمینال سیستم بتونید دیتا تبادل کنید. اما اگر در حال طراحی یک سیستم هستید پیشنهاد بنده که به تجربه بهش رسیدم اینه که هنوز ارتباط 485 را پیاده سازی نکنید و صرفا دیتا را به صورت ttl یعنی از میکرو مستقیما به مبدل usb to ttl بدید و تست رو بگیرید. زمانی که طراحی شما به اتمام رسید بعد لایه فیزیکی 485 را پیاده سازی کنید. چون در صورتی که در اول کار بخواهید لایه فیزیکی رو پیاده کنید اگر به هر دلیلی ارتباطتون مشکل دار باشه زمان و انرژی زیادی میبره تا مشکل را پیدا کنید.

  2. خریدار محصول msb585920 (مالک تایید شده)

    سلام. من تمام مراحل رو مثل فیلم آموزشی رفتم جلو. میکروم stm32f103re هست. هیچ خطایی نداشتم ولی توی نرم افزار modbus poll همش خطای time out error دارم. مشکل از چی میتونه باشه؟ با دو تا مبدل usb to ttl هم تست کردم درست نشد.

    • مدیر فروشگاه حمیدرضا محبوب مقدم

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

  3. حسن

    با سلام یه سوالی که من داشتم میخواستم توسط میکرو stm32f103 با پروتکل rs485 مقادیر انالایزر انرژی ( pm1200 ) رو بخونم و بعد توسط rs232 یا هر پروتکل دیگه ایی این مقادیر رو به نرم افزار هرکولس توی سیستم بفرستم . به نظر تون با این اموزشتون میتونم این کارو کنم یا چنین مثالی توی اموزش هست؟

    • مدیر فروشگاه حمیدرضا محبوب مقدم

      سلام وقت بخیر با استفاده از این آموزش میتوانید به صورت اسلیو روی خط مدباس قرار گرفته و درخواست ها را دریافت کنید و جواب را ارسال نمایید.
      در رابطه با این ماژولی که فرمودید تا جایی که بنده توی یوزر منوال مشاهده کردم این ماژول به صورت اسلیو هست و این کتابخانه هم به صورت اسلیو هست و دو تا اسلیو نمیتونند به هم درخواست اطلاعات بدهند و مستر فقط میتونه درخواست اطلاعات را بده.
      راه حل برای چیزی که نیاز دارید اینه که یا یک دیوایس مستر داشته باشید و اطلاعات را از اون روی سیستم ارسال کنید یا اینکه از همون pc به عنوان مستر استفاده کنید و اطلاعات را بخوانید که توی این آموزش از نرم افزار mbpool و نرم افزار hmi delta برای این موضوع استفاده شده که میتونه راهنمایی تون کنه
      در کل این کتابخانه مناسب برای ساخت مستر نیست اما توی آموزش نحوه کانفیگ مستر توی سیستم برای تست و ارتباط با دستگاه اسلیو آموزش داده شده
      همچنین میتوانید در صورت نیاز به انجام پروژه توسط تیم نوین الکترونیک از سربرگ سایت قسمت “مشاوره و سفارش پروژه” جزییات پروژه را جهت انجام ارسال بفرمایید.

  4. خریدار محصول حمید دبستانی (مالک تایید شده)

    با سلام
    ضمن تشکر از بسته اموزشیتون
    من با رابط سریال به usb برنامه رو بدون هیچ مشکلی راه اندازی کردم
    ولی وقتی از مبدل سریال به rs485 و rs485 to usb استفاده می کنم برنامه modbus poll خطای Timeout error میده
    میخواستم بدونم راه حلی برای رفع این مشکل وجود دارد
    ممنونم

    • مدیر فروشگاه حمیدرضا محبوب مقدم

      سلام مهندس روزتون بخیر. اگر در حالت ttl و rs232 ارتباط دارید مشکل اصلی به بخش سخت افزاری rs485 برمیگرده
      ارتباط 485 چون یک ارتباط نیمه دو طرفه هست از پین های dir یا جهت ارتباط برای ارسال و دریافت استفاده میشه یعنی اگر در حالت 1 باشه به معنی حالت ارسال و اگر در حالت 0 باشه به معنی دریافت
      در برنامه شما هم باید این پین تعریف بشه و در زمان ارسال پین را 1 کنید و بعد از اینکه ارسال انجام شد این پین را برای حالت دریافت 0 کنید.
      پس در نتیجه کاری که باید انجام بشه برای راه اندازی این قسمت تعریف یک پین خروجی برای پین های 2 و 3 ایسی – پیدا کردن فانکشن ارسال روی مدباس و یک کردن خروجی قبل از ارسال – در زمان اتمام خروجی این پین باید 0 شود
      نکته : بعضی از چیپ های 485 به دلیل فیک بودن یا …. در لحظه 1 شدن پین یک تاخیر زمانی دارند تا روی حالت ارسال بروند بنابراین بهتره بعد از 1 کردن پین یک تاخیر زمانی 5 میلی ثانیه ای (یا مقداری بیشتر) تعریف کنید همچنین بعد قبل از 0 کردن نیز بهتره این تاخیر زمانی تعریف بشه
      قبلا یک مقاله در این رابطه در سایت پاور الکترونیک منتشر کردم در صورت نیاز میتونید از این مقاله هم استفاده نمایید با تشکر از اعتماد شما
      https://powerelec.ir/%d8%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%d9%88-%d8%b4%d9%85%d8%a7%d8%aa%db%8c%da%a9-rs485

  5. خریدار محصول حمید دبستانی (مالک تایید شده)

    در ضمن برای تست سیم بندی و سالم بودن ماژول ها در ارتباط rs485
    در نرم افراز Hercules تست شد و هیچ گونه مشکلی ندارم

    • مدیر فروشگاه حمیدرضا محبوب مقدم

      پس احتمالا همان مساله کنترل جهت دیتا که خدمتتان عرض شد مشکل اصلی است

  6. خریدار محصول goldoon2012 (مالک تایید شده)

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

    • مدیر فروشگاه حمیدرضا محبوب مقدم

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

      ابتدا داخل کیوب یک پین به صورت خروجی تعریف میکنید و در حالت 0 یا low قرار میدید
      پین کنترل دیتا برای ارتباط 485 باید در فانکشن ارسال مقدار دهی بشه. به صورت مشخص فانکشن xMBRTUTransmitFSM در فایل mbrtu.c وظیفه این کار را دارد که قبل از خط xMBPortSerialPutByte( ( CHAR )*pucSndBufferCur ); میتونید پین جهت دیتا حالت ارسال را انتخاب کنید و داخل همان فانکشن قبل از xNeedPoll = xMBPortEventPost( EV_FRAME_SENT ); میتونید جهت دیتا را به حالت دریافت تغییر بدید.

  7. خریدار محصول احسان شریفی (مالک تایید شده)

    سلام و درود
    مهندس بابت راهنمایی کاملتون کمال تشکر رو دارم ومشکل بنده حل شد چه در حالت TTL و چه در حالت RS485
    فقط الان یه مشکل کوچولو مونده اونم اینه که وقتی توی برنامه keil روی حالت دیباگ میرم که مقدار بدم به متغییر ها ارتباط Modbus poll قطع میشه و به محض خارج شدن از حالت دیباگ ارتباط Modbus poll وصل میشه…با تشکر از پشتیبانی خوبتون

    • مدیر فروشگاه حمیدرضا محبوب مقدم

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

  8. خریدار محصول asp (مالک تایید شده)

    سلام
    ببخشید چطوری میشه مقادیر رجیسترها را تغیر بدیم مثلا داده ای از یک سنسور بخونیم و بعد داخل یکی از رجیستر بریزیم

    • مدیر فروشگاه حمیدرضا محبوب مقدم

      سلام وقت بخیر. اطلاعات سنسور باید در متغیر بافر usRegHoldingBuf قرار بگیرند(در آموزش در قسمت دیباگ مثال زده شده). به طور مثال برای رجیستر 0 باید خانه 0 این حافظه از مقدار متغیری که میخواهید نمایش دهید پر شود. در مثال شما مقادیر سنسور هستن.
      توجه داشته باشید که این متغیر بافر باید extern شود تا در main بتوانید از ان استفاده نمایید.

  9. خریدار محصول علی شیرخانی (مالک تایید شده)

    سلام من می خوام با میکرو stm32f0 این کار را انجام بدم قدم به قدم مطابق آموزش پیش رفتم ولی در هدر سریال رجیستر DR رو شناسایی نمی کنه می خواستم ببینم مشکل از کجاست؟

    • مدیر فروشگاه حمیدرضا محبوب مقدم

      سلام در سری 0 باید به جای DR از رجیستر RDR استفاده نمایید

  10. خریدار محصول asp (مالک تایید شده)

    سلام و وقت بخیر
    ببخشید میخواستم ببینم پورت کردن این کتابخانه در سیستم عامل ویندوز و لینوکس تفاوت دارد؟

    • مدیر فروشگاه حمیدرضا محبوب مقدم

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

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