3 Eksen Usb CNC Kontrol Kartı Projesi Yardım

Başlatan computerboy, 27 Temmuz 2010, 09:16:31

computerboy

Herkese merhaba; 3 eksenli grafik lcd'li cnc kontrol kartı projem var son aşamada sayılırım ancak usb ile kontrol kartı arasındaki veri iletişiminde sıkıntı yaşıyorum profesyönel arkadaşlara bi kaç sorum olacak tabi kodları ve donanımı dahada geliştirmek isteyenler varsa katkılarını bekliyorum. takıldığım nokta ise visul basic ile yaptığım arayüz yazılımında bilgisayardan pic'e kordinat bilgilerini gönderiyoum pic kordinatları alıp verileri analiz ediyor ve for next... döngüsü içinde motorlara pulse sinyali gönderiyor ama bu for next döngüsü içindeyken visual basic yazılımı donup kalıyor for next'den çıkınca visual basic yazılımı kendine geliyor ve yeni komutu işliyor bu sorunu nasıl aşarım aklıma gelen 16 bitlik timer ile döngü yaratmak acaba gene kilitlenme olurmu ? yada sizin önerileriniz nedir. bu kodları C ye uyarlarsak daha güzel olur biraz biliyorum ama C diline tam manası ile aşina değilim bu konudada yardımlarınızı bekliyorum.

Protonda yazılmış kaynak kod:
kısaca açıklamak gerekirse visual basice dxf dosyasını analiz ettiriyorum ve nc koda dönüştürüyorum burda CNC nin işleyeceği G ve M kodları süzdürüyorum mesela;

BufferGönder "M", "3"
Spindle motoru açar

BufferGönder "M", "5"
Spindle motoru kapatır

BufferGönder "G", "0", "200", "50", "1"
X eksenini kordinatı motor hız ve yön bilgisi

BufferGönder "G", "0", "0", "0", "0","250", "10", "0",
Y eksenini kordinatı motor hız ve yön bilgisi

BufferGönder "M", "2"
Nc kodlarının sonu yani cnc parça işleme bitişi.


Device = 18F4550
XTAL = 48   
USB_DESCRIPTOR = "USBProjectDESC.inc"
Include "PG12864D.inc"

Symbol USBBufferSizeMax = 64
Symbol USBBufferSizeTX  = 64
Symbol USBBufferSizeRX  = 64
Dim    USBBuffer[USBBufferSizeMax] As Byte

Dim PP0 As Byte SYSTEM       
Symbol CARRY_FLAG = STATUS.0
Symbol ATTACHED_STATE = 6     
ALL_DIGITAL = True
TRISC = 0
TRISA = 0
TRISE = 0 

'-------------------------------------------------PORT TANIMLAMALARI
Dim USBON   As PORTD.2
Dim PICON   As PORTD.1

Dim XENABLE As PORTA.0
Dim XCLOCK  As PORTA.1
Dim XDIR    As PORTA.2

Dim YENABLE As PORTA.3
Dim YCLOCK  As PORTA.4
Dim YDIR    As PORTA.5

Dim ZENABLE As PORTE.0
Dim ZCLOCK  As PORTE.1
Dim ZDIR    As PORTE.2

ProgramBas:
Cls
DelayMS 100
Print At 0,1,"CNC System : "
Print At 1,1,"USB System : "
DelayMS 500
Print At 0,13," ON !"
High PICON
DelayMS 500

Print At 1,13," OFF !"
Print At 3,1,"Baglanti Kuruluyor."

GoSub AttachToUSB
Print At 1,13," ON ! "
Print At 3,1,"Baglanti Kuruldu.  "
'-------------------------------------------------VERİ TANIMLAMALARI
Dim Veri[64] As Byte
Dim gStr As Byte
Dim gNum As Word

Dim X As Word
Dim X1 As Word
Dim X2 As Word
Dim XH As Word
Dim XYON As Byte
Dim XPULSE As DWord

Dim Y As Word
Dim Y1 As Word
Dim Y2 As Word
Dim YH As Word
Dim YYON As Byte
Dim YPULSE As DWord

Dim Z As Word
Dim Z1 As Word
Dim Z2 As Word
Dim ZH As Word
Dim ZYON As Byte
Dim ZPULSE As DWord

'-------------------------------------------------PROGRAM BAŞLANGICI
BASLA:
GoSub DoUSBIn


'G-Code Kontrol      
Veri[0]               =   USBBuffer#0
Veri[1]               =   USBBuffer#1
Veri[2]               =   USBBuffer#2
gStr                =   Veri[0]
gNum.HighByte       =   Veri[1]
gNum.LowByte        =   Veri[2]

Cls
Print At 0,0,"G-Code Analizi..."
Print At 1,1,"Komut : ", gStr ,Dec gNum

If gStr = "M" And gNum = 3 Then
Print At 3,1,"Spindle: ON !  "
USBBuffer[1] = "S"
USBBuffer[2] = "1"
GoSub DoUSBOut
DelayMS 3000


