در این بخش به آموزش مختصر MODBUS با میکرو STM32 پرداخته شده است.
توجه: جهت تهیه فایل راه اندازی و آموزشی کامل پروتکل مدباس (MODBUS) با STM32 به این لینک مراجعه کنید.!
دوستان عزیزم،
در این بخش سعی می کنیم خیلی ساده و روان پروتکل مدباس رو توضیح بدیم و با استفاده از میکروکنترلر STM32 اون رو راه اندازی کنیم.
به طور کلی مدباس یک پروتکل صنعتی سریال است که در سال ۱۹۷۹ توسط شرکت Modicon برای راه اندازی دستگاه های plc راه اندازی شد. که یک ارتباط امن و آسانی را ایجاد می کرد. به طور کلی:
- به دستگاه هایی که درخواست دریافت اطلاعات را دارند مستر و به دستگاه های ارسال کننده اطلاعات را اسلیو گفته می شود (البته مسترها هم می توانند اطلاعات ارسال کنند.)
- در هر شبکه یک مستر و تا ۲۴۷ اسلیو می تواند وجود داشته باشد که هر اسلیو دارای یک آدرس واحد از ۱ تا ۲۴۷ است.
مد باس چگونه کار می کند؟
سوالی که خیلی ها می پرسند!
در واقع مدباس اطلاعات را از طریق خطور سریال بین دستگاه ها رد و بدل می کند که در ساده ترین حالت یک ارتباط سه سیمه شامل خط های : زمین (GND) ، خط ارسال (Tx) و خط دریافت (Rx) در بستر RS232 و یا شبکه می باشد.
ما کلا سه نوع مدباس معروف داریم:
- RTU
- ASCII
- Etherne(TCP)
ارتباط تحت شبکه یا اترنت امروزی تر و ارتباط RTU بر بستر RS232 فراگیرتر است.
خیلی خیلی ساده بخوایم بگیم روش ارتباط برقرار کردن به اینگونه است که:
دیتا به صورت مجموعه ای از بیت های صفر و یک بین مستر و اسلیو ارسال می شود. در واقع این بیت ها سطح ولتاژی بین -۵ ولت تا +۵ ولت هستند. به این صورت که ولتاژ ۰ تا +۵ ولت بیت صفر است و ولتاژ ۰ تا -۵ ولت بیت یک است. سرعت ارسال اطلاعات هم معمولا ۹۶۰۰ بیت بر ثانیه است.( به شکل زیر توجه کنید)
هگزا دسیمال چیست؟
برای عیب یابی ارسال دیتا در مدباس نیاز نیست شما بیت به بیت بررسی و عیب یابی کنید زیرا کار سختی به نظر می رسد. از اینرو این بیت ها را در دسته های چهار بیتی قرار می دهند و کد هگز آن را بیرون می کشند. (شکل زیر)
کد ASCII چیست؟
اسکی یک استاندارد کد آمریکایی است. هر کد هگز می تواند برای یک اسکی باشد. جدول زیر به خوبی گویای این مورد است.
“دوستان عزیز خیلی نمی خواهیم مطالب را پیچیده کنیم تا همین حد داشته باشیم کارمونو راه میندازه.”
چگونه داده ها در مدباس استاندارد ذخیره می شوند؟
داده ها بر روی دستگاه اسلیو در چهار جدول متفاوت می توانند ذخیره شوند. دو جدول یا ردیف مقادیر گسسته خاموش/روشن هسته ها (Coil) و دور جدول یا ردیف مقادیر عددی رجیسترها. که هر دوتای اینها می توانند فقط قابل خواندن (read-only) یا هم قابل خواندن و هم نوشتن (read-write) باشند.
- هر ردیف یا جدول ۹۹۹۹ مقدار دارد.
- هر هسته یا کانتکت (contact) یک بیت است و دارای آدرسی بین ۰۰۰۰ تا ۲۷۰E می تواند باشد.
- هر رجیستر یک کلمه است (یعنی ۱۶ بیت یا دو بایت) و دارای آدرسی بین ۰۰۰۰ تا ۲۷۰E است.
به طور مثال طبق جدول زیر اولین رجیستر عدد ۴۰۰۰۱ آدرسی برابر ۰۰۰۰ است. و اختلاف بین این دو مقدار آفست نام دارد
آی دی Slave چیست؟
هر اسلیو در شبکه با یک آدرس واحد از ۱ تا ۲۴۷ شناسایی می شود. زمانیکه مستر درخواست داده یا دیتا می کند، اولین بایتی که می فرستد آدرس اسلیو است. با این روش همه اسلیوها می فهمند که آیا مستر با آنها کار دارد یا خیر
کد Function چیست؟
بایت دومی که مستر می فرستد کد تابع یا Function است. این عدد به اسلیو می گوید که کدام جدول باید دسترسی داده شود و آیا خوانده شود و یا روی آن نوشته شود.(جدول زیر کد تابع ها را نشان می دهد)
کد CRC چیست؟
در واقع کد CRC به معنای چک دوره ای افزونگی (خطا) است. که به صورت دوبایت در پایان هر پیام مدباس قرار داده می شود برای تشخیص خطاها. هر بایت در پیام برای محاسبه CRC استفاده می شود. همچنین دستگاه دریافت کننده پیام CRC را محاسبه می کند و آن را مقایسه می کند با CRC فرستاده شده از دستگاه فرستنده. اگر حتی یک بیت در پیام دریافتی غلط باشد، CRC ها اشتباه خواهند بود و خطا رخ خواهد داد.
کد Data چیست؟
این فیلد با توجه به مقدار function متفاوت است. در واقع این قسمت وظایفی را که slave باید انجام دهد را مشخص می کند. مثلا فرض کنید Master می خواهد اطلاعات یک slave با یک آدرس مشخص را بخواند. در این حالت این فیلد تعداد word ها و همچنین محل خانه حافظه مورد نظر را در slave در خود دارد.
قالب ارسال داده در MODBUS چگونه است؟
شکل زیر نشان دهنده فریم ارسال پیام به وسیه مدباس را نشان می دهد که تک تک آنها در بالا بررسی شد.
نحوه اتصال میکروکنترلر به MODBUS چگونه است؟
پروتکل های ارتباطی مختلفی با توجه به نوع دستگاهی که بر بستر MODBUS با دنیای بیرون ارتباط برقرار می کند وجود دارد. که اصلی ترین آنها : شبکه یا اترنت و RS232 هستند البته پروتکل هایی نظیر RS486 و RS422 نیز وجود دارند که کمتر مورد استفاده می شوند.
ما در این آموزش پروتکل RS232 را بررسی میکنیم چرا که اکثر دستگاه های PLC از این پروتکل استفاده می کنند و فراگیرتر است اما لازم است بدانید که ارتباط اترنت امروزی تر می باشد.
پروتکل RS232 چگونه کار می کند؟
همانطور که گفته شد پروتکل RS232 که یک پروتکل سریال است برای برقراری ارتباط نیاز به بک بستر دو سیمه است. یعنی یک سیم برای ارسال اطلاعات (Tx) و یک سیم برای دریافت اطلاعات (Rx).
اگه خوب دقت کنید متوجه میشید که پروتکل سریال (USART) میکروکنترلر هم به همین صورت است و دارای پایه های Rx و Tx است.
اما فرق USART و RS232 در چیست؟
خب جواب سادست : تنها اختلاف سطح ولتاژ ارسال اطلاعات است:
به طوریکه در پروتکل USART سطح ولتاژ دیتا بین ه تا ۵ ولت (برای میکروکنترلرهای AVR و آردوینو) و ۰ تا ۳.۳ ولت (برای میکروکنترلرهای آرم نظیر STM32) می باشد.
اما در پروتکل RS323 سطح ولتاژ ارسال و دریافت اطلاعات از -۱۵ تا +۱۵ ولت می باشد. چرا؟ چون پروتکل RS232 یکی پروتکل صنعتی است و در صنعت برای کاهش نویزپذیری سیستم باید سطح ولتاژ انتقال اطلاعات در یک سطح مناسب و بالا باشد تا با کوتاه و بلند شدن مسیر افت ولتاژ باعث خلل در ارتباطات نشود.
نکته: معمولا از پروتکل rs232 برای ایجاد ارتباط در فواصل کوتاه مثلا زیر ۲۰ متر و بین دو دستگاه استفاده میشه.
حالا یک سوال اساسی:
حالا که سطح ولتاژ USART و RS232 با هم فرق می کنه ما چجوری میکروکنترلر خودمون رو به دستگاه PLC وصل کنیم؟
جواب : باید از مبدل های سخت افزاری استفاده کنیم: مثلا از آی سی های مبدلی مثل : MAX232
که در زیر شکل ماژول آن را می بینید:
پس به صورت کلی یک میکروکنترلر را باید بشکل زیر به یک دستگاه PLC وصل کرد:
درصورتی که در رابطه با میکروکنترلرهای stm32 تازه کار هستید اینجا را کلیک کنید.
سوال اول: در این آموزش چه چیزهایی یاد می گیریم؟
آموزش MODBUS با میکرو STM32
نقد و بررسیها
هنوز بررسیای ثبت نشده است.