سلام
من یه برنامه نوشتم ک دیتاهارو باید بخونه و به استپ موتور بده واسه دستگاه 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
دیدگاه