اطلاعیه

Collapse
No announcement yet.

مدباس RT-U

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

    #16
    پاسخ : مدباس RT-U

    نوشته اصلی توسط hamidrezam2
    ممنون سعید جان
    تا جایی که من فهمیدم PDU بافر اطلاعات خروجی هستش که هشت بایتیه و عدد 5 توی حلقه اول یعنی تمام کدها به جز دوتا بایت اخر که مربوط به crc هستند
    عدد 7 حلقه دوم هم که فکر کنم چون اطلاعاتمون 8 بایتی هست قرارش دادیم درسته؟
    حلا اگه دیتا هایی که قراره بفرستیم بیشتر شد یعنی به عبارتی به جای یک متغیر دو یا بیشتر خواستیم بفرستیم باید چیکار کنیم؟
    من از همین برنامه برای چک کردن درستیه اطلاعات ورودیم استفاده کردم و درست جواب داد فقط نمیدونم چرا برای دیتا های خروجی که قراره به مستر فرستاده بشه درست جواب نمیده
    بله PDU و عدد 5 و 7 در برنامه + مابقی توضیحات دقیقا همونی هست که فرمودید.

    اگر تعداد دیتا بیشتر بشه ، باید بجای عدد 5 یه متغیر تعریف بشه و بسته به دیتاها مقدار دهی بشه.

    احتمالا توی طول فریم پاسخ مشکلی وجود داره ، برای CRC در هر حالت باید دو بایت اختصاص بدید / برای دیتا ها و ... باید بایت به بایت ارسال بشه .

    کد:
    	
    	PDU[0] = slaveAddr;							// آدرس اسلیو
    	PDU[1] = 0x03;								// فانکشن
       	
     	PDU[2] = 2;		// تعداد بایت ها (دو برابر دیتا - یعنی برای هر دیتای درخاستی دوبایت داریم)
    		
      PDU[3] = (value & 0xFF00) >> 8;				// مقدار 8 بیت بالای دیتا
    	PDU[4] = value & 0x00FF;					// مقدار 8 بیت پایین دیتا
    ببینید ما یه طول دیتا داریم که توسط مستر به اسلیو اعلام میشه ، حالا توی پاسخ ما تعداد بایت داریم که میشه دو برابر دیتای درخواستی.
    //--------------------------------------------------------------------------------------
    احتمالا اینجا عدد را تغییر بدی درست میشه. اول با یه متغیر بنویسش و بعد که اوکی شد تعدادشو زیاد کن.
    Reveng will surely come... Your hard time are ahead
    // - - - - - - - - - -
    برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
    // - - - - - - - - - -
    اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
    // - - - - - - - - - -

    دیدگاه


      #17
      پاسخ : مدباس RT-U

      نوشته اصلی توسط سعید خیری
      بله PDU و عدد 5 و 7 در برنامه + مابقی توضیحات دقیقا همونی هست که فرمودید.

      اگر تعداد دیتا بیشتر بشه ، باید بجای عدد 5 یه متغیر تعریف بشه و بسته به دیتاها مقدار دهی بشه.

      احتمالا توی طول فریم پاسخ مشکلی وجود داره ، برای CRC در هر حالت باید دو بایت اختصاص بدید / برای دیتا ها و ... باید بایت به بایت ارسال بشه .

      کد:
      	
      	PDU[0] = slaveAddr;							// آدرس اسلیو
      	PDU[1] = 0x03;								// فانکشن
         	
       	PDU[2] = 2;		// تعداد بایت ها (دو برابر دیتا - یعنی برای هر دیتای درخاستی دوبایت داریم)
      		
        PDU[3] = (value & 0xFF00) >> 8;				// مقدار 8 بیت بالای دیتا
      	PDU[4] = value & 0x00FF;					// مقدار 8 بیت پایین دیتا
      ببینید ما یه طول دیتا داریم که توسط مستر به اسلیو اعلام میشه ، حالا توی پاسخ ما تعداد بایت داریم که میشه دو برابر دیتای درخواستی.
      //--------------------------------------------------------------------------------------
      احتمالا اینجا عدد را تغییر بدی درست میشه. اول با یه متغیر بنویسش و بعد که اوکی شد تعدادشو زیاد کن.
      فقط قبل از اولین حلقه for نباید مقدار 0xffff در متغیر crc بارگذاری بشه؟

      دیدگاه


        #18
        پاسخ : مدباس RT-U

        مشکل رو پیدا کردم اینجاست که اون بافری که من توی برنامه تعریف کردم و محاسباتی که انجام میده با اون چیزی که فرستاده میشه کلی فرق داره :surprised: با اینکه برنامه رو هم دیباگ کردم و توی متغیر ها دقیقا همه چیز درسته حالا همون متغیر ها وقتی ارسال میشه و میاد روی سیستم مشکل دار میشه :cry2:

        دیدگاه


          #19
          پاسخ : مدباس RT-U

          نوشته اصلی توسط hamidrezam2
          مشکل رو پیدا کردم اینجاست که اون بافری که من توی برنامه تعریف کردم و محاسباتی که انجام میده با اون چیزی که فرستاده میشه کلی فرق داره :surprised: با اینکه برنامه رو هم دیباگ کردم و توی متغیر ها دقیقا همه چیز درسته حالا همون متغیر ها وقتی ارسال میشه و میاد روی سیستم مشکل دار میشه :cry2:
          بله من یادم رفت بگم که متغیر CRC باید کامل با FFFF پر بشه.
          //-------------------------------------------
          خوب ، متغیر PDU را از نوع CHAR گذاشتید؟
          به تست عددی از پورت سریال بگیرید و چک کنید که عدد درست ارسال میشه یا نه.
          Reveng will surely come... Your hard time are ahead
          // - - - - - - - - - -
          برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
          // - - - - - - - - - -
          اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
          // - - - - - - - - - -

          دیدگاه


            #20
            پاسخ : مدباس RT-U

            راستی یادم رفت بپرسم ، به چه PLC میخوای وصل بشی؟
            Reveng will surely come... Your hard time are ahead
            // - - - - - - - - - -
            برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
            // - - - - - - - - - -
            اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
            // - - - - - - - - - -

            دیدگاه


              #21
              پاسخ : مدباس RT-U

              نوشته اصلی توسط سعید خیری
              بله من یادم رفت بگم که متغیر CRC باید کامل با FFFF پر بشه.
              //-------------------------------------------
              خوب ، متغیر PDU را از نوع CHAR گذاشتید؟
              به تست عددی از پورت سریال بگیرید و چک کنید که عدد درست ارسال میشه یا نه.
              نه از نوع int هستش
              راجب پی ال سی هم هر نوعی که مد باس رو پشتیبانی بکنه
              ولی برای تست با زیمنس s300 میخوام کار کنم

              دیدگاه


                #22
                پاسخ : مدباس RT-U

                نوشته اصلی توسط hamidrezam2
                نه از نوع int هستش
                راجب پی ال سی هم هر نوعی که مد باس رو پشتیبانی بکنه
                ولی برای تست با زیمنس s300 میخوام کار کنم
                زیمنس که گرونه قیمتش . من برای تست ، دلتا داشتم
                اینو تغییر بدین:
                کد:
                unsigned Char PDU[8]
                Reveng will surely come... Your hard time are ahead
                // - - - - - - - - - -
                برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
                // - - - - - - - - - -
                اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
                // - - - - - - - - - -

                دیدگاه


                  #23
                  پاسخ : مدباس RT-U

                  سلام دوستان من با تابع زیر crc محاسبه میکنم ولی اشتباه میشه. مشکل کجا میتونه باشه؟؟
                  کد PHP:
                  len=5;    
                     
                  crc=0xffff;   
                     for(
                  pos=0;pos<len;pos++)  
                      {    
                      
                  crc ^=rx_buffer[pos];   
                         for(
                  i=0;i<8;i++)     
                       {    
                          if((
                  crc&0x0001)!=0)       
                       {    
                            
                  crc >>=1;       
                        
                  crc ^=0xA001;    
                          }       
                       else    
                          {   
                            
                  crc >>=1;    
                          }   
                      } 
                  کدی که خود plc ارسال میکنه 4ca هست ولی کدی که من به دست میارم 1916 هست
                  جدیدترین ویرایش توسط rasool1370; ۲۳:۳۰ ۱۳۹۶/۰۷/۰۵.

                  دیدگاه


                    #24
                    پاسخ : مدباس RT-U

                    سلام
                    مشکل من حل شد . من crc به صورت int تعریف میکردم در حالی که باید unsigned int تعریع میکردم

                    دیدگاه


                      #25
                      پاسخ : مدباس RT-U

                      سلام
                      برنامه Modbus Poll میتونه کمکتون کنه.
                      ولی خود پروتکل واقعا سخته

                      دیدگاه

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