ccs c ve modbus protokolü

Başlatan cemilkendir, 27 Ağustos 2009, 23:24:16

cemilkendir

selam arkadaşlar ben modbus protokolünü kullanarak bir çalışma yapmaya uğraşıyorum ancak ccs c nin kendi kütüphanesi olan "modbus.c" dosyasında hatalar alıyorum öyleki ccs c nin kendi örneklerini bile derleyemiyorum

acaba ccs c ile daha önceden bir çalışma yapmış arkadaş bizimle bu çalışmasını paylaşabilirmi örnek olması açısından

Scylla87

ccs c bazen öyle problemler çıkarabilir. tamamen bilgisayarından kaldırıp yeniden yükle.... büyük ihtimalle düzelir...

RcALTIN

Eski dosyalarda şimdi düzeltilmiş olan hatalar var, çalışmaması ondan dolayı olabilir... Benimde başıma gelmişti, zamanında çok araştırdım ama bir çözüm bulamadım. Derken uğraşa uğraşa sonunda çalıştırdım, nasıl mı? CCS C nin son sürüm derleyecisini edinin ve onun içindeki modbus.c(drivers), ex_modbus_master.c (examples), ex_modbus_slave.c(examples) dosyalarını kendi derleyicinizin dizinine alın.(mesela yeni derleyiciyi sanal makineye kurup) Yada benim gibi direkt 4.108[kırılmışı tabiki] sürümünü indirip kurun driverlarda ki buglar konusunda kafanız rahat olsun zira yanlış hatırlamıyorsam bu sürüm ile gelen modbusla alakalı dosyalar sağlam... Hazırlanmış örnekleri özelleştirip proteus ile master-slave denemeler yaptım ve başarılı oldum şimdi bir başka projemde bilgisayar master, mcu'lar slave şeklinde c# ile (nmodbus library kullanarak) iletişim kurdum ve projeyi geliştirmeye devam ediyorum... Bir de, bu örnek dosyalarında bazı hatalar mevcut, mesela bir tanesi ex_modbus_slave.c case ifadesinde birleştirilen fonksiyonlarla ilgili: FUNC_READ_COILS ve FUNC_READ_DISCRETE_INPUT ifadeleri birleştirilmiş ve altta

if(modbus_rx.func == FUNC_READ_COILS)
                     modbus_read_discrete_input_rsp(MODBUS_MY_ADDRESS, 0x01, &data);
                  else
                     modbus_read_discrete_input_rsp(MODBUS_MY_ADDRESS, 0x01, &data);


yazılmış, burada mastera her durumda FUNC_READ_DISCRETE_INPUT fonksiyonu için cevap veriliyor oysa doğrusu
if(modbus_rx.func == FUNC_READ_COILS)
                     modbus_read_coils_rsp(MODBUS_MY_ADDRESS, 0x01, &data);
                  else
                     modbus_read_discrete_input_rsp(MODBUS_MY_ADDRESS, 0x01, &data);

şeklinde olmalıydı, bir diğer hata tam emin olmamakla birlikte FUNC_WRITE_MULTIPLE_REGISTERS bloğunda, zira holding_regs buffer'a yazılan bilgiler hatalı oluyor henüz üzerinde çalışıyorum...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

Murat Mert

S.A.
Sn. RcALTIN Bununla ilgi yaptığınız çalışmalardan birdosyayı bizimle paylaşırmısınız?
mert07

RcALTIN

#4
Alıntı yapılan: mert07 - 25 Ekim 2010, 08:18:36
S.A.
Sn. RcALTIN Bununla ilgi yaptığınız çalışmalardan birdosyayı bizimle paylaşırmısınız?

Üzerindeki çalışmamı bitirince basitçe :PC Master(C# arayüz) <=>RS232<=> MCU Slave(s): şeklindeki iletişimi gerçekleştiren bir örnek paylaşmayı düşünüyorum; RS232 dedim çünkü nmodbus kütüphanelerini kullandığım için seriportun RTS pinine istediğim gibi müdehale edemediğimden direkt olarak seriporttan RS485 kullanamıyorum ancak çözümü var, forumdan bknz: "USB RS485 Çevirici" konusu, buradaki devrede FT232BM bizi RS485 Transceiver'ın RE-DE kontrolü zahmetinden kurtarıyor, seri port gibi eski bir arayüzü her bilgisayarda bulunan usb üzerinden kullanabilme imkanı da cabası... Yukarıda da bahsettiğim MCU Master <=>RS232/485<=> MCU Slave(s) örneği ccs içindeki örneklerde açıklanmış ve dediğim gibi çalışır durumda, onunla ilgili bir paylaşıma gerek görmüyorum. Bir de belirtmeliyim ki bu paylaşımı yapmak için biraz zamana ihtiyacım var çünkü hala öğrenim gördüğümden şu sıralar zaman ayırma problemlerim var(en azından halihazırdaki sorunları çözmek için).
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !