3 Eksenli bir sistemde bir yazıcı çalıştırmak

Aslında ne yapmak istiyorsanız onu yazın, örnek vermeyin, sizin verdiğiniz her örnek karışıklığa sebep olur

"ama benim istediğim yazıları nasıl gönderecek?"
RS485 ile

"Sonuçta bu yazılar Başla/Bitir komutları kadar basitçe iletilemez." Demişsiniz ama o kadar zor değil.

İşlem şöyle yapılır:
1.Z ekseni verdiğiniz konuma geldi (önceki detayları yazmıyorum)
2. G-Kod da sizin belirlediğiniz seviyeye kadar indi.
3. Bu seviyede sizin yazıcınıza "ben indim, hazırım" sinyali gönderdi.
4. Sizin yazıcınız yazdı veya yazıp yapıştırdı, (işte bu aşamalarda tam ne yapacağınızı yazmanız gerekir)
5 Yazma işlemi bitince CNC girişlerinden birini aktif yaptı, yanı CNC ye ""yazma işim bitti" dedi
6. Z ekseni yukarı kalktı vs,,,,,

Yapılacak "sürekli tekrarlanan"işler için Makro yazılabilir, bu G-kodu basitleştirir ve birçok G-kod düzenleyiciler ile kullanılabilir
 
Öncelikle Mehmet bey çok teşekkür ederim,

Tam olarak 3. aşamada takılıyorum, "Ben indim, hazırım" komutu gönderdikten sonra yazıcıya ne yazması gerektiğinide söyleyecek. Bunu RS485 ile yazıcıma nasıl iletebilirim?. Buna uygun bir CNC kartı önerebilirmisiniz?.
 
RS485 sizin yazıcı girişinde olacak, buraya bilgisayarınızdan "yazılacak" datayı gödereceksiniz

Yazıcınız "Seri Porttan Bağlı Yazıcılar" gibi çalışcak .
Yani CNC ile alakası sadece, 1 giriş (CNC nin çıkışından gelen) "Yaz" komutu için,
1 çıkış (CNC nin girişine) "Yazdım" bilgisini CNC ye göndermek için.

Tabi 1 den fazla giriş / çıkış olabilir.
 
Bu söyledikleriniz üzerine çalışmaya başladım şimdi.
Burada benim anladığım kadarıyla aşşağıdaki gibi bir bağlantı olacak ;

1 - Bu sistemin tamamını bilgisayardan Mach3 tarzı bir program üzerindenmi yöneteceğim?.

2 - "Yazdım" ve "Yaz" komutları için CNC kartı ve Yazıcı arsında ayrı bir bağlantı yapmam gerekir mi? Yoksa bilgisayar üzerinden iletişim kurabilirmiyim?

3 - Böyle bir projenin örneği var mı video veya herhangi bir kaynak?.
 
1. Evet
2. İkisi de olur, sizin yazıcı özelliklerine bağlı.
3 Görmedim. ama kolaylıkla yapılabilir. Yazıcınızı önce halletmeniz gerekiyor.
 
1. Evet
2. İkisi de olur, sizin yazıcı özelliklerine bağlı.
3 Görmedim. ama kolaylıkla yapılabilir. Yazıcınızı önce halletmeniz gerekiyor.
2 - Yazıcı kendi tasarımım STM32 ile programladım burada istediğim değişiklikleri yapabilirim. Eğer ikiside olursa o zaman bilgisayar üzerinden haberleşmek daha mantıklı olur zannederim, çünkü CNCden Yazıcıya ayrı bir Output ve Input vermek gerekecek halihazırda bir bağlantı varken oradan halledebilirim herhalde.
3 - Yazıcımla bilgisayar üzerinden seri port ile kolayca haberleşirim zaten hep yaptığımız şey.

Burada bu sistemin tamamını birbirleri ile nasıl entegre edebilirim bir tavsiyeniz var mı bu konuda?

Soru olarak;
1 - G-code meselesini nasıl yapacağımı bilmiyorum,
Ben bir CAM programında etiketlerin yerlerini ve o yerlere ne yazılacağını belirtebilirim, yerleri G-Code olarak çekmek kolay ama ne yazılacağını G-code olarak nasıl alacağım?
 
