2016-03-21 14 views
0

Matlab'de seri port iletişim sırasında Kayıt süresi: dizüstü # AçıkBen <code>fopen</code>, <code>fwrite</code> ve <code>fscanf</code> Aşağıdaki kodu kullanarak iki dizüstü bilgisayarlar arasındaki seri port iletişim hattı açmaya komutları Matlab kullanıyorum

:

laptop # Açık
portID='/dev/tty.USA28Z145P2.2' 
    s=serial(portID) 
    fopen(s) 
    fwrite(s,'67') 

:

s=serial('COM3') 
    fopen(s) 
    out=fscanf(s) 

Çalıştığım komut dizisinden, bazen yazım 67 ve bazen de 83. Out bunların hepsini kaydedebiliyor.

Her fscanf'un gerçekleştiği süreyi tam olarak kaydetmek için bir yol bulmaya çalışıyorum, bu mümkün mü? Diğer veriler toplanıyor ve veri alımı gerçekleşirken bu komutlar çalışıyor ve her bir fscanf'un zamanını kaydetmem için bir yol bulmalıyım, böylece diğer verilerimle senkronize edebilirim.

Örneğin; Eğer COM3 portu '67'yi tararsa, bunun tam olarak ne zaman olduğunu bilmem gerekir çünkü veri toplama için' 67 '12 saniyelik bir dönemin başlangıcını gösterir.

Bunu nasıl yapacağını bilen var mı? Herhangi bir öneri çok takdir edilecektir! Yazılım yığını (MATLAB + işletim sistemi) gerçek zamanlı yetenekleri nedeniyle

sayesinde

Maheen

+0

o ana kadar denedim ne olacak? Neden 'fscanf'' clock', 'now', vb. – Suever

+0

Ayrıca, MATLAB'ın verileri birden çok kaynaktan gerçek zamanlı olarak almasını mı bekliyorsunuz yoksa tüm farklı verileri alan farklı sistemler mi var? – Suever

+0

@Suever matlab tek bir kaynaktan veri alıyor. Aynı zamanda bir seri port üzerinden bağlı bir spektrometre. Komutumda saat kullanmayı denedim, ancak bana tarih ve saati vb. Verir, ancak önceki tüm satın alma işlemlerinin üzerine yazar. Ben onu şöyle kullanırım: 'out = fscanf (s); c = saat 've sonra ne olduğunu ve c olduğunu kontrol edin. tüm değerleri başlangıçtan başlatır ama saat –

cevap

1

Sen, Ben tam çağırır bir zamanlama hassasiyeti elde asla.

Tipik bir saat hassasiyetine sahip olmanın bir yolunu soruyorsanız, bu genellikle 0.1s hata penceresinde, seri nesnesinin BytesAvailableFcn geri çağrısını kullanın.

yapılandırma myCallback sen bayt mevcut olduğunda hep denir uygulamak zorunda bir fonksiyondur

s=serial('COM3') 
[email protected] 
s.BytesAvailableFcnCount=1 
s.BytesAvailableFcnMode='byte' 
fopen(s) 

olurdu.

function myCallback(obj,event) 
    disp(event.Data.Time); %print time data is received 
    %obj is your serial object, use existing code to read. 
end 

Further details in the documentation

+0

Cevabınız için teşekkürler. Bu işlevi betiğimde nasıl kullanacağımı anlamaya çalışıyorum. Basitçe söylemek gerekirse, her bir "67" veya "83" inin tarandığı zamanı kaydetmek istiyorum çünkü bir zaman aralığının başlangıcını belirtir. –

+0

@MaheenSiddiqui: Bazı örnek kod ekledim. – Daniel

+0

Bunun için teşekkürler, bu belgeler gibi çok yararlı! Yarın tekrar herşeyi kurduğumda bir kez vereceğim. –

İlgili konular