اطلاعیه

Collapse
No announcement yet.

مشکل در خواندن دیتا

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

    مشکل در خواندن دیتا

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

    اگر میتونید منو راهنمایی کنید

    کد:
    $regfile = "m32def.dat"                                     ' specify the used micro
    $crystal = 1000000                                          ' used crystal frequency
    
    
    Config Portd = Output
    Dim Tmp2 As Single
    Dim Tmp1 As Single , M As Single , B As Single , Command As String * 60 , Gline As Integer
    Gline = 0
    
    
    Dim Ar(6) As String * 20 , Splitcnt As Byte
    
    
    
    
    Dim Xstep As Single , Xposd As Single , Xposg As Single , X1 As Single , X2 As Single , Xrot As Byte
    
    
    Xstep = 0.01                                                'ÇäÏÇÒå åÑ ÑÔ ãæÊæÑx
    Xposd = 0
    Xposg = 0
    X1 = 0
    X2 = 0
    Xrot = &B00010001
    
    
    Dim Ystep As Single , Yposd As Single , Yposg As Single , Y1 As Single , Y2 As Single , Yrot As Byte
    
    
    Ystep = 0.01                                                'ÇäÏÇÒå åсÑÔ ãæÊæÑ y
    Yposd = 0
    Yposg = 0
    Y1 = 0
    Y2 = 0
    Yrot = &B00010001
    
    
    Declare Sub Lineh
    Declare Sub Linev
    Declare Sub Linehi
    Declare Sub Linelo
    Declare Sub Dostep(byval Jtt As String * 2 , Byval Stt As Single)
    
    
    
    
    P1:
    Command = Lookupstr(gline , Gcode )
    Gline = Gline + 1
    Splitcnt = Split(command , Ar(1) , " ")
    If Ar(1) = "G00" Or Ar(1) = "G01" Then                      ' ÏÓÊæÑ ÑÓã ÎØ ÕÇÏÑ ÔÏå
       Delchar Ar(2) , 1
       X2 = Val(ar(2))
       X2 = X2 / Xstep
       X2 = Round(x2)
       X2 = X2 * Xstep
       Delchar Ar(3) , 1
       Y2 = Val(ar(3))
       Y2 = Y2 / Ystep
       Y2 = Round(y2)
       Y2 = Y2 * Ystep
       Tmp1 = Y2 - Y1
       Tmp1 = Abs(tmp1)
       If Tmp1 < Ystep Then                                     ' ÎØ ãæÇÒí ãÍæÑ ÇÝÞí ÇÓÊ
          Call Lineh
          Goto P1
       End If
       Tmp1 = X2 - X1
       Tmp1 = Abs(tmp1)
       If Tmp1 < Xstep Then                                     ' ÎØ ãæÇÒí ãÍæÑ ÚãæÏí ÇÓÊ
          Call Linev
          Goto P1
       End If
       Tmp1 = Y2 - Y1
       Tmp2 = X2 - X1
       M = Tmp1 / Tmp2
       If M > 1 Then                                            ' ÔíÈ ÒíÇÏ æ ãËÈÊ
          Call Linehi
          Goto P1
       End If
       If M <= 1 And M > 0 Then                                 ' ÔíÈ ˜ã æ ãËÈÊ
          Call Linelo
          Goto P1
       End If
       If M >= -1 And M < 0 Then                                ' ÔíÈ ˜ã æ ãäÝí
          Call Linelo
          Goto P1
       End If
       If M < -1 Then                                           ' ÔíÈ ÒíÇÏ æ ãäÝí
          Call Linehi
          Goto P1
       End If
    End If
    If Ar(1) = "M02" Then                                       ' ÏÓÊæÑ ÑÓã ÎØ ÕÇÏÑ ÔÏå
       End
    End If
    
    
    
    
    End
    '**********
    Sub Lineh
       Tmp1 = X2 - X1
       Tmp1 = Tmp1 / Xstep
       Tmp1 = Fix(tmp1)
       Call Dostep( "x" , Tmp1)
       X1 = Xposd
       Y1 = Yposd
    End Sub
    '*********
    Sub Linev
       Tmp1 = Y2 - Y1
       Tmp1 = Tmp1 / Ystep
       Tmp1 = Fix(tmp1)
       Call Dostep( "y" , Tmp1)
       X1 = Xposd
       Y1 = Yposd
    
    
    End Sub
    '**********
    Sub Linehi
       Tmp1 = Y2 - Y1
       Tmp2 = X2 - X1
       M = Tmp1 / Tmp2
       Tmp1 = M * X2
       B = Y2 - Tmp1
    
    
       Tmp2 = Tmp2 / Xstep
       If Tmp2 > 1 Then
           Tmp2 = Fix(tmp2)
           For Xposg = 1 To Tmp2
              Yposg = Xposg * Xstep
              Yposg = Yposg + X1
              Yposg = Yposg * M
              Yposg = Yposg + B
              Tmp1 = Yposg - Yposd
              Tmp1 = Tmp1 / Ystep
              Tmp1 = Fix(tmp1)
              Call Dostep( "y" , Tmp1)
              Call Dostep( "x" , 1)
           Next
           X1 = Xposd
           Y1 = Yposd
           Return
        End If
    
    
        If Tmp2 < 1 Then
           Tmp2 = Tmp2 * -1
           Tmp2 = Fix(tmp2)
           For Xposg = 1 To Tmp2
              Yposg = Xposg * Xstep
              Yposg = Yposg * -1
              Yposg = Yposg + X1
              Yposg = Yposg * M
              Yposg = Yposg + B
              Tmp1 = Yposg - Yposd
              Tmp1 = Tmp1 / Ystep
              Tmp1 = Fix(tmp1)
              Call Dostep( "y" , Tmp1)
              Call Dostep( "x" , -1)
           Next
           X1 = Xposd
           Y1 = Yposd
           Return
        End If
    End Sub
    '**********
    Sub Linelo
       Tmp1 = Y2 - Y1
       Tmp2 = X2 - X1
       M = Tmp1 / Tmp2
       Tmp2 = M * X2
       B = Y2 - Tmp2
       Tmp2 = Tmp1 / Ystep
       If Tmp2 > 1 Then
          Tmp2 = Fix(tmp2)
    
    
           For Yposg = 1 To Tmp2
              Xposg = Yposg * Ystep
              Xposg = Xposg + Y1
              Xposg = Xposg - B
              Xposg = Xposg / M
              Tmp1 = Xposg - Xposd
              Tmp1 = Tmp1 / Xstep
              Tmp1 = Fix(tmp1)
              Call Dostep( "x" , Tmp1)
              Call Dostep( "y" , 1)
           Next
           X1 = Xposd
           Y1 = Yposd
           Return
        End If
    
    
        If Tmp2 < 1 Then
           Tmp2 = Tmp2 * -1
           Tmp2 = Fix(tmp2)
    
    
           For Yposg = 1 To Tmp2
              Xposg = Yposg * Ystep
              Xposg = Xposg * -1
              Xposg = Xposg + Y1
              Xposg = Xposg - B
              Xposg = Xposg / M
              Tmp1 = Xposg - Xposd
              Tmp1 = Tmp1 / Xstep
              Tmp1 = Fix(tmp1)
              Call Dostep( "x" , Tmp1)
              Call Dostep( "y" , -1)
           Next
           X1 = Xposd
           Y1 = Yposd
           Return
        End If
    
    
    End Sub
    '********** -Dostep- **********
    Sub Dostep(jtt , Stt)
       If Jtt = "x" Then
          If Stt > 0 Then
             For Tmp1 = 1 To Stt
                Rotate Xrot , Right
                Portd = Xrot / 16
                Waitms 15
             Next Tmp1
             Portd = 0
             Tmp1 = Stt * Xstep
             Xposd = Xposd + Tmp1
             Return
          End If
          If Stt < 0 Then
             Stt = Stt * -1
             For Tmp1 = 1 To Stt
                 Rotate Xrot , Left
                 Portd = Xrot / 16
                 Waitms 15
             Next Tmp1
             Portd = 0
             Tmp1 = Stt * Xstep
             Xposd = Xposd - Tmp1
             Return
          End If
       End If
       '******
       If Jtt = "y" Then
          If Stt > 0 Then
             For Tmp1 = 1 To Stt
                 Rotate Yrot , Right
                 Portd = Yrot * 16
                 Waitms 15
             Next Tmp1
             Portd = 0
             Tmp1 = Stt * Ystep
             Yposd = Yposd + Tmp1
             Return
          End If
          If Stt < 0 Then
             Stt = Stt * -1
             For Tmp1 = 1 To Stt
                 Rotate Yrot , Left
                 Portd = Yrot * 16
                 Waitms 15
             Next Tmp1
             Portd = 0
             Tmp1 = Stt * Ystep
             Yposd = Yposd - Tmp1
             Return
          End If
       End If
    
    
    End Sub
    '*-*-*-*-*-*-*-*-*-*-*-*
    Gcode:
    
    
    Data "G00 X-2.439960629921 Y-3.265748031496"
    Data "G01 X-2.439960629921 Y3.427165354331"
    Data "G01 X0.087598425197 Y3.427165354331"
    Data "G01 X0.675196850394 Y3.41141732283"
    Data "G01 X1.106299212598 Y3.363188976378"
    Data "G01 X1.560039370079 Y3.244094488189"
    Data "G01 X1.93405511811 Y3.052165354331"
    Data "G01 X2.235236220472 Y2.774606299213"
    Data "G01 X2.471456692913 Y2.406496062992"
    Data "G01 X2.623031496063 Y1.972440944882"
    Data "G01 X2.673228346457 Y1.495078740157"
    Data "G01 X2.639763779528 Y1.086614173228"
    Data "G01 X2.538385826772 Y0.709645669291"
    Data "G01 X2.36811023622 Y0.365157480315"
    Data "G01 X2.129921259843 Y0.054133858268"
    Data "G01 X1.98031496063 Y-0.084645669291"
    Data "G01 X1.804133858268 Y-0.204724409449"
    Data "G01 X1.367125984252 Y-0.388779527559"
    Data "G01 X0.820866141732 Y-0.499015748031"
    Data "G01 X0.165354330709 Y-0.536417322835"
    Data "G01 X-1.551181102362 Y-0.536417322835"
    Data "G01 X-1.551181102362 Y-3.265748031496"
    Data "G01 X-2.439960629921 Y-3.265748031496"
    
    
    Data "M02"                                                  ' end program & gcode

    #2
    پاسخ : مشکل در خواندن دیتا

    کسی نیست کمک کنه؟؟؟؟؟؟

    دیدگاه


      #3
      پاسخ : مشکل در خواندن دیتا

      میکرو و کامپایلر رو مشخص کنید حداقل این برنامه هم طولانی هست اش کسی فکر نکنم حوصله کنه کامل بخونه بهتره مشکل تون رو جور دیگه مطرح کنین مثلا بگین من می خوام داده ها رو به صورت سریال یا هر مورد دیگه دریافت کنم این مشکل وجود داره ...
      التماس دعا

      دیدگاه

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