اطلاعیه

Collapse
No announcement yet.

استفاده از جدول"LOOKUP" در بسکام

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

    استفاده از جدول"LOOKUP" در بسکام

    سلام دوستان :bye

    من 2 تا سنسور دماسنج دارم که اختلاف دمای این 2 سنسور رو باید بدست بیارم و با توجه به یه جدول ؛؛ رطوبت رو بکشم بیرون .

    به عنوان مثال 5=36-31 که با توجه به جدول ؛؛ رطوبت میشه 70 .

    حالا من میخام با استفاده از جدول lLOOKUP تمام اعداد جدول رو تو برنامه ام بنویسم .حالا چه جوری این اعداد رو چینش کنم تا اینکه زمانیکه اختلاف 2 دما رو بدست میاره رطوبت رو بدرستی از جدول بیرون بکشه .؟؟

    اینم یه نمونه جدول .
    http://s4.picofile.com/file/7836801284/1111.jpg

    اینم جدول LOOKUP هست

    کد:
    I = Lookup(m , Dta)                   
    
    Print I
    
    End
    
    Dta:
    
    Data 2 , 9 , 15 , 78 , 76 , 70
    مشکل من با جدول lookup نیست مشکل من با جدول رطوبت هست .براتون اینجوری توضیح بدم

    اگر 3=25-28
    بنابراین m=3 است . که جدول look میاد دیتا چهارم یعنی 78 رو میشکه بیرون .که درصد رطوبت 78برای این رنج دمای درسته .تا اینجا ok?

    اگر 3=21-24
    که m=3 که جدول look میاد دیتا چهارم یعنی 78 رو میکشه بیرون .در صورتیکه رطوبت برای این رنج دما 76 هست .ولی چون اختلاف درجه 3 بوده . دیتای چهارم رو کشیده بیرون

    .مشکل من با اینه .

    من اعداد 0 تا 100 رو دارم که رطوبت برای هر رنج دما متغییر هست .

    اگر 5=42-47 هست این 5 مقدار رطوبتش با 5=59-64 یکی نیست .چونکه یکی از 5 ها برای رنج دمای بین 47-42 هست .یکی از 5 ها برای رنج دمای 64-59. ولی چون m=5 شده فقط دیتای ششم رو دریافت میکنه .

    اگر به جدولی که در بالا پیوست کردم یه نگاهی بندازید منظورمو متوجه میشید که چی میگم
    یا به اندازه آرزوهایت تلاش میکنی یا به اندازه تلاشت ارزو میکنی

    #2
    پاسخ : استفاده از جدول"LOOKUP" در بسکام

    سلام
    احتمالا با 26 lookup tabel و select case بتونید مشکل رو حل کنید

    کد:
    Value = Wet
    
    
    Select Case Tb
    
      Case -20:
    
       R = Lookup(value , Data_20n)
    
    
      Case -15:
    
       R = Lookup(value , Data_10n)
    
      Case -10:
    
       R = Lookup(value , Data_5n)
    
      Case -5:
    
       R = Lookup(value , Data_0n)
    
    
    End Select
    
    
    
    
    
    
    Data_20n:
    Data 41
    
    Data_15n:
    Data 58 , 18
    
    Data_10n:
    Data 69 , 39 , 10
    
    
    Data_5n:
    Data 77 , 54 , 32 , 11
    
    Data_0:
    Data 82 , 65 , 47 , 31 , 15
    
    Data_2p:
    Data 84 , 68 , 52 , 37 , 22 , 8

    دیدگاه


      #3
      پاسخ : استفاده از جدول"LOOKUP" در بسکام

      سلام
      از بابت زحمتی که کشیدید ممنونم .

      ببینید ما 2 چیز برامون مهم هست .دمای یکی از سنسورها و اختلاف دمای این 2 سنسور . .چون بر اساس این 2 پارامتر هست که ما می توانیم رطوبت رو بدست بیاریم . شما اگر جدول رو نگاه کنید میبیند که بر اساس دمای یکی از سنسورها و اختلاف دمای این دو سنسور هست که رطوبت بدست میاد . بنابراین باید این مشکل حل بشه .



      یا به اندازه آرزوهایت تلاش میکنی یا به اندازه تلاشت ارزو میکنی

      دیدگاه


        #4
        پاسخ : استفاده از جدول"LOOKUP" در بسکام

        یه تابع کوچلو نوشتم که دو تا ورودی T1 و T2 رو بهش میدین و مقدار رطوبت رو مطابق جدولی که قرار دادین میده مثلا اگر مقدار T2=-19 و Tab=T1=-20 باشه خروجی تابع 41 میشه. این تابع تا 0 درجه هست و باید تکمیل بشه


        کد:
        $regfile = "m16def.dat"
        $crystal = 8000000
        
        $hwstack = 50
        $swstack = 50
        $framesize = 50
        
        
        
        
        
        Declare Function Wet_value(byval T_1 As Integer , Byval T_2 As Integer) As Byte
        
        
        Dim K As Byte
        Dim Temp_1 As Integer
        Dim Temp_2 As Integer
        
        
        
        Do
        
          Temp_1 = -20
          Temp_2 = -19
          K = Wet_value(temp_1 , Temp_2)
          Print K                         'out = 41
        
        
        
          Temp_1 = -15
          Temp_2 = -13
          K = Wet_value(temp_1 , Temp_2)
          Print K                         'out = 18
        
        
        
        
        Loop
        
        
        
        
        
        
        
        End
        
        
        
        
        
        
        
        
        Function Wet_value(byval T_1 As Integer , Byval T_2 As Integer) As Byte
        
        
          Local Wet_bulb As Integer
        
          Wet_bulb = T_1 - T_2
          Wet_bulb = Abs(wet_bulb)
          Wet_bulb = Wet_bulb - 1
        
        
        
          Select Case Temp_1
        
           Case -20:
             Wet_value = Lookup(wet_bulb , Data_20n )
        
        
           Case -15:
             Wet_value = Lookup(wet_bulb , Data_15n )
        
        
           Case -10:
             Wet_value = Lookup(wet_bulb , Data_10n )
        
        
           Case -5:
             Wet_value = Lookup(wet_bulb , Data_5n )
        
        
           Case 0:
             Wet_value = Lookup(wet_bulb , Data_0 )
        
        
           Case 2:
             Wet_value = Lookup(wet_bulb , Data_2p )
        
        
        
        
        
        
        
        
        
          End Select
        
        
        
        
        
        End Function
        
        
        
        
        
        
        
        
        Data_20n:
        Data 41
        
        Data_15n:
        Data 58 , 18
        
        Data_10n:
        Data 69 , 39 , 10
        
        
        Data_5n:
        Data 77 , 54 , 32 , 11
        
        Data_0:
        Data 82 , 65 , 47 , 31 , 15

        دیدگاه


          #5
          پاسخ : استفاده از جدول"LOOKUP" در بسکام


          با سلام

          جدول شما یک آرایه دو بعدی است.

          ایا بسکام از آرایه چند بعدی پشتیبانی می کند؟

          اگر بله،

          تعدادی دما در سطر و ستون قید نشده، که با کمک دو آرایه تک بعدی، آنها را به دمای موجود در جدول تبدیل می کنیم:
          ( مثلا دمای 35 برای Tab را به 34 یا 36 تبدیل می کنیم )

          row_temp = look_up_row[Tab];//comment
          column_temp = look_up_clmn[TWBD];//comment

          حالا در آرایه دو بعدی اصلی:

          humidity=lookup_2d[row_temp,column_temp];//comment

          کمی ویرایش هم نیاز داریم ( جدول را به همین فشردگی یا بازتر ذخیره کنیم )

          با سپاس
          گشتی در لاله زار
          http://www.eca.ir/forum2/index.php?topic=76138.0

          http://www.eca.ir/forum2/index.php?topic=76141

          دیدگاه


            #6
            پاسخ : استفاده از جدول"LOOKUP" در بسکام

            سلام.
            به نظر من هم راه حلش آرایه دو بعدی هست به راحتی با آرایه دو بعدی و یکم محاسبه میشه اینکار رو انجام داد بسکام ارایه دو بعدی داره؟
            شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
            هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
            چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

            دیدگاه


              #7
              پاسخ : استفاده از جدول"LOOKUP" در بسکام

              سلام دکتر جان
              بابت تاخیرم عذر خواهی میکنم
              اولا در جواب دوستان باید بگم بسکام تا این نسخه ای که من دارم (2.0.7.3) از آرایه 2 بعدی پشتیبانی نمیکنه :sad:

              راه حلی که به نظر من رسید رو در قالب فایل برنامه و شبیه ساز براتون میذارم، البته باید جدولش رو کامل کنید.
              نکته ای که هست این برنامه فقط اعداد داخل جدول رو براتون بدست میاره و اعداد بین اونها رو باید خودتون براش فرمول بنویسید.
              موفق باشید
              کد:
              $regfile = "m8def.dat"
              $crystal = 1000000
              
              Config Lcd = 20 * 4
              Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
              Cursor Off
              
              Dim T1 As Integer , T2 As Integer , Humidity As Byte
              Dim Dif_temp As Integer , Row As Integer , Column As Integer
              Dim Buf As Integer , Table_index As Integer
              
              T1 = -15
              T2 = -17
              
              Do
              Gosub Temp2hum
              Cls
              Lcd "T1:" ; T1 ; " T2:" ; T2
              Home L
              Lcd "Dif Temp:" ; Dif_temp
              Locate 3 , 1
              Lcd "row:" ; Row ; " col:" ; Column ; " Indx:" ; Table_index
              Locate 4 , 1
              Lcd "Humidity=" ; Humidity
              Wait 1
              Loop
              
              Temp2hum:
              Dif_temp = T1 - T2
              Humidity = Dif_temp
              If Dif_temp > 20 Then                    'out of table (right side)
                Humidity = 0
                Return
              End If
              If Dif_temp < 1 Then                    'out of table (left side)
                Humidity = 100
                Return
              End If
              If T1 < -20 Then                      'out of table (top side)
                Humidity = 0
                Return
              End If
              
              If Dif_temp > 10 Then                    'get column of table
                Column = Dif_temp - 10
                Column = Column / 2
                Column = Column + 10
              Else
                Column = Dif_temp
              End If
                                             'get row of table
              If T1 >= 0 Then                       'positive temp
                Row = T1 / 2
                Row = Row + 4
              Else                            'negative temp
                Row = T1 / 5
                Row = Row + 4
              End If
              
              Table_index = Row * 15
              Table_index = Table_index + Column
              Humidity = Lookup(table_index , Hum_table)
              Return
              
              Hum_table:
              Data 0
              Data 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0    'row t1=-20'c
              Data 58 , 18 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0    'row t1=-15'c
              Data 69 , 39 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0    'row t1=-10'c
              Data 77 , 54 , 32 , 11 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0    'row t1=-5'c
              Data 82 , 65 , 47 , 31 , 15 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0    'row t1=0'c
              Data 84 , 68 , 52 , 37 , 22 , 8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0    'row t1=2'c
              Data 85 , 70 , 56 , 49 , 29 , 26 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0    'row t1=4'c
              http://www.4shared.com/rar/X3As2Oow/Temp2Humidity.html
              زندگي را تو بساز ،
              نه بدان ساز که سازند و پذيري بي حرف ،
              زندگي يعني جنگ ، تو بجنگ ،
              زندگي يعني عشق ، تو بدان عشق بورز.

              دیدگاه


                #8
                پاسخ : استفاده از جدول"LOOKUP" در بسکام

                سلام.
                درسته که بسکام آرایه 2 بعدی نداره ولی میشه به راحتی با تکنیک های نرم افزاری آرایه 2 بعدی ساخت !
                کد:
                $regfile = "M8DEF.DAT"
                $crystal = 4000000
                
                Const Array_x = 10
                Const Array_y = 10
                Const Array_matrix = Array_x * Array_y
                
                Dim Array_2d(array_matrix) As Byte
                
                Declare Function Get_array_2d(d1 As Byte , D2 As Byte) As Byte
                Declare Sub Set_array_2d(d1 As Byte , D2 As Byte , Pvalue As Byte)
                
                Do
                
                'Your Program
                
                Loop
                
                
                Function Get_array_2d(d1 As Byte , D2 As Byte) As Byte
                
                  Local Array_pointer As Word
                
                 Array_pointer = D1 - 1
                 Array_pointer = Array_pointer * Array_y
                 Array_pointer = Array_pointer + D2
                 Get_array_2d = Array_2d(array_pointer)
                
                End Function
                
                Sub Set_array_2d(d1 As Byte , D2 As Byte , Pvalue As Byte)
                
                  Local Array_pointer As Word
                
                 Array_pointer = D1 - 1
                 Array_pointer = Array_pointer * Array_y
                 Array_pointer = Array_pointer + D2
                 Array_2d(array_pointer) = Pvalue
                
                End Sub
                تابع Get_array_2d واسه خواندن از آرایه و تابع Set_array_2d برای نوشتن در آرایه.
                تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا

                دیدگاه


                  #9
                  پاسخ : استفاده از جدول"LOOKUP" در بسکام

                  نوشته اصلی توسط mehdi_nxp
                  سلام.
                  درسته که بسکام آرایه 2 بعدی نداره ولی میشه به راحتی با تکنیک های نرم افزاری آرایه 2 بعدی ساخت !
                  کد:
                  $regfile = "M8DEF.DAT"
                  $crystal = 4000000
                  
                  Const Array_x = 10
                  Const Array_y = 10
                  Const Array_matrix = Array_x * Array_y
                  
                  Dim Array_2d(array_matrix) As Byte
                  
                  Declare Function Get_array_2d(d1 As Byte , D2 As Byte) As Byte
                  Declare Sub Set_array_2d(d1 As Byte , D2 As Byte , Pvalue As Byte)
                  
                  Do
                  
                  'Your Program
                  
                  Loop
                  
                  
                  Function Get_array_2d(d1 As Byte , D2 As Byte) As Byte
                  
                    Local Array_pointer As Word
                  
                   Array_pointer = D1 - 1
                   Array_pointer = Array_pointer * Array_y
                   Array_pointer = Array_pointer + D2
                   Get_array_2d = Array_2d(array_pointer)
                  
                  End Function
                  
                  Sub Set_array_2d(d1 As Byte , D2 As Byte , Pvalue As Byte)
                  
                    Local Array_pointer As Word
                  
                   Array_pointer = D1 - 1
                   Array_pointer = Array_pointer * Array_y
                   Array_pointer = Array_pointer + D2
                   Array_2d(array_pointer) = Pvalue
                  
                  End Sub
                  تابع Get_array_2d واسه خواندن از آرایه و تابع Set_array_2d برای نوشتن در آرایه.
                  بسیار عالی :applause: :applause: :applause:
                  دقیقا" همون ایده ای که توی ذهن من بود ...
                  ممنون بابت کد :nerd:
                  [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                  معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                  معرفی نرم افزار Codewizard PWM
                  با من بیشتر آشنا شوید

                  دیدگاه

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