MATLAB

2012-02-21 5 views
5

में जावा इंटरफ़ेस को कार्यान्वित करना मैं एक MATLAB GUI लिखने की कोशिश कर रहा हूं जो XBee-API इंटरफ़ेस का उपयोग करता है ताकि एक Arduino बोर्ड पर XBee वायरलेस रेडियो से बात की जा सके। जीयूआई ज्यादातर डेटा संग्रह करता है और आने वाले पैकेट का विश्लेषण करता है।MATLAB

मैं addPacketListener को the Developer's Guide (see section "Receiving Packets") में परिभाषित करने के लिए पैकेट की प्रक्रिया के लिए प्रतीक्षा करना चाहता हूं। जावा में, यह यह कैसे किया जा होता है:

xbee.addPacketListener(new PacketListener() { 
    public void processResponse(XBeeResponse response) { 
     // handle the response 
    } 
}); 

MATLAB में, मैं एक addlistener() करते हैं और मेरी प्रसंस्करण करने के लिए अपने कॉलबैक स्थापित करेगा।

मैं बहुत बिल्कुल जावा के बारे में पता नहीं है, इसलिए यदि यह एक ला MATLAB processResponse कोड स्थापित करने के लिए संभव है मैं सोच रहा था:

function processResponse 
    #% do response here 
end 

>> xbee.addPacketListener(@processResponse) 

मैं: मैं इस प्रकार की तरह कुछ कर सकते हैं यकीन नहीं है कि यह पूरी तरह से समझ में आया है; मूल रूप से जो मैं पूरा करने की कोशिश कर रहा हूं वह है कि मेरे एक्सबीआई के लिए नए पैकेट उपलब्ध होने के बाद कॉलबैक निष्पादित करना है (जिसे जावा में addPacketListener द्वारा प्रबंधित किया जाता है)।

+0

मैं जो भी पूछ रहा हूं उसे पूरी तरह से समझ नहीं रहा हूं। जब आप ऊपर दिखाए गए ऐडपैकेट लिस्टनर विधि को कॉल करते हैं, तो आप एक नई ऑब्जेक्ट (एक अनाम आंतरिक कक्षा) में गुजरते हैं, जिनकी प्रक्रिया पैकेट आने पर रीस्पॉन्स विधि को बुलाया जाएगा। यह कॉलबैक है - बस स्वयं को "प्रतिक्रिया को संभालें" भाग भरें। – cutchin

+0