ElseIf gStr = "M" And gNum = 5 Then
Print At 3,1,"Spindle: OFF ! "
USBBuffer[1] = "S"
USBBuffer[2] = "0"
GoSub DoUSBOut
DelayMS 2000

ElseIf gStr = "G" And gNum = 90 Then
Print At 3,1,"Axis Sistemi: X,Y,Z"
USBBuffer[1] = "M"
USBBuffer[2] = "S"
GoSub DoUSBOut
DelayMS 1500

ElseIf gStr = "G" And gNum = 71 Then
Print At 3,1,"Olcu Birimi: CM"
USBBuffer[1] = "C"
USBBuffer[2] = "M"
GoSub DoUSBOut
DelayMS 1500

ElseIf gStr = "G" And gNum = 0 Then
GoTo EKSENHAREKET

ElseIf gStr = "G" And gNum = 1 Then
GoTo EKSENHAREKET


ElseIf gStr = "M" And gNum = 2 Then
Cls
Print At 1,1,"Parca Isleme Tamam"
USBBuffer[1] = "E"
USBBuffer[2] = "N"
GoSub DoUSBOut
DelayMS 1500
Print At 2,1,"Spindle: OFF ! "
USBBuffer[1] = "S"
USBBuffer[2] = "0"
GoSub DoUSBOut
Print At 4,1,"Cihaz 1 dakika sonra"
Print At 6,1,"RESETLENECEK !"
DelayMS 10000
reset
EndIf

GoTo BASLA

EKSENHAREKET:
'X-Kordinat Bilgisi       
Veri[3]               =   USBBuffer#3
Veri[4]               =   USBBuffer#4
Veri[5]               =   USBBuffer#5
Veri[6]               =   USBBuffer#6
'X-Hız Bilgisi
Veri[7]               =   USBBuffer#7
Veri[8]               =   USBBuffer#8
'X-Yön Bilgisi
Veri[9]               =   USBBuffer#9
'Y-Kordinat Bilgisi       
Veri[10]           =   USBBuffer#10
Veri[11]           =   USBBuffer#11
Veri[12]           =   USBBuffer#12
Veri[13]           =   USBBuffer#13
'Y-Hız Bilgisi
Veri[14]           =   USBBuffer#14
Veri[15]           =   USBBuffer#15
'Y-Yön Bilgisi
Veri[16]           =   USBBuffer#16
'Z-Kordinat Bilgisi       
Veri[17]           =   USBBuffer#17
Veri[18]           =   USBBuffer#18
Veri[19]           =   USBBuffer#19
Veri[20]           =   USBBuffer#20
'Z-Hız Bilgisi
Veri[21]           =   USBBuffer#21
Veri[22]           =   USBBuffer#22
'Z-Yön Bilgisi
Veri[23]           =   USBBuffer#23
'-------------------------------------------------EKSEN VERİ HESAPLAMALARI

X1.HighByte     =   Veri[3]
X1.LowByte      =   Veri[4]
X2.HighByte     =   Veri[5]
X2.LowByte      =   Veri[6]
XH.HighByte     =   Veri[7]
XH.LowByte      =   Veri[8]
XYON            =   Veri[9]
XPULSE          =   X1 * 10000 + X2

Y1.HighByte     =   Veri[10]
Y1.LowByte      =   Veri[11]
Y2.HighByte     =   Veri[12]
Y2.LowByte      =   Veri[13]
YH.HighByte     =   Veri[14]
YH.LowByte      =   Veri[15]
YYON            =   Veri[16]
YPULSE          =   Y1 * 10000 + Y2

Z1.HighByte     =   Veri[17]
Z1.LowByte      =   Veri[18]
Z2.HighByte     =   Veri[19]
Z2.LowByte      =   Veri[20]
ZH.HighByte     =   Veri[21]
ZH.LowByte      =   Veri[22]
ZYON            =   Veri[23]
ZPULSE          =   Z1 * 10000 + Z2

'-------------------------------------------------LCD TANIMLAMARI

'Print At 3,1,"X: ", DEC4 X1,".",DEC4 X2," / ",DEC4 XH
'Print At 4,1,"Y: ", DEC4 Y1,".",DEC4 Y2," / ",DEC4 YH
'Print At 5,1,"Z: ", DEC4 Z1,".",DEC4 Z2," / ",DEC4 ZH

Print At 3,1,"X: ", Dec XPULSE," / ",Dec XH
Print At 4,1,"Y: ", Dec YPULSE," / ",Dec YH
Print At 5,1,"Z: ", Dec ZPULSE," / ",Dec ZH

Print At 6,0,"CW/CCW Bilgileri: "
Print At 7,1,"X:",Dec XYON," Y:",Dec YYON," Z:",Dec ZYON

Dim TUR As DWord
Dim TURDONGU As DWord

If XPULSE > YPULSE And XPULSE > ZPULSE Then TUR = XPULSE
If YPULSE > ZPULSE And YPULSE > XPULSE Then TUR = YPULSE
'If ZPULSE > XPULSE And ZPULSE > YPULSE Then TUR = ZPULSE