Tamam , şöyle bir yol izlenebilir:
Eğer prosesiniz yavaş ise, bu giriş/çıkış meselesi "bekleme süresi" ile çözülebilir.
Yani Z ekseni iner, yazma işlemi bitene kadar, (tahmini max. süre bekler).
Ama proses hızlı olmayı gerektiriyorsa giriş/çıkışlı sistem doğrudur.
1. G-kod için bir çok program var.
2. CNC ne yazılacağına karışmayacak. Bilgsayar bu datayı yazıcıya gönderecek.
Ancak siz detaylı yazmadığınız sürece, çok fazla kombinasyonu düşünmek zaman kaybı olur. Mesela farklı etiketlerin doğru yere yazılması, bunlara numara verilmesi vs ..
 
Yani sistem biraz hızlı olması gerekiyor, yazıcı kendi içersinde bir sistem biz yazıcıya gerekli olan yazma komutu gönderdiğimizde(RS485 ile)yazıcı bunu yazar ve entegre bir kol ile yapıştırır bu yüzden z eksenine iş yaptırmayı çok düşünmüyorum. Videolarını paylaşabilirim.

Mehmet bey siz belliki bu konuda çok tecrübelisiniz, bilmiyorum bunu sormam platform ve sizin açınızdan ne kadar uygun ama, bize danışmanlık verirseniz çok memnun oluruz.
 
Teklifiniz için teşekkürler, ancak kendi işimi bile zor yetiştiriyorum, onun ,çin sizin işnizle profesyonel olarak ilgilenemem, ancak elimden geleni yapabilirim.

Ticari kaygılarınız varsa bazı mesajları özelden gönderebilirsiniz ancak bunların sayısını 3 ü geçmeyecek şekilde ayarlamanızı rica ederim. "Forum" herkese açık olmalıdır, değişik önerilerden güzel şeyler çıkabilir (tabi çok kötü öneriler de...)

Daha önce de bahsettiğimn gibi, önce prosesin ne olduğunu, hızını , vs bilmem gerekir. Mesela etiket çeşidi kaç olacak, bu, etiketlerin lokasyonunda bir hata olmamsı için gerekli, her etikette başka şeyler yazacaksa bunu bir "feedback" ile kontrol etmek, "mod-bus" ile onaylamak gerekir.
İşte, "işi" karmaşıklaştıran böyle şeylerdir.
Ancak "o da olsun bu da olsun" gibi bir yaklaşım varsa derdiniz büyük.
 
G kodları içerisindeki Tool(seçili kalem) numarasını yazılara atayabilirsiniz.
Mesela 1 nolu tool gördümü ahmet yaz,2 numaralı tool gördümü mehmet yaz der gibi.
Stm 32 içerisinde G kodlarını kendiniz decode ederek neler yapması gerektigini atayabilirsiniz.
Hazır bir cnc kontrol kartı ile bu tarz degişiklikleri yapmanız daha zor.
Yukarda linkini verdigim makinada G kodları flasdan okunarak direk olarak herhangibir cnc kontrol kartı olmadan stm32 kart ile gerekli kordinata gitmekte,tool nosu ise hangi malzemeyi çakacagını belirlemekte.
Bende üç adet degişik malzeme seçenegi vardı,siz bu sayıyı artıracaksınız.Her bir tool' a bir yazı atayacaksınız.
Daha öncede belirttigim gibi bu tarz projeyi ilave pc vs kullanacagınıza direk olarak raspberry pi ile yapın;hem gerekli kordinatlara gitme hemde yazı yazdırma işlerini çok daha kolay yaparsınız.
Fikir vermesi açısından stm32 ile yaptıgım projenin bir kısmı:
Kod:
void G_ISLEM() {

    islem = buffer[i++] - 48;

    if (buffer != ' ' && buffer != '\r') {

        islem = (islem * 10) + (buffer[i++] - 48);

    }

    if (islem == 1)

        G1();     //G1 KORDINATA GIT

    if(islem==4)  G4();     //G04 BEKLEME YAP

    if (islem == 54)

        G54();    //G54 BIRINCI IS MERKEZI

    if (islem == 55)

        G55();    //G55 IKINCI IS MERKEZI

    if (islem == 56)

        G56();    //G56 UCUNCU IS MERKEZI

    if (islem == 58)

        G58();    //G58 HOME SWICE GIT

}

