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

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

تومان249,000

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

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

در این آموزش نحوه راه اندازی پروتکل مدباس (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. Amirmso

    سلام میشه کتابخانه رو برای avr هم پورت کرد؟؟ مثلاً atmega8؟
    اگر که میش راهنمایی کنید.🙏

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

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

  2. زهرا جمالی

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

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

      خیر این امکان وجود ندارد چون بایت ها به صورت تک تک دریافت میشوند (چون وقفه بصورت تک بایتی کانفیگ شده است) و باید هر سری این فانکشن اجرا شود تا تمام مقادیر را به درستی دریافت و پردازش کند

  3. خریدار محصول mohammad.sth (مالک تایید شده)

    سلام روز بخیر
    مشکلی که در مورد کتابخانه modbus وجود دارد اینکه مقادیر بیت ها یا به قول modbus کویل ها رو نمیخونه وگرنه در مورد هلدینگ رجیستر مشکلی وجود ندارد

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

      سلام فاکشن تحلیل holding با coil ها متفاوت هست برای کار با coil ها باید همان فانکشن را دیباگ کنید و نحوه عملکردش را ببینید اما در کل این قسمت coil ها در پروژه هایی که توسط خودمان انجام شده مشکلی به لحاظ عملکردی ندارد.

  4. خریدار محصول mohammad.sth (مالک تایید شده)

    یک توضیح مختصر دیگه هم بدم اینکه رجیستر های مربوط به خوندن رجیستری و بیت ای رو نمیدونم کدوم هاست اما تغییر رجیستری مربوط به بیت ها تاثیری نداره

    usRegCoilsBuf

    usRegHoldingBuf

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

      ارایه مربوط به خواندن رجیستری usRegHoldingBuf هست و مربوط به کویل ها usRegCoilsBuf

  5. خریدار محصول mohammad.sth (مالک تایید شده)

    سلام مجدد ممنون از پاسختون من طبق روندی که ویدئو گفته بود عمل کردم.
    الان مطابق همان روند در خواندن و نوشتن هلدینگ رجیستر ها هیچ مشکلی وجود نداره.
    برای خواندن و نوشتن coil ها توی ویدئو چیزی گفته نشده بود اما قاعدتاً نباید تفاوتی وجود داشته باشیم چون برای خوندن هلدینگ رجیستر ها هم تابع خاصی فراخوانی نمی شد و تنها یک تابع با نام enpoll فراخوانی می شد که به نظر برای سرویس دهی به کل پروتکل مدباس است و نه فقط برای هلدینگ رجیستر ها و مشکلم اینه که مقادیر بیت ها یا به قول modbus کویل ها رو نمیخونه ممنون میشم راهنمایی بفرمایید چطور مقادیر رو بگیرم

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

      سلام خواهش میکنم. بله روند یکی هست و تفاوتی نداره فقط تنها تفاوت در این قسمت هست که در فایل mdtask.c در هنگام دریافت holding فانکشن eMBRegHoldingCB فراخوانی میشود و هنگام دریافت coil فانکشن eMBRegCoilsCB فراخوانی میشود. و مقادیر holding داخل ارایه usRegHoldingBuf و مقادیر coil داخل ارایه usRegCoilsBuf قرار میگرد.
      برای خواندن مقادیر coil باید همان ارایه را بررسی کنید. توجه داشته باشید که طول ارایه متناسب با نیاز شما باشد.
      اگر باز هم مشکلی وجود داشت باید فانکشن کویل ها را دیباگ کنید ببینید هنگام درخواست ها این فانکشن کال میشود یا خیر. اگر کال نشد فانکشن کدهای دیگر را تست کنید.
      اما طی پروژه های انجام شده این قسمت چالشی وجود نداشته و مشابه همین قسمت holding ها بوده

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

    میخواستم بدون توی لایه سخت افزاری پایه RXenable و Txenable در RS485 را به کدام پایه های میکرو باید متصل شود

    • مدیر فروشگاه مدیر

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

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

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

    سلام برای ارتباط سیستم با برد فقط نیاز به ماژول usb to ttl هست؟

    • مدیر فروشگاه مدیر

      سلام وقت بخیر بله. با مبدل های دیگر مثل ۲۳۲ یا ۴۸۵ هم میتوانید تست بگیرید اما برای اطمینان اول از مبدل ttl استفاده کنید

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

    سلام وقت بخیر
    من در حالت ارتباط بصورت usb to ttlدر زمان تست خطای تایم اوت دارم ایراد چی میتونه باشه

    • مدیر فروشگاه مدیر

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

      باید برنامه را دیباگ کنید ببینید این قسمت ها هر کدام به درستی کار میکنند یا خیر.
      در نرم افزار modbus poll پارامترهای سریال رو چک کنید .
      در قدم بعد برای چک کردن ارتباط بین میکرو و سیستم داخل نرم افزار modbus poll پنجره communication traffic رو باز کنید و ببینید که دیتایی منتقل میشه یا خیر .
      همچنین طبق آموزش داده شده میتونید این دیتا ها رو تحلیل کنید

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

    سلام من در هنگام کمپایل برنامه خطای DR در فایل portserial.c دارم.در ضمن من از میکرو stm32f746zgt استفاده میکنم

    • مدیر فروشگاه مدیر

      رجیستر DR برای خواندن دیتا هست که دراکثر سری های stm32 با همین نام هستن. اما توی این سری از stm32 این رجیستر وجود نداره و باید با RDR تغییرش بدید.

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

    سلام . خیلی ممنون از آموزش خوبتون .
    با stm32f103 و hmi دلتا ، با پروتکل rs485 ، ارتباط برقرار کردم . رجیستر ها کاملا درست کار میکنه و مشکلی نداره . اما وقتی ارتباط کویل هارو در قسمت دیباگ انجام میدم ، کویل ها فقط از سمت hmi قابل تغییر هستند . یعنی وقتی دکمه ی روی hmi را میزنم ، مقدار کویل در بخش دیباگ تغییر میکنه . اما وقتی از قسمت دیباگ ، در بافر کویل تغییر ایجاد میکنم ، روی hmi تغییری حاصل نمیشه . همچنین در hmi میگه نمیتونم عملیات read رو انجام بدم .
    یعنی میکرو نمیتونه کویل را write کند .
    ممنون میشم راهنمایی کنید .

    • مدیر فروشگاه مدیر

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

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