اطلاعیه

Collapse
No announcement yet.

کسی سورس برنامه ساده کنترلر CNC بازبان bascom رو داره؟؟

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

    کسی سورس برنامه ساده کنترلر CNC بازبان bascom رو داره؟؟

    کسی سورس برنامه ساده کنترلر CNC بازبان bascom رو داره؟؟
    من اینو نوشتم که فعلا G01 رو شبیه سازی میکنه ولی درست کار نمی کنه به نظرتون اشکال کار کجاست.پورت c و d محور های x,y رو کنترل می کنه با استپ موتور
    $regfile = "m32def.dat"
    $crystal = 8000000
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
    Config Lcdpin = Pin , Port = Porta , E = Portb.2 , Rs = Portb.3
    Config Scl = Portb.0
    Config Sda = Portb.1
    Config Portd = Output
    Config Portc = Output
    Config Single = Scientific , Digits = 2
    Dim I As Byte
    Dim X As Single , Y As Single
    Dim N As Single
    Dim M As Single , E As Single , K As Word , L As Word
    Dim Hadi(7) As Byte
    Dim Bb As Byte , F As Byte , Kk As Integer
    Dim A(70) As Byte
    Dim C1 As Byte , C2 As Byte , C3 As Byte , C4 As Byte , C5 As Byte , C6 As Byte
    Dim Q1 As Single , Q2 As Single , Q3 As Single , Q4 As Single , Dy As Single , Dx As Single , Ky As Single , Kx As Single , Px As Integer , Py As Integer , Ix As Integer , Iy As Integer
    Declare Sub I2cw(byval Addr As Byte , Byval V As Byte )
    Declare Sub Move1(byval X As Single , Byval Y As Single , Byval F As Byte )
    Declare Function I2cr(byval Addrr As Byte) As Byte
    A(1) = 11
    A(2) = 01
    A(3) = 1
    A(4) = 00
    A(5) = 10
    A(6) = 00
    A(7) = 200

    A(8) = 11
    A(9) = 01
    A(10) = 10
    A(11) = 00
    A(12) = 5
    A(13) = 00
    A(14) = 200

    A(15) = 11
    A(16) = 01
    A(17) = 5
    A(18) = 00
    A(19) = 10
    A(20) = 00
    A(21) = 200

    C1 = 0
    C2 = 0
    C3 = 0
    C4 = 0
    C5 = 0
    C6 = 0
    Dx = 0
    Kx = 0
    Dy = 0
    Ky = 0

    For I = 1 To 7
    Call I2cw(i , A(i))
    Waitms 100
    Hadi(i) = I2cr(i)
    Next I
    Waitms 100

    Start1:

    If A(1 + C1) = 11 Then Goto Gcod
    If A(1 + C1) = 12 Then Goto Mcod

    Gcod:

    Select Case A(2 + C1)
    Case 1
    X = A(4 + C1)
    X = X / 100
    X = X + A(3 + C1)
    Y = A(6 + C1)
    Y = Y / 100
    Y = Y + A(5 + C1)
    F = A(7 + C1)
    F = F
    Call Move1(x , Y , F)
    C1 = C1 + 7
    Goto Start1
    End Select






    Mcod:









    '******************************************** ***********
    End
    Sub I2cw(byval Addr As Byte , Byval V As Byte)
    I2cstart
    I2cwbyte &B10100000
    I2cwbyte Addr
    I2cwbyte V
    Waitms 50
    I2cstop
    End Sub

    Function I2cr(byval Addrr As Byte) As Byte
    I2cstart
    I2cwbyte &B10100000
    I2cwbyte Addrr
    I2cstart
    I2cwbyte &B10100001
    I2crbyte I2cr , Nack
    Waitms 50
    I2cstop
    End Function

    Sub Move1(byval X As Single , Byval Y As Single , Byval F As Byte )

    Dx = X - Kx
    Dy = Y - Ky
    E = Dy / Dx
    Px = Dy * 100
    Py = Dy * 100
    L = Round(e)
    If Px > 0 And Py > 0 Then

    If E > 1 Then
    Do
    Portc = Lookup(c4 , Dta1)
    For Ix = 1 To L
    Portd = Lookup(c5 , Dta1)
    Waitms 200
    Incr C5
    If C5 = 4 Then C5 = 0
    Next Ix
    Incr C4
    If C4 = 4 Then C4 = 0
    Incr C6
    Loop Until C6 = Px

    Else
    Do
    Portd = Lookup(c5 , Dta1)
    For Iy = 1 To L
    Portc = Lookup(c4 , Dta1)
    Waitms 200
    Incr C4
    If C4 = 4 Then C4 = 0
    Next Iy
    Incr C5
    If C5 = 4 Then C5 = 0
    Incr C6
    Loop Until C6 = Py
    End If

    Elseif Px < 0 And Py < 0 Then

    If E > 1 Then
    Do
    Portc = Lookup(c4 , Dta2)
    For Ix = 1 To L
    Portd = Lookup(c5 , Dta2)
    Waitms 200
    Incr C5
    If C5 = 4 Then C5 = 0
    Next Ix
    Incr C4
    If C4 = 4 Then C4 = 0
    Incr C6
    Loop Until C6 = Px

    Else
    Do
    Portd = Lookup(c5 , Dta2)
    For Iy = 1 To L
    Portc = Lookup(c4 , Dta2)
    Waitms 200
    Incr C4
    If C4 = 4 Then C4 = 0
    Next Iy
    Incr C5
    If C5 = 4 Then C5 = 0
    Incr C6
    Loop Until C6 = Py
    End If

    Elseif Px > 0 And Py < 0 Then
    If E > 1 Then
    Do
    Portc = Lookup(c4 , Dta1)
    For Ix = 1 To L
    Portd = Lookup(c5 , Dta2)
    Waitms 200
    Incr C5
    If C5 = 4 Then C5 = 0
    Next Ix
    Incr C4
    If C4 = 4 Then C4 = 0
    Incr C6
    Loop Until C6 = Px

    Else
    Do
    Portd = Lookup(c5 , Dta2)
    For Iy = 1 To L
    Portc = Lookup(c4 , Dta1)
    Waitms 200
    Incr C4
    If C4 = 4 Then C4 = 0
    Next Iy
    Incr C5
    If C5 = 4 Then C5 = 0
    Incr C6
    Loop Until C6 = Py
    End If

    Elseif Px < 0 And Py > 0 Then

    If E > 1 Then
    Do
    Portc = Lookup(c4 , Dta2)
    For Ix = 1 To L
    Portd = Lookup(c5 , Dta1)
    Waitms 200
    Incr C5
    If C5 = 4 Then C5 = 0
    Next Ix
    Incr C4
    If C4 = 4 Then C4 = 0
    Incr C6
    Loop Until C6 = Px

    Else
    Do
    Portd = Lookup(c5 , Dta1)
    For Iy = 1 To L
    Portc = Lookup(c4 , Dta2)
    Waitms 200
    Incr C4
    If C4 = 4 Then C4 = 0
    Next Iy
    Incr C5
    If C5 = 4 Then C5 = 0
    Incr C6
    Loop Until C6 = Py
    End If

    End If


    Locate 1 , 1 : Lcd Dx ; " " ; Dy ; " "


    Kx = X
    Ky = Y

    End Sub
    Dta1:
    Data &B00001000 , &B00000001 , &B00000100 , &B00000010
    Dta2:
    Data &B00000010 , &B00000100 , &B00000001 , &B00001000

    #2
    پاسخ : کسی سورس برنامه ساده کنترلر CNC بازبان bascom رو داره؟؟

    ببین رفیق من کار اصلیم در مورد cnc یه و یه دو سالی هست که دارم با این دستگاه سرو کله میزنم.
    تعداد کدهایی که قراره ارسال بشه به استپ موتورها مثلا برای یه کد G ممکنه کم باشه ولی وقتی تعداد این کدها برای یه عمل ساده زیاد بشه دیگه میکرو نمیتونه به خوبی این کارو انجام بده و اونجاست که میگن آقا باید با DSP کار می کردی :biggrin:
    اینو میدونم که در دستگاه های cnc در هر اینچ چیزی حدود 6000 کد فرستاده میشه

    دیدگاه

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