اطلاعیه

Collapse
No announcement yet.

کار با پروتکل Modbus در RS422

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کار با پروتکل Modbus در RS422

    با سلام خدمت همه دوستان
    من چند سوال در مورد کار با modbus در rs422 دارم اگه زحمتی نیست منو راهنمایی کنید :
    من چند کنترل کننده دمای صنعتی رو که دارای پورت RS422 هست رو به هم متصل کردم و با استفاده از مبدل rs422 به rs232 اونا رو به کامپیوتر اتصال دادم . داخل تنظیمات کنترلر ها هم پروتکل رو modbus انتخاب کردم . حالا چطور می تونم با ویژوال بیسیک دیتا رو از این کنترلرها بخونم . ادرس کنترل کنندهام هم 1 و 2 و 3 و 4 هستند دیتایی که کنترلر ها ارسال می کنند به چه صورتی هست
    یه سوال دیگم اینکه اگه بخوام دیتا رو به کنترلر ها ارسال کنم باید چکار کنم برای انکه بشه این کنترلرها رو پیکره بندی کرد مثلا تنظیماتش رو تغییر داد و کارای دیگه با ارسال دیتا روش انجام داد باید شرکت سازنده اطلاعاتی در این زمینه داده باشه یا میشه تجربی بدستش اورد.
    صمیمانه از لطفتون ممنونم
    www.ElectronShop.ir

    #2
    پاسخ : کار با پروتکل Modbus در RS422

    شما باید کاتالوگ دستگاه را که در آن آدرس و نوع رجیسترها ذکر شده داشته باشید.
    سپس میآ‌توانید توسط پروتکل modbus آن رجیسترها را بخوانید یا در آنها بنویسید.
    چگونه هوشمندانه بپرسیم

    دیدگاه


      #3
      پاسخ : کار با پروتکل Modbus در RS422

      نوشته اصلی توسط حمید رستمی
      شما باید کاتالوگ دستگاه را که در آن آدرس و نوع رجیسترها ذکر شده داشته باشید.
      سپس میآ‌توانید توسط پروتکل modbus آن رجیسترها را بخوانید یا در آنها بنویسید.
      با تشکر از شما دوست عزیز
      یکی از دوستان می گفت که modbus به روش کلی تو خوندن و ارسال دیتا داره حالا فعلا مد نظر من فقط خوندن از کنترلر ها هست ایشون می گفتند ابتدا ادرس رو ارسال می کنی بعد عمل خوندن و نوشتن رو مشخص میکنی بعد هم یک بیت یا بایت crc که من دقیقا مفهومشون رو نفهمیدم اگه ممکن هست یه نمونه رو که می دونید در این مورد مثال بزنید تا بتونم بیشتر درکش کنم . فکر می کنم چیزی شبیه I2c میکرو کنترلر باشه درسته ؟
      با تشکر فراوان
      www.ElectronShop.ir

      دیدگاه


        #4
        پاسخ : کار با پروتکل Modbus در RS422

        نوشته اصلی توسط POORHASAN
        با تشکر از شما دوست عزیز
        یکی از دوستان می گفت که modbus به روش کلی تو خوندن و ارسال دیتا داره حالا فعلا مد نظر من فقط خوندن از کنترلر ها هست ایشون می گفتند ابتدا ادرس رو ارسال می کنی بعد عمل خوندن و نوشتن رو مشخص میکنی بعد هم یک بیت یا بایت crc که من دقیقا مفهومشون رو نفهمیدم اگه ممکن هست یه نمونه رو که می دونید در این مورد مثال بزنید تا بتونم بیشتر درکش کنم . فکر می کنم چیزی شبیه I2c میکرو کنترلر باشه درسته ؟
        با تشکر فراوان
        بله درسته ،Modbus یک روش کلی برای ارتباط با دستگاه را تعریف می کند.
        ولی ما باید بدانیم فلان دستگاه چه رجیسترهایی را برای خواندن یا نوشتن ارائه کرده است.
        و این در کاتالوک یا دیتاشیت آن دستگاه خاص حتما باید ذکر شود.

        مثلا یک نمونهٔ عملی را برای شما مثال میآ‌زنم
        دستگاهی کمیتهای برق تکفاز را اندازهآ‌گیری می کند و میآ‌تواند آنرا توسط پروتکل modbus ارسال کند.
        در کاتالوگ این دستگاه چنین جدولی وجود دارد ( بر روی تصویر کلیک کنید ) :


        توسط این جدول معلوم میشود که برای خواندن هر یک از کمیتها کدام رجیستر را باید خواند.
        مثلا برای خواندن توان ظاهری مصرف کننده رجیستر با آدرس ‫40031 باید خوانده شود.

        برای خواندن رجیسترها از دستگاه هم باید قطار بایتهایی بصورت زیر به Slave ارسال شود :



        *ابتدا آدرس Slave که در اینجا 0x01 است

        *سپس Function Code. که چون نوع رجیستری که میآ‌خواهیم بخوانیم از نوع Holding Register است (این هم در کاتالوگ ذکر شده است) باید عدد 0x03 بعنوان کد عملکرد ارسال شود.

        *آدرس شروع خواندن فیلد بعدی است. به این فیلد دو بایت اختصاص داده شده که باید ابتدا بایت پر ارزش ، سپس بایت کم ارزش ارسال شود.

        *تعداد رجیسترهایی که باید خوانده شود. در اینجا چون کمیت توان ظاهری دو بایت است، عدد 0x02 را به این فیلد اختصاص میآ‌دهیم. این فیلد هم طولش ۲ بایت هست که ابتدا بایت پرارزش سپس بایت کم ارزش را میفرستیم.

        *فیلد آخر هم کد تشخیص خطای CRC16 است که باید از بایتهای قبلی توسط یک الگوریتم مشخص استخراج شود. این الگوریتم در مستندات modbus بخوبی شرح داده شده است و برای آن نمونه کد هم ارائه شده است.
        مثلا من نمونه کد زیر را برای تولید CRC16 نوشتهآ‌ام :
        (بایتهایی که قراراند ارسال شود در آرایهٔ PDU قرار گرفتهآ‌اند )
        کد PHP:
            unsigned int CRC 0xFFFF;
            const 
        unsigned int POLYNUMERIC 0xA001;
            
            
        // Generate CRC16
            
        for(i=0i<=5i++){
                
        CRC ^= PDU[i];
                for( 
        j=0j<=7j++){
                    if( 
        CRC &amp){
                        
        CRC >>= 1;
                        
        CRC ^= POLYNUMERIC;
                    }else{
                        
        CRC >>= 1;
                    }
                }
            }
            
            
        PDU[6] = CRC &amp0x00FF;                        // CRC Low Byte
            
        PDU[7] = (CRC &amp0xFF00) >&gt8;                // CRC High Byte 


        حالا جوابی که دستگاه به درخواست ما میدهد اینچنین است :


        که فکر کنم عکس گویای مطالب باشد.
        برای اطمینان از بایتهای دریافتی هم میتوان از آنها CRC16 تشکیل داد و با CRC16 دریافت شده مقایسه کرد.

        چگونه هوشمندانه بپرسیم

        دیدگاه


          #5
          پاسخ : کار با پروتکل Modbus در RS422

          با تشکر از دوست خوبم حمید رستمی
          خیلی ممنون اره گشتم و کاتالوگ اون دستگاهها رو پیدا کردم که ادرس رجیسترهاشو دقیق گفته بود
          چند سوال دیگم ازتون دارم اگه زحمتی نیست اونارو هم جواب بدید:
          یکی اینکه توی این دستگاه ها یک نوعش نوشته فقط RTU رو ساپورت می کنه و یکی اسکی رو من چطور می تونم با ویژوال بیسیک بایت ها رو به صورت باینری ارسال کنم (اگه ممکنه دستورشو بگید )
          و سوال دیگم اینکه مثلا ادرس یک رجیستر 40031 هست که به صورت دو بایت باید ارسال بشه این رو باید چه جوری lsb و msb رو جدا کرد و ارسال کرد در دو حالت اسکی و باینری فرقی باهم نمی کنند
          من با کنترلرها رو با rs 422 با هم شبکه کردم و به یک مبدل rs 422 به rs 232 دادم آیا برای ارسال دیتا به کنترلر ها استفاده از پایه های Tx , RX , GND کافیه یا پایه های RTS,CTS هم باید متصل باشند .
          اگر هم میشه کمی در مورد ارسال کد اسکی و باینری از پورت سریال توضیج بدید اصلا اینا چه فرقی باهم می کنند .
          مثلا دستورات زیر با هم معادلند
          mscomm1.output=chr$(255)
          mscomm1.output=hex$(FF)
          www.ElectronShop.ir

          دیدگاه


            #6
            پاسخ : کار با پروتکل Modbus در RS422

            نوشته اصلی توسط POORHASAN
            با تشکر از دوست خوبم حمید رستمی
            خیلی ممنون اره گشتم و کاتالوگ اون دستگاهها رو پیدا کردم که ادرس رجیسترهاشو دقیق گفته بود
            چند سوال دیگم ازتون دارم اگه زحمتی نیست اونارو هم جواب بدید:
            یکی اینکه توی این دستگاه ها یک نوعش نوشته فقط RTU رو ساپورت می کنه و یکی اسکی رو من چطور می تونم با ویژوال بیسیک بایت ها رو به صورت باینری ارسال کنم (اگه ممکنه دستورشو بگید )
            و سوال دیگم اینکه مثلا ادرس یک رجیستر 40031 هست که به صورت دو بایت باید ارسال بشه این رو باید چه جوری lsb و msb رو جدا کرد و ارسال کرد در دو حالت اسکی و باینری فرقی باهم نمی کنند
            من با کنترلرها رو با rs 422 با هم شبکه کردم و به یک مبدل rs 422 به rs 232 دادم آیا برای ارسال دیتا به کنترلر ها استفاده از پایه های Tx , RX , GND کافیه یا پایه های RTS,CTS هم باید متصل باشند .
            اگر هم میشه کمی در مورد ارسال کد اسکی و باینری از پورت سریال توضیج بدید اصلا اینا چه فرقی باهم می کنند .
            مثلا دستورات زیر با هم معادلند
            mscomm1.output=chr$(255)
            mscomm1.output=hex$(FF)
            درود به شما دوست عزیز.
            در مورد visual basic که من نمیآ‌تونم کمکتون کنم، دوستانی که کار کردن باید راهنمایی بفرمایند.

            فقط در مورد جدا کردن LSB و MSB شما میآ‌توانید از این روش که عرض میآ‌کنم استفاده کنید.

            اگر اگر یک متغیر 16 بیتی (مثلا unsigned int در زبان C و در معماری AVR ) را فرض کنید، شما میتوانید با AND کردن این متغیر با عدد هگز 0x00FF ، هشت بیت کم ارزش آنرا جدا کرده و در متغیر دیگری که از طولش ۸ بیت باشد ذخیره کنید.

            برای جدا کردن ۸ بیت پرارزش آن هم میتوانید ابتدا آن متغیر ۱۶ بیت را با 0xFF00 اند کنید و سپس ۸ بیت بسمت راست شیفت دهید (یا بر عدد ۲۵۶ تقسیمش کنید )

            نمونه کد بزبان C :
            کد PHP:
            #include <stdio.h>

            unsigned int addr;
            unsigned char addr_lowaddr_high;

            int mainvoid ){
             
            addr 0x1234;

             
            addr_low = (unsigned char)addr &amp0x00FF;

             
            addr_high = (unsigned char)(addr 256) ;

             
            printf("%| %| %x\n", addraddr_lowaddr_high);

             return 
            0;


            چگونه هوشمندانه بپرسیم

            دیدگاه


              #7
              پاسخ : کار با پروتکل Modbus در RS422

              سلام
              حمید آقا در مورد LSB و MSB که دستت درد نکنه ولی در مورد RTU چیزی نگفتی همچنین در مورد پایه های RTS و CTS
              www.ElectronShop.ir

              دیدگاه


                #8
                پاسخ : کار با پروتکل Modbus در RS422

                نوشته اصلی توسط POORHASAN
                سلام
                حمید آقا در مورد LSB و MSB که دستت درد نکنه ولی در مورد RTU چیزی نگفتی همچنین در مورد پایه های RTS و CTS
                سوالتورن در مورد RTU که به visual basic ربط پیدا میآ‌کرد و دوستان دیگر باید راهنمایی کنند.
                در مورد RTS و CTS هم مطمئن نیستم، احتمالا نیازی بهشون نباشه. (شاید نیاز باشه به هم پل بشوند)
                چگونه هوشمندانه بپرسیم

                دیدگاه


                  #9
                  پاسخ : کار با پروتکل Modbus در RS422

                  شماره رجیستر یا کویل 40031 یعنی با فانکشن 4 باید خونده بشه. ضمنا شماره 30 هم بایستی در فریم modbus به کنترلر ارسال بشه. ایضا طبق فرمایش آقای رستمی rts و cts رو به هم اتصال کوتاه کنین. کار میکنه. ایضا modbus در دو حالت کار میکنه. حالت ascii و rtu. عمده تفاوت ایندو هم یکی در تعداد بیت های هر بایت است که در ascii 7 بیتی و در rtu 8 بیتی ارسال و دریافت میشه. ضمنا یک عدد مثل 175 در rtu به صورت یک بایت ارسال میشه ولی در ascii به صورت دو بایت bcd اولی برای چهار بیت بالا و بعدی برای چهار بیت پایین. یعنی برای 175 اول بایستی کاراکتر A و بعدش کاراکتر F ارسال بشه. راستی در ابتدای حالت acii یک کاراکتر : بایستی ارسال بشه.

                  دیگه اینکه وقتی شماره کویل (دیجیتال) یا رجیستر (عددی) قید میشه مثل 40031 فقط 9999 فرم رو میشه قید کرد. بقیه فرض بر اینه که خود فرد میدونه باهاشون چکار کنه و از چه فانکشنی استفاده کنه. مثلا رجیستر 30031 و 40031 هر دو از لحاظ منطقی یکی هستن ولی اولی با تابع 3 خونده میشه و دومی با تابع 4. (رقم آخر)

                  اطلاعات کامل هم خواستی به سایت زیر سر بزن:

                  http://www.modbus.org/tech.php

                  دیدگاه


                    #10
                    پاسخ : کار با پروتکل Modbus در RS422

                    نوشته اصلی توسط reza_agha
                    شماره رجیستر یا کویل 40031 یعنی با فانکشن 4 باید خونده بشه.
                    جدیدا با دستگاهی کار کردم که برای خواندن رجیسترهایی با آدرس 400xx آن باید از فانکشن کد 3 استفاده میشد.
                    چگونه هوشمندانه بپرسیم

                    دیدگاه


                      #11
                      پاسخ : کار با پروتکل Modbus در RS422

                      با سلام خدمت دوستان
                      اساتید گرامی کمکم کنید که به شدت آبروم در خطره یه حرفی زدم توش موندم
                      ببینید از اول می گم
                      15 عدد کنترلر دما داریم که دمای 0 تا 1200 درجه رو نشون می دن عکسش اینه
                      http://www3.jumo.de/pio/JUMO/en_DE/p...ntrollers.html
                      که همشون خروجی rs485 دارن گرفتم همه data - و Data + رو به هم وصل کردم در نهایت اوردم به یک مبدل rs485 به rs232 و به کامپیوتر وصل کردم این که سخت افزارش

                      توی دیتا شیت کنترلر هانوشته ترانسفر مودش RTU هست و داده ها به فرمت باینری داخل پرانتز هگزا دسیمال هست
                      کسی از دوستان اگه می تونه در مورد برنامش که با ویژوال بیسیک می خام بنویسم کمکم کنه خدا خیرش بده دریغ نکنه
                      توی دیتا شیت از محاسبه زمان درخواست و زمان ارسال و رعایت بازه های زمانی حرف زده اینا چه معنی میده
                      راستش من یه برنامه نوشتم طبق مثالی که زده بود دیتا رو فرستادم ولی اسلیو جوابی نمی داد
                      همه اتصالات رو چک کردم برنامه رو هم با دو کامپیوتر مرتبط به هم تست کردم که داده ها درست ارسال می شد ولی نمی دونم چرا اسلیو هیچ جوابی نمی داد .
                      یکی از مثالهایی که زده بود به این شکل است
                      درخواست مستر
                      07 ادرس کنترلر
                      03 عملیات خوندن
                      1053 ادرس رجیستر
                      0004 تعداد ورد های خوانده شده از کنترلر
                      B0BE بایت های کنترل خطا

                      پاسخ اسلیو
                      07 ادرس
                      03 عمل خوندن
                      08 تعداد بایت های خونده
                      000041C8 مقدار ورد اول (4 بایت اول )
                      00004120 مقدار ورد دوم (4 بایت دوم)
                      5416 بایت های کنترل خطا

                      اعداد بالا به هگزا دسیمال می باشند .
                      بایت های درخواست رو ارسال می کنم ولی دریغ از جواب
                      دیتا شیت کنترلرهای رو می تونید از همون لینکی که بالا دادم در قسمت Download فایل Interface Description(Modbus) دانلود کنید حجمش کمی زیاد ولی به ثواب کار خیرش می ارزه اگه کارم راه بیفته ابروم حفظ بشه یک دنیا دعاتون می کنم استادای عزیزم تورو خدا کمکم کنید یه نگاهی بهش بندازید بگید باید چکار کنم در مورد خود کنترلر در قسمت انتخاب پروتکل دارای دو پروتکل Modbus و mudint هست
                      www.ElectronShop.ir

                      دیدگاه


                        #12
                        پاسخ : کار با پروتکل Modbus در RS422

                        نوشته اصلی توسط POORHASAN
                        با سلام خدمت دوستان
                        اساتید گرامی کمکم کنید که به شدت آبروم در خطره یه حرفی زدم توش موندم
                        ببینید از اول می گم
                        15 عدد کنترلر دما داریم که دمای 0 تا 1200 درجه رو نشون می دن عکسش اینه
                        http://www3.jumo.de/pio/JUMO/en_DE/p...ntrollers.html
                        که همشون خروجی rs485 دارن گرفتم همه data - و Data + رو به هم وصل کردم در نهایت اوردم به یک مبدل rs485 به rs232 و به کامپیوتر وصل کردم این که سخت افزارش

                        توی دیتا شیت کنترلر هانوشته ترانسفر مودش RTU هست و داده ها به فرمت باینری داخل پرانتز هگزا دسیمال هست
                        کسی از دوستان اگه می تونه در مورد برنامش که با ویژوال بیسیک می خام بنویسم کمکم کنه خدا خیرش بده دریغ نکنه
                        توی دیتا شیت از محاسبه زمان درخواست و زمان ارسال و رعایت بازه های زمانی حرف زده اینا چه معنی میده
                        راستش من یه برنامه نوشتم طبق مثالی که زده بود دیتا رو فرستادم ولی اسلیو جوابی نمی داد
                        همه اتصالات رو چک کردم برنامه رو هم با دو کامپیوتر مرتبط به هم تست کردم که داده ها درست ارسال می شد ولی نمی دونم چرا اسلیو هیچ جوابی نمی داد .
                        یکی از مثالهایی که زده بود به این شکل است
                        درخواست مستر
                        07 ادرس کنترلر
                        03 عملیات خوندن
                        1053 ادرس رجیستر
                        0004 تعداد ورد های خوانده شده از کنترلر
                        B0BE بایت های کنترل خطا

                        پاسخ اسلیو
                        07 ادرس
                        03 عمل خوندن
                        08 تعداد بایت های خونده
                        000041C8 مقدار ورد اول (4 بایت اول )
                        00004120 مقدار ورد دوم (4 بایت دوم)
                        5416 بایت های کنترل خطا

                        اعداد بالا به هگزا دسیمال می باشند .
                        بایت های درخواست رو ارسال می کنم ولی دریغ از جواب
                        دیتا شیت کنترلرهای رو می تونید از همون لینکی که بالا دادم در قسمت Download فایل Interface Description(Modbus) دانلود کنید حجمش کمی زیاد ولی به ثواب کار خیرش می ارزه اگه کارم راه بیفته ابروم حفظ بشه یک دنیا دعاتون می کنم استادای عزیزم تورو خدا کمکم کنید یه نگاهی بهش بندازید بگید باید چکار کنم در مورد خود کنترلر در قسمت انتخاب پروتکل دارای دو پروتکل Modbus و mudint هست
                        توصیهآ‌ی کاربردیآ‌ای که برای پیشبرد سریعتر کارتون میآ‌تونم بکنم، استفاده از یک نرمآ‌افزار اسکنر است.
                        با توجه به اینکه کاربر ویندوز هستید، من نرمآ‌افزار Modbus RTU Scanner را به شما پیشنهاد میآ‌کنم.
                        بوسیلهٔ این نرمآ‌افزار بایت به بایت ارسالی و همچنین جواب دستگاه را میآ‌توانید ببینید و این کمک بزرگی به شما خواهد کرد.
                        هر وقت در این نرمآ‌افزار جواب مورد نظر را گرفتید و بیشتر با جزئیات آشنا شدید شروع به نوشتن برنامهٔ خودتان کنید.

                        از اینجا دانلود کنید :
                        http://www.modbus.pl/Scanner.html
                        چگونه هوشمندانه بپرسیم

                        دیدگاه


                          #13
                          پاسخ : کار با پروتکل Modbus در RS422

                          نوشته اصلی توسط حمید رستمی
                          توصیهآ‌ی کاربردیآ‌ای که برای پیشبرد سریعتر کارتون میآ‌تونم بکنم، استفاده از یک نرمآ‌افزار اسکنر است.
                          با توجه به اینکه کاربر ویندوز هستید، من نرمآ‌افزار Modbus RTU Scanner را به شما پیشنهاد میآ‌کنم.
                          بوسیلهٔ این نرمآ‌افزار بایت به بایت ارسالی و همچنین جواب دستگاه را میآ‌توانید ببینید و این کمک بزرگی به شما خواهد کرد.
                          هر وقت در این نرمآ‌افزار جواب مورد نظر را گرفتید و بیشتر با جزئیات آشنا شدید شروع به نوشتن برنامهٔ خودتان کنید.

                          از اینجا دانلود کنید :
                          http://www.modbus.pl/Scanner.html
                          سلام دوست عزیز
                          من نرم افزاری که گفتید رو دانلود کردم ولی چه جوری باید ازش استفاده کنم چه جوری نصبش کنم
                          فکر می کنم این فایلی که شما ادرس دادید سورس باشه درسته ؟
                          www.ElectronShop.ir

                          دیدگاه


                            #14
                            پاسخ : کار با پروتکل Modbus در RS422

                            نوشته اصلی توسط POORHASAN
                            سلام دوست عزیز
                            من نرم افزاری که گفتید رو دانلود کردم ولی چه جوری باید ازش استفاده کنم چه جوری نصبش کنم
                            فکر می کنم این فایلی که شما ادرس دادید سورس باشه درسته ؟
                            شرمنده، به محتویات فایل دقت نکرده بودم.
                            از نرمآ‌افزار Modbus Tester استفاده کنید :
                            http://www.modbus.pl/Modbus_Tester.html
                            چگونه هوشمندانه بپرسیم

                            دیدگاه


                              #15
                              پاسخ : کار با پروتکل Modbus در RS422

                              نوشته اصلی توسط حمید رستمی
                              شرمنده، به محتویات فایل دقت نکرده بودم.
                              از نرمآ‌افزار Modbus Tester استفاده کنید :
                              http://www.modbus.pl/Modbus_Tester.html
                              خیلی ازتون ممنونم با مدباس تستر مشکلم حل شد :applause: :applause: :applause: :applause:
                              www.ElectronShop.ir

                              دیدگاه

                              لطفا صبر کنید...
                              X