USBBuffer[1] = "T"
USBBuffer[2] = "1"
GoSub DoUSBOut 
DelayMS 500

High XENABLE
High YENABLE

If XYON = 0 Then
Low XDIR
ElseIf XYON = 1 Then 
High XDIR
EndIf

If YYON = 0 Then
Low YDIR
ElseIf YYON = 1 Then
High YDIR
EndIf

TURAT:

If XPULSE < TUR Then Toggle XCLOCK
If YPULSE < TUR Then Toggle YCLOCK
DelayUS YH

TURDONGU = TURDONGU + 1
If TURDONGU = TUR Then GoTo BASLA
GoTo TURAT

TUR = 0
TURDONGU = 0
XPULSE  = 0
YPULSE = 0
ZPULSE  = 0

USBBuffer[1] = "T"
USBBuffer[2] = "0"
GoSub DoUSBOut 
DelayMS 50
GoTo BASLA

DoUSBIn:
   USBIn 1, USBBuffer, USBBufferSizeRX, DoUSBIn
   High USBON
   Return
   
DoUSBOut:   
   USBOut 1, USBBuffer, USBBufferSizeTX, DoUSBOut
   Low USBON
   Return

AttachToUSB:
   Repeat                        
      USBPoll      
   Until PP0 = ATTACHED_STATE
   Return
Include "Font.inc"   

computerboy

Arkadaşlar yardımlarınızı esirgemeyin kodu inceleyenler mutlaka olmuştur.

KAZIMUGUR

#2
Tamam yardımları esirgemeyelim ama sende bizden aramayı esirgeme lütfen.
Bizim yöneticilerin Türkçesi böyle.
Arama dediklerine bakma , sen ara.
CNC ile ilgili başlıklar var.
Muhtelif çeşitli türlü bilgiler var , maximus var .... ::)

Edit : Yöneticilerden özür diliyorum.
Bilip bilmeden ....
Buton diyor ki ara... :P

computerboy

:) eywallah üstad.

zaten kendi yazdığım kodlar uzun araştırmalar neticesinde oluşan kodlar çok emek var üstünde maximus projesinide baştan sona inceledim onun haricinde farklı kodlar buldum ama benim istediğim soruya cevap olmuyor hiçbiri bir noktadan sonra tıkanıp kalıyor insan ama aşılmayacak bir konu değil eğer bu aşamalrıda geçersem arm serisi işlemciler ile yapacağım çalışmayı. tabi C dilini öğrenmeye karar verdim.

tmcone

VB yazılımında BackgroundWorker kullandın mı? Eğer kullanmadıysan, muhtemelen formun donma sorunu ortadan kalkar eklediğinde.

computerboy

Üstad BackgroundWorker'den kastınız progresbar tarzında bir işlem ilemi veri göndermemmi nasıl bir mantık uygulamam lazım kısaca özetlerseniz sevinirim.

t2

progresbar sadece göstergedir. yapılan işin % sini göstermeye yarar , BackgroundWorker  Arkaplanda çalışmayı sağlayan nesnedir. Yani programın donmaz arka planda işlerin devam eder.

computerboy

ocx nesnesimi üstad standart nesneler içerisinde bulamadım. örnekte bulamadım sizde örneği varmı ?

justice_for_all

arkadasım pic verilerin hepsini aldıktan sonramı işliyor yoksa tek tek alıp mı işliyor
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

justice_for_all

arkadasm anadım sen usbden iletişim kuruyosun bende yapmıştım boyle bi proje c ile yazdım arayüzüde c# ile yazddım bende oyle bi donma olmuyodu arkadasım
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

computerboy

#10
Tek tek aktarıyorum üstad. Mesela  (X=50,Y=10,Z=5) buna yön bilgisinide ekliyorum gönderiyorum pic işi bitirince bana ok sinyali gönderiyor ve yeni veri gidiyor. Ayrıca cevabın için teşekkür ederim. birde C ile yaptığınız kodları görmemizde sakınca varmı.

justice_for_all

ya ben su an evde diilim aksam unutmazsan koyarım aslında maximusa benziyo biraz degistirilmis hali işi bitidikten sonra benimkide deldim sinyali gönderiyo sonra arayüz bisonaki kordinatları gonderiyo...
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

computerboy

Üstteki mesajlarda backgroundworker diye bişeyden bahsetti arkadaşlar ama ben araştırdım örnek bulamadım donmayı başka bir şekilde halletmiş olsam sorunu çözmüş olurum aslında. yada daha değişik algoritma kullanmam lazım. eproma atıp denemek lazım. onada yeni baskı devre lazım oof bi sürü iş :)

justice_for_all

peki vb de delindi bilgisini ne yaparak bekliyosun
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

computerboy

çok fonksiyonlu yapmıştım ben hem pc pice hem pic pc ye veri gönderiyor mesela spindleyi yada vakumu açmak için ayrı komutlar gönderiyorum eğer z ekseni + korinat hareketini tamamlayıp sıfır konumuna gelince mesaj gönderiyorum. o şekilde yapmıştım çalışma dosyalarını aramam lazım. kodları bulurum belki.