سلام
من یه برنامه نوشتم ک دیتاهارو باید بخونه و به استپ موتور بده واسه دستگاه cnc . حالا مشکلی ک برام پیش اومده من در شبیه سازی اجرا کردم دو سه خط اول دیتاها رو درست میخونه و بعد اختلاف دیتاها بیشتر میشه
اگر میتونید منو راهنمایی کنید
من یه برنامه نوشتم ک دیتاهارو باید بخونه و به استپ موتور بده واسه دستگاه 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




دیدگاه