در این آموزش نحوه راه اندازی پروتکل مدباس (MODBUS RTU) بصورت SLAVE بر روی میکروکنترلر STM32 با استفاده از توابع HAL و نرم افزار cubeMX انجام شده است. در این آموزش از پایه پروتکل مدباس را توضیح داده و نحوه ارتباط آن با دیگر دستگاه های روی شبکه و پیاده سازی آن روی میکرو کنترلر STM32 با استفاده از یکی از کاملترین کتابخانه های مدباس برای سیستم های امبدد مینماییم.
این آموزش شامل 88 دقیقه اموزش ویدیویی به همراه مثال و فایل های متنی مورد استفاده در ویدیو میباشد.
مثال توضیح داده در آموزش روی میکروکنترلر STM32F217ZG پورت شده است اما در فایل آموزشی یک ویدیو جداگانه از نحوه پورت کردن روی همین میکرو از صفر توضیح داده شده تا بتوانید روی میکرو مورد نظر خود این کتابخانه را پورت نمایید.
فانکشن کدهای پشتیبانی شده در این کتابخانه (0X03 | 0X06 | 0X10 | 0X17 | 0X01 | 0X05 | 0X15)
فهرست مطالب ویدیو اول (مقدمات و نحوه کار)
- چرا مدباس
- نحوه ارتباطات master و slave در مدباس
- تفاوت پروتکل و لایه فیزیکی
- هر بخش از فریم چه کاری انجام میدهد
- تفاوت پروتکل و لایه فیزیکی
- توضیح دیاگرام ارتباطی master و بررسی حالت های مختلف
توضیح دیاگرام ارتباطی slave و بررسی حالت های مختلف
- تعداد بایت های هر بخش از فریم ها
- اهمیت timing در فریم ها و میزان زمان مورد نیاز و محاسبه آن ها
- ارتباطات سخت افزاری روی خطوط rs485
- ارتباطات سخت افزاری روی خطوط rs422
- توضیح انواع فانکشن کدهای پرکاربرد (0X03 | 0X06 | 0X10 | 0X17 | 0X01 | 0X05 | 0X15)
- مثالی از فریمینگ یک فانکشن کد
- توضیح مختصر در رابطه با کتابخانه مورد استفاده در آموزش
- راه اندازی مثال همراه با محصول روی میکرو کنترلر
- ارتباط مدباس بین برد (SLAVE) و نرم افزار modbus pool به عنوان master
- تست ارتباط در فانکشن کد های (0X03 | 0X06 | 0X10 | 0X17 | 0X01 | 0X05 | 0X15)
- توضیح فریم های ارسالی و دریافتی بین نرم افزار و برد
- توضیح کاربرد هر قسمت از فریم در فانکشن 0x03 جهت مثال بخش قبل
- توضیح کاربرد هر قسمت از فریم در فانکشن 0x17 جهت مثال بخش قبل
- تست ارتباط ساده بین برد و نرم افزار HMI دلتا dopsoft در حالت شبیه سازی آنلاین
- شماتیک و نکات مهم در راه اندازی rs485
- تشریح برخی از قسمت های کتابخانه مدباس
فهرست مطالب ویدیو دوم (نحوه پورت کردن کتابخانه روی میکرو)
- دریافت کتابخانه
- انتخاب میکرو و کانفیگ در cubeMX
- ساخت پروژه با keil v5
- وارد کردن کتابخانه مورد نیاز
- پورت کردن تایمر و پورت سریال به کتابخانه
- کانفیگ کتابخانه
- دانلود کد نوشته شده روی برد
- ارتباط با نرم افزار modbus pool به عنوان master
با استفاده از این آموزش میتوانید پروتکل modbus rtu را بصورت slave روی میکرو کنترلر stm32 خودتان پیاده سازی کرده و ارتباطات بین میکروکنترلر و دستگاه های متصل روی این شبکه ارتباط گرفته و تبادل داده انجام دهید.
اطلاعیه مهم : در صورت نیاز به راهنمایی در رابطه با محصول و مطالب عنوان شده لطفا فقط در بخش کامنت ها سوال خود را مطرح کنید به طور معمول بین 2 تا حداکثر 24 ساعت پاسخ شما داده خواهد شد. همکاران ما در قسمت تماس با ما امکان راهنمایی فنی را ندارند لطفا فقط در قسمت کامنت ها سوال خود را مطرح نمایید.
این آموزش به صورت پروژه محور کار شده و ویدیویی که در بالا مشاهده میکنید قسمتی از ویدیو اصلی میباشد و در این آموزش دقیقا همان مطالب بیان شده در فهرست توضیح داده شده است.
هرگونه نشر یا انتقال این آموزش به فردی غیر از خریدار یا انتشار آن در وب سایت های اینترنتی، شبکه های مجازی و … غیرقانونی می باشد و شرکت نوین الکترونیک هیچگونه رضایتی ندارد و در صورت مشاهده از طریق مراجع قانونی پیگیری خواهد شد.
hossein.mahdinia (مالک تایید شده) –
سلام
من از بورد bluepill با میکروی STM32F103C8t6 استفاده می کنم.
مطالبی که در سایت powerelec.ir داشتید رو خوندم و یک ماژول RS485 با آی سی max485 تهیه کردم.
فقط توضیح ندادید که چطور ماژول به کامپیوتر متصل میشه.
اگر یک مبدل سریال به usb بین ماژول RS485 و USB کامپیوتر بگذارم حل میشه؟
یا راه دیگری رو باید امتحان کنم؟
ممنون میشم جوابم رو بدید
حمیدرضا محبوب مقدم (مالک تایید شده) –
سلام
برای ارتباط بین سیستم و لایه فیزیکی rs485 باید از یک مبدل usb به rs485 استفاده کنید تا روی ترمینال سیستم بتونید دیتا تبادل کنید. اما اگر در حال طراحی یک سیستم هستید پیشنهاد بنده که به تجربه بهش رسیدم اینه که هنوز ارتباط 485 را پیاده سازی نکنید و صرفا دیتا را به صورت ttl یعنی از میکرو مستقیما به مبدل usb to ttl بدید و تست رو بگیرید. زمانی که طراحی شما به اتمام رسید بعد لایه فیزیکی 485 را پیاده سازی کنید. چون در صورتی که در اول کار بخواهید لایه فیزیکی رو پیاده کنید اگر به هر دلیلی ارتباطتون مشکل دار باشه زمان و انرژی زیادی میبره تا مشکل را پیدا کنید.
msb585920 (مالک تایید شده) –
سلام. من تمام مراحل رو مثل فیلم آموزشی رفتم جلو. میکروم stm32f103re هست. هیچ خطایی نداشتم ولی توی نرم افزار modbus poll همش خطای time out error دارم. مشکل از چی میتونه باشه؟ با دو تا مبدل usb to ttl هم تست کردم درست نشد.
حمیدرضا محبوب مقدم –
سلام . مشکل از قسمت های مختلفی میتونه باشه از جمله تنظیمات کلاک، پورت سریال، در اختیار نداشتن منابع برای کتابخانه ، اتصالات، پین مپ، مبدل ها، باود ریت، اسلیو ادرس و ….
البته تمام دوستانی که از این آموزش استفاده کرده اند تا به حال به این مشکل برنخوردند احتمالا با بررسی برنامه و مثال آن موفق به حل مشکل خواهید بود
حسن –
با سلام یه سوالی که من داشتم میخواستم توسط میکرو stm32f103 با پروتکل rs485 مقادیر انالایزر انرژی ( pm1200 ) رو بخونم و بعد توسط rs232 یا هر پروتکل دیگه ایی این مقادیر رو به نرم افزار هرکولس توی سیستم بفرستم . به نظر تون با این اموزشتون میتونم این کارو کنم یا چنین مثالی توی اموزش هست؟
مدیر –
سلام وقت بخیر با استفاده از این آموزش میتوانید به صورت اسلیو روی خط مدباس قرار گرفته و درخواست ها را دریافت کنید و جواب را ارسال نمایید.
در رابطه با این ماژولی که فرمودید تا جایی که بنده توی یوزر منوال مشاهده کردم این ماژول به صورت اسلیو هست و این کتابخانه هم به صورت اسلیو هست و دو تا اسلیو نمیتونند به هم درخواست اطلاعات بدهند و مستر فقط میتونه درخواست اطلاعات را بده.
راه حل برای چیزی که نیاز دارید اینه که یا یک دیوایس مستر داشته باشید و اطلاعات را از اون روی سیستم ارسال کنید یا اینکه از همون pc به عنوان مستر استفاده کنید و اطلاعات را بخوانید که توی این آموزش از نرم افزار mbpool و نرم افزار hmi delta برای این موضوع استفاده شده که میتونه راهنمایی تون کنه
در کل این کتابخانه مناسب برای ساخت مستر نیست اما توی آموزش نحوه کانفیگ مستر توی سیستم برای تست و ارتباط با دستگاه اسلیو آموزش داده شده
همچنین میتوانید در صورت نیاز به انجام پروژه توسط تیم نوین الکترونیک از سربرگ سایت قسمت “مشاوره و سفارش پروژه” جزییات پروژه را جهت انجام ارسال بفرمایید.
حمید دبستانی (مالک تایید شده) –
با سلام
ضمن تشکر از بسته اموزشیتون
من با رابط سریال به 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
حمید دبستانی (مالک تایید شده) –
در ضمن برای تست سیم بندی و سالم بودن ماژول ها در ارتباط rs485
در نرم افراز Hercules تست شد و هیچ گونه مشکلی ندارم
مدیر –
پس احتمالا همان مساله کنترل جهت دیتا که خدمتتان عرض شد مشکل اصلی است