
درود بر همه عزیزان
چندی پیش در ساخت دستگاهی همکاری میکردم که در اون نیاز به کنترل سرعت موتوری سه فاز بود
به همین دلیل در آن از یک اینورتر سه فاز استفاده شده بود
به روشهای مختلفی میشد در این اینورتر فرکانس خروجی را ست کرد
در نسخه اولیه این دستگاه از چهار عدد رله برای فرمان دادن به اینورتر استفاده شد
ولی در نسخه جدید چون خواسته شده بود که موتور با هر فرکانسی که کاربر تنظیم کرده کار کند ، نمیشد از روش رله استفاده کرد
این شد که مجبور شدم با پروتکل modbus با این اینورتر ارتباط برقرار کنم
من در ابتدا هیچ شناختی از این پروتکل نداشتم ولی با چند ساعت جستجو در نت به راهنماهای خوبی رسیدم و بالاخره موفق به نوشتن کتابخانه ای برای ارتباط دادن میکرو به اینورتر شدم.
کتابخونه ای رو که نوشتم اینجا میزارم تا دوستان ازش استفاده کنن .
متاسفانه چون اون دستگاه باید سری حاضر میشد من نتونستم زیاد روی کتابخونم کار کنم و اونطوری که میخوام درش بیارم
الان هم slave ی برای تست و گسترش کتابخونم ندارم
ولی خیلی خوشحال میشم که دوستان اگر اشکالی درش هست بگن یا خودشون برطرف کنن
خب ، قبل از توضیح دادن خود این لایبرری اجازه بدید مقدمه ای از modbus بگم
شاید بعضی از دوستان مثل خود من آشنایی زیادی با این پروتکل نداشته باشن
اگر با modbus آشنایی دارید میتونید این قسمت رو رد کنید
modbus چیست ؟
modbus پروتکلی برای ارتباط سریال است که در ابتدا در PLC ها ازش استفاده میشد
ولی چندی نگذشت که این پروتکل جای خودش رو بیشتر در صنعت باز کرد و امروزه بیشتر ابزارآلات صنعتی از این پروتکل برای ارتباط با دنیای خارج استفاده میکنند ( مثل همون اینورتری که در اول صحبتش بود )
دلایل اصلی استفاده گسترده از این پروتکل اینها هستند که :
۱ - حق تالیف یا اختراع آن بصورت آزاد است
۲ - سادگی آن و در نتیجه ساخت شبکه هایی با امکان گسترش آسان
۳ - حمل بیتهای خام و در نتیجه تولید سربار کمتر در شبکه
همچنین modbus این امکان را میدهد که در یک شبکه مشابه دستگاههای مختلفی کار کنند. مثلا یکی برای اندازه گیری دما و رطوبت ، یکی برای کنترل موتور و ارتباط داشتن آنها با یک کامپیوتر
ورژنهای مختلفی از این پروتکل وجود دارد. برای پورت سریال و اترنت
البته بیشتر دستگاهها در شبکه های سریالی که لایه فیزیکی آنها EIA-485 هست از این پروتکل بهره میبرند
برای ارتباطات سریال نیز دو نوع modbus وجود داره. یکی RTU و دیگری ASCII
در نوع ASCII فرامین/اطلاعات بصورت اسکی هگز رد و بدل میشود و Human Readable تر هست و برای تشخیص خطا هم از longitudinal redundancy check بهره میبرد
در نوع RUT فرامین/اطلاعات بصورت عدد (باینری) جابجا میشود و برای خطا یابی هم از cyclic redundancy check استفاده شده
دستگاهی که میگه پروتکل modbus رو ساپورت میکنم ، باید از RTU پشتیبانی کنه ولی ASCII الزامی نیست
تصویری از یک شبکه modbus نمونه :

همان طور که در شکل بالا میبینید ، در پروتکل modbus یک Master قرار میگیرد و تعداد زیادی Slave
کتابخانه ای که من نوشتم برای استفاده از میکروکنترلر بعنوان Master هست
من چون انشام خوب نیست دیگه ادامه نمیدم
ولی اگر سوالی بود ، خوشحال میشم راهنمایی کنم اگر بلد باشم
از زبان ویکی پدیا :
http://en.wikipedia.org/wiki/Modbus
جزییات پروتکل modbus ( بطور کلی ) :
http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf
جزییات استفاده از modbus در شبکه های سریال :
http://www.modbus.org/docs/Modbus_over_serial_line_V1_02.pdf
توضیح کتابخانه
خب ، بعد از اون مقدمه چینی خسته کننده ، میرسیم به اصل مطلب
باید عرض کنم که متاسفانه توابع هیچ خروجی ای از موفقیت بودن یا نبودن ارتباط ندارن ( اظافه کردن این امکان مشکل نیست )
فقط میکرو ارسال داره و چیزی دریافت نمیکنه :-(
متاسفانه بدلیل کمبود وقت ، خیلی مختصر نوشته شده
تابعی جهت راه اندازی اولیه
کد PHP:
void modbusInit(unsigned int baudrate);
تابعی جهت نوشتن در رجیستر دستگاه
کد PHP:
int modbus_WriteSingleRegister(unsigned int slaveAddr, unsigned int registerAddr, unsigned int value);
تنظیمات سخت افزاری برای میکروکنترلر هم در فایل هیدر کتابخانه قابل تنظیم هست
اگر از چیپ MAX485 برای راه اندازی خط RS485 استفاده میکنید ، پایه های ۲ و ۳ را به هم متصل کنید و به پایه ای که در فایل هیدر بنام MODBUS_DIRECTION معرفی کردید متصل کنید ( این برای ارتباطات HalfDuplex هست )
و چون فعلا فقط ارسال داریم ، نیازی به این پایه و همچنین استفاده از RXD میکرو نیست
ببخشید دیگه ، وقت کم بود.
دانلود
سورس کتابخانه برای کامپایلر avr-gcc
دیدگاه