//*********************************************************************

void M2() {    //IS SONU;

    HAL_GPIO_WritePin(M90_M91_GPIO_Port, M90_M91_Pin, GPIO_PIN_RESET);

    HAL_GPIO_WritePin(M92_M93_GPIO_Port, M92_M93_Pin, GPIO_PIN_RESET);

    HAL_GPIO_WritePin(M94_M95_GPIO_Port, M94_M95_Pin, GPIO_PIN_RESET);

    if (sayfano == 1) {

        if (FLAG.bits.G54 == 1)

            g54_stop_index = i;

        if (FLAG.bits.G55 == 1)

            g55_stop_index = i;

        if (FLAG.bits.G56 == 1)

            g56_stop_index = i;

    }

    FLAG.bits.btn_calis = 0;

    FLAG.bits.is_bitti = 1;

    EKRANI_BTN(6);

}

void M8() {    //SOGUTMA SIVISI AC;



    HAL_GPIO_WritePin(M8_M9_GPIO_Port, M8_M9_Pin, GPIO_PIN_SET);

}

void M9() {    //SOGUTMA SIVISI KAPA;



    HAL_GPIO_WritePin(M8_M9_GPIO_Port, M8_M9_Pin, GPIO_PIN_RESET);

}

void M90() {    //BIRINCIKAFA_ASAGI;

    FLAG.bits.basma_tamamlandi=0;

    if(FLAG.bits.btn_calis==0){EKRANA_CIZ(1);return;}

    Count_Systick=0;

    if(HAL_GPIO_ReadPin(KAFA1_SENS_Y_GPIO_Port, KAFA1_SENS_Y_Pin)== 1) //yukarda degilse hata

    {HATAKODU=1;return;}



    while (HAL_GPIO_ReadPin(MALZEME_SENS1_GPIO_Port, MALZEME_SENS1_Pin) == 0) { //malzeme yoksa 5 sn dolmasını bekle

        if (Count_Systick >= 5000 ) {HATAKODU = 2; break;}

    }

    if(HATAKODU !=0) return;



    Count_Systick=0;

    HAL_GPIO_WritePin(M90_M91_GPIO_Port, M90_M91_Pin, GPIO_PIN_SET);

    EKRANA_CIZ(3);

    islenecek_index=i;

    while(HAL_GPIO_ReadPin(KAFA1_SENS_A_GPIO_Port, KAFA1_SENS_A_Pin)== 1){ //5 sn asagı inmesini bekle

        if(Count_Systick >= 5000 ){HATAKODU=3;break;}

    }

}

void M91() {    //BIRINCIKAFA_YUKARI;

    if(FLAG.bits.btn_calis==0) return;

    HAL_GPIO_WritePin(M90_M91_GPIO_Port, M90_M91_Pin, GPIO_PIN_RESET);

    Count_Systick=0;

    while(HAL_GPIO_ReadPin(KAFA1_SENS_Y_GPIO_Port, KAFA1_SENS_Y_Pin)== 1){ //5 sn yukarı cıkmasını bekle

            if(Count_Systick >= 5000 ){HATAKODU=4;break;}

        }

    Count_Systick=0;

    if(FLAG.bits.btn_calis==1)HAL_GPIO_WritePin(TISLAMA1_GPIO_Port, TISLAMA1_Pin, 1);

    FLAG.bits.basma_tamamlandi=1;

    islenecek_index=i;

}

void M92() {    //IKINCIKAFA_ASAGI;

    FLAG.bits.basma_tamamlandi=0;

    if(FLAG.bits.btn_calis==0){EKRANA_CIZ(1);return;}

    Count_Systick=0;

    if(HAL_GPIO_ReadPin(KAFA2_SENS_Y_GPIO_Port, KAFA2_SENS_Y_Pin)== 1) //yukarda degilse hata

    {HATAKODU=5;return;}



    while (HAL_GPIO_ReadPin(MALZEME_SENS2_GPIO_Port, MALZEME_SENS2_Pin) == 0) { //malzeme yoksa 5 sn dolmasını bekle

        if (Count_Systick >= 5000 ) {HATAKODU = 6; break;}

    }

    if(HATAKODU !=0) return;



    Count_Systick=0;

    HAL_GPIO_WritePin(M92_M93_GPIO_Port, M92_M93_Pin, GPIO_PIN_SET);

    EKRANA_CIZ(3);



    islenecek_index=i;

    while(HAL_GPIO_ReadPin(KAFA2_SENS_A_GPIO_Port, KAFA2_SENS_A_Pin)== 1){ //5 sn asagı inmesini bekle

        if(Count_Systick >= 5000 ){HATAKODU=7;break;}

    }

}

void M93() {    //IKINCIKAFA_YUKARI;

    if(FLAG.bits.btn_calis==0) return;

    HAL_GPIO_WritePin(M92_M93_GPIO_Port, M92_M93_Pin, GPIO_PIN_RESET);

    Count_Systick=0;

    while(HAL_GPIO_ReadPin(KAFA2_SENS_Y_GPIO_Port, KAFA2_SENS_Y_Pin)== 1){ //5 sn yukarı cıkmasını bekle

            if(Count_Systick >= 5000 ){HATAKODU=8;break;}

        }

    Count_Systick=0;

    if(FLAG.bits.btn_calis==1)HAL_GPIO_WritePin(TISLAMA2_GPIO_Port, TISLAMA2_Pin, 1);

    FLAG.bits.basma_tamamlandi=1;

    islenecek_index=i;

}

void M94() {    //UCUNCUKAFA_ASAGI;

    FLAG.bits.basma_tamamlandi=0;

    if(FLAG.bits.btn_calis==0){EKRANA_CIZ(1);return;}

    Count_Systick=0;

    if(HAL_GPIO_ReadPin(KAFA3_SENS_Y_GPIO_Port, KAFA3_SENS_Y_Pin)== 1) //yukarda degilse hata

    {HATAKODU=9;return;}



    while (HAL_GPIO_ReadPin(MALZEME_SENS3_GPIO_Port, MALZEME_SENS3_Pin) == 0) { //malzeme yoksa 5 sn dolmasını bekle

        if (Count_Systick >= 5000 ) {HATAKODU = 10; break;}

    }

    if(HATAKODU !=0) return;



    Count_Systick=0;

    HAL_GPIO_WritePin(M94_M95_GPIO_Port, M94_M95_Pin, GPIO_PIN_SET);

    EKRANA_CIZ(3);

    islenecek_index=i;

    while(HAL_GPIO_ReadPin(KAFA3_SENS_A_GPIO_Port, KAFA3_SENS_A_Pin)== 1){ //5 sn asagı inmesini bekle

        if(Count_Systick >= 5000 ){HATAKODU=11;break;}

    }

}

void M95() {    //UCUNCUKAFA_YUKARI;

    if(FLAG.bits.btn_calis==0) return;

    HAL_GPIO_WritePin(M94_M95_GPIO_Port, M94_M95_Pin, GPIO_PIN_RESET);

    Count_Systick=0;

    while(HAL_GPIO_ReadPin(KAFA3_SENS_Y_GPIO_Port, KAFA3_SENS_Y_Pin)== 1){ //5 sn yukarı cıkmasını bekle

            if(Count_Systick >= 5000 ){HATAKODU=12;break;}

        }

    Count_Systick=0;

    if(FLAG.bits.btn_calis==1)HAL_GPIO_WritePin(TISLAMA3_GPIO_Port, TISLAMA3_Pin, 1);

    FLAG.bits.basma_tamamlandi=1;

    islenecek_index=i;

}
 
Moderatör tarafında düzenlendi:
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…