Orhan 1 Posted June 8 Operandlar bölümünde bir değişken tanımladığımızda bunu c alt programında bir if bloğu içinde kullanamamamız bir bug mı? şu konudaki mesele olabilir diye yeni bir proje oluşturdum. Operandlar bölümünde sadece bit türünde if_param ve if_ici ve int türünde ornek_int değişkenleri oluşturdum. if_ici ve ornek_int değişkenlerini blok dışında kullandığımda sorun yok. ancak if(if_param) { ornek_int; if_ici; } gibi bir kullanımda Quote ladder.c:1525: error: `if_ici' undeclared (first use in this function) ladder.c:1525: error: (Each undeclared identifier is reported only once ladder.c:1525: error: for each function it appears in.) hatası alıyorum. extern tanımı da işe yaramıyor. burada başka bir ayar, bildirim vs. mi yapılması gerekiyor? Quote Share this post Link to post Share on other sites
Hansem 9 Posted June 8 Operantlar da tanımladığınız değişkenleri C alt programında istediğiniz yerlerde kullanabilirsiniz. Paylaştığınız kodun amacı nedir? "if_param" true olunca değişkenler ne olacak? Quote Share this post Link to post Share on other sites
Orhan 1 Posted June 8 Amacım olan kod bu değil. bu sadece bir test. siz isterseniz şunu da kullanabilirsiniz: if(bit_var_1 == 1) { bit_var_2 = 1; int_var = 123; } /* ladder.c:1525: error: `bit_var_2' undeclared (first use in this function) */ /* ladder.c:1525: error: (Each undeclared identifier is reported only once */ /* ladder.c:1525: error: for each function it appears in.) */ /* ladder.c:1526: error: `int_var' undeclared (first use in this function) */ mesele blok içindeki değişkenlerin undeclared hatası vermesi. sanki bir scope problemi var. Quote Share this post Link to post Share on other sites
Hanifi 31 Posted June 8 Yeni proje açtığınızda benzer hata oluyor mu? Denemelerinizi offline mı deniyorsunuz? Lütfen hata aldığınız programı ekleyin GMTSuite versiyonunuz kaç gözüküyor? Belirttiğiniz kod çalışıyor Quote Share this post Link to post Share on other sites
Orhan 1 Posted June 8 Hem eski projede hem de yeni tamamen test amaçlı sıfırdan oluşturduğum projede aynı hatayı alıyorum. Hem offline hem de PLC'ye yüklemeye çalışırken hata veriyor. Zaten sorun compile time hatası. Derleme yapılmadığı için PLC'ye yüklenmiyor. Hata aldığım program ektedir. GMTSuite versiyonu 0.9.8.6 Çalıştırdığınız kodu ekler misiniz. undeclared_hatasi.rar Quote Share this post Link to post Share on other sites
DEMİR 10 Posted June 8 if (bit_var_1 == 1){bit_var_2=0;int_var=123;} Kodunuzu bu şekilde yazdığınızda çalışıyor. Kolay gelsin... 1 Quote Share this post Link to post Share on other sites
Orhan 1 Posted June 9 Teşekkür ederim. Komik olan aslında tab karakterinin bu hataya yol açması.Yüksek ihtimalle kodların tokenization sürecinde bug var. Mesela lojik değil (!) de derleme hatasına yol açıyor. Fakat değişkenleri parantez içine alınca sorun halloldu gibi duruyor ama umarım kararsız davranış göstermez. Şurada belirttiğim ve cevap alamadığım sorunda da (ladder ile ilgili) böyle tuhaf bir problem olduğunu düşünüyorum. /* Sorunsuz Çalışan */ if(bit_var_1 == 1) { bit_var_2 = 1; int_var = 123; } /* Yada */ if(bit_var_1 == 1) { (bit_var_2) = 1; (int_var) = 123; } /* Derleme Hatası veren */ if(bit_var_1 == 1) { bit_var_2 = 1; int_var = 123; } 1 Quote Share this post Link to post Share on other sites