@ कच्छिन तो मैं एक अलग MATLAB क्लास लिख सकता हूं जो एक विधि 'प्रक्रिया रिस्पॉन्स' निर्यात करता है और उस वर्ग का एक उदाहरण 'addPacketListener' पर पास करता है? मैंने एक विधि 'प्रक्रिया रिस्पॉन्स' के साथ MATLAB ऑब्जेक्ट में गुजरने का प्रयास किया और निम्न त्रुटि प्राप्त की: 'XB.addPacketListener (testclass) कक्षा 'com.rapplogic.xbee.api.XBee''' के लिए मिलान किए गए हस्ताक्षर के साथ कोई विधि 'addPacketListener' नहीं है –

+0

मैं MATLAB एकीकरण में एक विशेषज्ञ नहीं हूं, लेकिन मेरा मानना ​​है कि आप इस पीछे के बारे में जा रहे हैं। एक्सबी इंटरफेस को फायर करने और पहले पैकेट प्राप्त करने के लिए अपना जावा कोड लिखें। सुनिश्चित करें कि यह कमांड लाइन से काम करता है और आप आने वाले पैकेट देख सकते हैं। वहां से, एक लाइब्रेरी (ए .jar फ़ाइल) लिखें जिसे आप मैटलिब में आयात करेंगे, और इसे वर्णित अनुसार अपनी कक्षा से डेटा पुनर्प्राप्त करें [http://www.mathworks.com/help/techdoc/matlab_external/f6671 .html)। – cutchin

उत्तर

3

मुझे बताएं कि क्या मैं गलत हूं, लेकिन ऐसा लगता है कि आप मूल रूप से XBee की कॉल को PacketListener.processResponse(XBeeResponse x) पर रोकना चाहते हैं और MATLAB को आने वाली XBeeResponse ऑब्जेक्ट की सामग्री को संसाधित करना है। मैं MATLAB गुरु का अधिक नहीं हूं, लेकिन क्या MATLAB कोड का उपयोग कर जावा क्लास को कार्यान्वित करना भी संभव है, और उसके बाद उस कक्षा को जावा पर वापस भेज दें? मेरा अनुमान शायद नहीं है, लेकिन मैं गलत हो सकता था।

मुझे लगता है कि आप जिस मुद्दे से निपट रहे हैं, वह इस तथ्य से उपजी है कि जावा ऑब्जेक्ट्स पर MATLAB कॉल करना आसान है, लेकिन दूसरी तरफ नहीं। मैं जो करता हूं वह जावा कोड का उपयोग करके PacketListener का वास्तव में सरल कार्यान्वयन करता है, और फिर अपने जावा पैकेट लिस्टनर कार्यान्वयन से MATLAB पर फ़ंक्शन कॉल करने के लिए matlabcontrol जैसे किसी तृतीय-पक्ष लाइब्रेरी का उपयोग करें।

मुझे इस समस्या को एक बड़े सॉफ्टवेयर प्रोजेक्ट पर सौदा करना पड़ा जिसके लिए मैटल में लिखे गए बैक-एंड कोड पर कॉल करने के लिए जावा में लिखा गया एक जीयूआई आवश्यक था, इसलिए मैं matlabcontrol की क्षमताओं के लिए प्रतिबद्ध हो सकता हूं। जावा के भीतर से MATLAB को नियंत्रित करते समय एक और महत्वपूर्ण संसाधन, क्या आप इस मार्ग पर जाना चाहिए, undocumentedmatlab.com है।

संपादित

एक अन्य बात की जावा तरफ सूत्रण है सावधान रहने की। आपके पास मैटलैब कॉल को एक साथ बनाने वाले जावा थ्रेड की संख्या हो सकती है, लेकिन मैटलैब जावा से सभी कॉल "अनुक्रमिक" करेगा। मान लीजिए कि जावा को मैटलैब फ़ंक्शन "एफ 1" और "एफ 2" कॉल करने की आवश्यकता है। आपने दो जावा थ्रेड सेट किए हैं और प्रत्येक एक साथ या तो f1 या f2 को कॉल करता है। मैटलैब दूसरे फंक्शन कॉल शुरू करने से पहले दूसरे को खत्म करने के लिए मजबूर करेगा, और यह पूरी तरह से अनिश्चित है जिसे वास्तव में पहले कहा जाएगा।

कारण यह है कि मैं यह कह रहा हूं, जो भी जावा थ्रेड processResponse(XBeeResponse x) फ़ंक्शन को अवरुद्ध कर देगा यदि यह MatLab को कॉल करता है और MatLab पहले से कुछ और करने में व्यस्त है। आपके पैकेट लिस्टनर को आने वाले XBeeResponse उदाहरणों को कैश करना सबसे अच्छा हो सकता है ताकि XBee डेटा को संसाधित करने के लिए MatLab के लिए प्रतीक्षा न कर सके। सिर्फ मन में रखने वाली कुछ बातें।

+0

का एक बिल्कुल हालिया संस्करण का उपयोग कर रहे हैं, आप निश्चित रूप से वास्तव में मैटलैब से जावा तक डेटा पास कर सकते हैं। – macduff

+0

matlabcontrol एक शानदार उपकरण है। धन्यवाद! –

-1

जावा के साथ MATLAB इंटरफ़ेस करने के लिए Bringing Java Classes and Methods into MATLAB Workspace में इंटरफ़ेस आवश्यकताओं का पालन करें।

इसमें से सबसे खराब अपने जावा जार कक्षाओं को जावक्लास पथ में पथ जोड़ना है और फिर कन्स्ट्रक्टर, विधियों आदि को कॉल करना है।