CAN (MCP2551) ve RS485 (MAX485) aynı hattan haberleşme

Başlatan salihonur, 10 Temmuz 2013, 00:28:28

salihonur

Arkadaşlar,

Projeyi CANBUS'a göre hazırlamaya başladık. Normalde bizim için en ideal canbus. Ancak hesaba katmadığımız nokta çok nadir de olsa string veri göndermemiz gerekiyor. (max 20 karakter) Bu noktada CAN yetersiz kalıyor.

Biz de şöyle bir yapı düşündük. MC2551 ile MAX485 aynı hatta bağlı olsun. String veya uzun veri gönderimi gereken noktalarda CAN'den tüm cihazlara özel bir komut gönderip CAN'den veri akışını geçici olarak durdukduktan sonra kendi RS485 veri paketlerimizi aynı hat üzerinden hedefe gönderelim. İşlem bittikten sonra da konuşan cihaz tekrar CAN olarak tüm cihazlara "çalışabilirsiniz" komutu göndersin.

Bu yapı pratikte mümkün müdür? Uzun veriler için neler yapabiliriz?

rf

CAN bus üzerinden string gönderme işlemini kolayca yapabilirsiniz.

Her 8li paketin  (ör:)2 byteını paketin tipine ve string ifadenin kaçıncı bytelarının olduğuna ayırırsanız.
Arka arkaya bir çok paket gönderebilirsiniz.

Yanlış hatırlamıyorsam J1939 da multi - packet deniliyordu.   

İyi çalışmalar.

Edit:
http://www.cancapture.com/knowledgebase/20-ecomknowledgebase/54-j1939-multi-packet-bam-transmit-script-example.html
KOSGEB Girişimcilik Desteği Bilgi ve Paylaşım Platformu http://www.girisimcilikdestegi.com/

ilhan_mkp

abiler bu can haberleşme nasıl oluyor yani modbusta mesala mesaj çerçevesinde başlangıç- komut- veri- crc diye bir yöntem var canda bu nasıl oluyor.
asıl sorunum 1master cihazdan 5 slave cihaza görevler göndericem işi biten master cihaza görev tamam yanıtı versin istiyorum ama modbusta master istek yapmadan slave cevap veremiyor diye biliyorum.

frederic

Evet modbus'da master-slave mantığı olduğu için master-master haberleşmesi yapılamıyor.

ilhan_mkp


rf

MODBUS'da
Master düzenli aralıklarla görevi bitirdin mi diye sorarak master-slave mantığı bozulmadan da yapılabilir.

CANBUS'da
Her modul istediği zaman mesaj gönderebilir. 8byte sınırı vardır. Başla,dur,CRC gibi dertleri yoktur donanımsal olarak bu kısımlar halledilir.Sen sadece 8 byte alır 8byte gönderirsin. uC daCANBUS donanımı gerektirir

Sonuç olarak her ikiside uygun.
Değerlendirmek gerek.

İyi çalışmalar dilerim.
KOSGEB Girişimcilik Desteği Bilgi ve Paylaşım Platformu http://www.girisimcilikdestegi.com/

Tagli

Arkadaşlar, herkes CAN'i ham olarak mı kullanıyor? CANopen veya DeviceNet gibi üst katmanlardaki kütüphaneleri kullanan kimse yok mu?
Gökçe Tağlıoğlu

ilhan_mkp

benim istedigimde herkez istedigi zaman veri göndersin peki hattin dolu olmasi vs gibi durumlar canda nasil kontrol ediliyor 8byte benim icin yeter artar

salihonur

Öncelikle RF hocam, yanıtınız için çok teşekkür ederim. Yanıtınızı o gün incelemiştim, cevap yazdım diye hatırlıyorum ama unutmuşum sanırım.

CAN'de arkadaşın dediği gibi doğrudan 8 byte veri basıyorsunuz. Adres belirtmiyorsunuz. Her cihaz ortaya konuşuyor, üstüne alınan varsa işlem yapıyor. Dolayısıyla teorik olarak sınırsız cihaz bağlayabilirsiniz.

Ben 8 byte'ın ilk 2 byte'ını sanal adres olarak kullanıyorum. 8 byte için kendi yazdığım paket yapısı ile gerekli tüm işlemlerimi yapıyorum.

Uzun mesaj gönderiminde de şöyle bir yol izledim.

Uzun mesaj göndereceğimi bildiren bir paket gönderiyorum. Bu pakette uzun mesajın başlangıç bilgisi, kaç paket veri gönderileceği, mesajın hedefi ve rastgele üretilmiş mesaj kimliği bilgileri var.
Göndermek istediğim dataları da kendi paket yapıma uygun 3 byte data, 1 byte mesaj kimliği, 2 byte hedef adres, 1 byte paket nosu, 1byte da komut.
Kapanış olarak da mesaj kimliği, uzun mesaja ait crc (can den farklı. Arada başka bir cihaz veri gönderdiğinde veriyi doğrulamak için), hedef adresi ve bitiş komutu bulunuyor.

CAN'in bir güzel özelliği de kendi donanım yapısı sayesinde haberleşme önceliğini kendisi belirliyor ve çakışmaları önlüyor. Bunu da bir taraftan veri gönderirken bir taraftan hattı dinleyerek sağlıyor.

Diyelim ki 2 cihaz şöyle veri göndermek istesin 1101 ve 1111, ikisi de aynı anda veri göndermeye başlar. Hattı da dinlediklerinden logic 0 olduğu anda logic 1 göndermek isteyen devreden çıkar ve bir sonraki haberleşme boşluğunu bekler.


Alıntı yapılan: rf - 24 Temmuz 2013, 08:26:14
MODBUS'da
Master düzenli aralıklarla görevi bitirdin mi diye sorarak master-slave mantığı bozulmadan da yapılabilir.

CANBUS'da
Her modul istediği zaman mesaj gönderebilir. 8byte sınırı vardır. Başla,dur,CRC gibi dertleri yoktur donanımsal olarak bu kısımlar halledilir.Sen sadece 8 byte alır 8byte gönderirsin. uC daCANBUS donanımı gerektirir

Sonuç olarak her ikiside uygun.
Değerlendirmek gerek.

İyi çalışmalar dilerim.