HSERIN kullanımı hakkında

Başlatan oguztkn, 17 Mayıs 2020, 01:40:10

oguztkn

Merhabalar,

HSERIN ve HSEROUT kullanımını öğrenmeye çalışıyorum. HSEROUT kısmında sorun kalmadı çözdüm gibi ama HSERIN de gelen cevaba göre ortalık karışıyor. Mesela:

+CMGL: 36,"REC UNREAD","+901234567891","","20/05/17,01:14:38+12"
Merhaba1234

şeklinde bir cevap geldiğinde ben bunu

hserin 100,atla,[WAIT ("+CMGL:"),str gelen\70] (tabi bunda da 70 den az geldiğinde takılma yapıyor bazen)

şeklinde diziye alabiliyorum ama tüm karakterleri ayrı ayrı olarak (boşluk ve " dahil) ASCII karşılıklarını diziye atıyor doğal olarak. Bunu convert etmenin bir yolu vardır mutlaka ama ben beceremedim. Bir de işleyişin normal şekli bu mudur yoksa ben mi kulağı tersten tutuyorum acaba ?

Şimdilik HSERIN ile deniyorum sonrasında kesmesine geçeceğim. Bu kısım için bir yol gösterebilirseniz çok makbule geçer ?

Teşekkür eder koronasız günler dilerim...

ete

Keşke daha basit ifadelerle önce çalışsaydın. Her şeyden önce seri iletişim standart veri sayısı bekler daima. Bunu atlamanın yolları var ama her vericide hemde alıcıda ilaveler yapmak gerekir. Örneğin yollanan bilginin sonuna bir tane 255 eklersin alcıyada dersin ki 255 gelince almayı kes.

Heserin komutunun bir de Timeout parametresi vardır. Beklenen sürede istenen bilgi gelmez ise çık ve geri dön diyebiliyorsunuz. Genelde bu time out parametresi ile kullanırım ve kullanmak lazım. Aksi halde default beklemeler 65535 ms devreye girer ve takıldı dediğiniz şey aslında bekleme moduna girmiş olması olabilir.

HSERIN  15,ATLA,[WAIT ("XXX"),Veri,veri,....,veri]  şeklindeki kullanımda 15 ms lik süre zarfında veri gelmez ise program ATLA isimli etikete geçer. BU şekildeki geçişler iki türlü olabilir. Ya beklenen daha az veri gelmiş ve alınmıştır. Ama beklenen veri adedi daha fazla ise bekleme gerçekleşir ve 15ms sonunda geçilir, yada istenenveriler gelmemiştir 15ms sonra program veri gelmiyor diye oradan çıkar.

Ortalama 5-6 byte verinin gelmesi 1-2ms dan fazla zaman almıyor. Toplasan toplasan senin verilerinin gelme süresi 50 ms 'yi geçmez. Sen 50 parametresini verip bir dene istersen.
Sorun devam ediyor ise artır zamanı yada etmiyor ise kısaltarak denemeler yap uygun zaman parametresini bul.

Biliyorsun haberleşme byte bazında yapılıyor ve dizi kullanıyor isen her karekter bir byte olarak diziye atanıyor. Sonrasında bir döngü içinde o diziyi gerekirse açabilir kullanabilirsin.
Ne yazıkki Basic string denilen kelime şeklindeki ASCII karekter dizisini işleyemiyor. Bunun başlıca sebebi bu tür işlerin çok fazla hafıza yemesidir. Böyle işleri daha büyük işlemcilerle yapın demişler herhalde.

Ete

Powered by EzPortal