Programim dhe zhvillim, javascript, python, php, html

Si të trajtoni dërgimin/pranimin e paketave

Po ndërtoj një aplikacion për të komunikuar me një modul Xbee nëpërmjet API-së Xbee.

Aktualisht kam diçka që funksionon, por është mjaft e thjeshtë dhe ka mjaft kufizime.

Sub processPackets() ' this runs as its own thread
'remove data from serial buffer and format in to packet
'if IO response generated remotely, not requested put in IOQueue
'Otherwise put in CMDQueue (response generate from request, ie cmd response or packet Ack
End Sub

Më pas si shembull i një kërkese tipike komandimi Dërgoni të dhëna në portin serik Loop (me afat kohor) duke kontrolluar CMDQueue për paketën, vendoseni në radhë dhe kontrolloni nëse përputhet. Përndryshe skadon

Tani janë mjaft të dukshme problemet e mundshme me këtë metodë. Në veçanti, meqenëse modulet Xbee mund të flenë, mund t'ju duhet të prisni një kohë të gjatë për një Ack. Plus varet nga porosia, etj.

Do të doja të bëja një qasje jo-bllokuese. Në këtë rast, për të vepruar në paketën Ack/response në shumicën e rasteve më duhet të di paketën origjinale të cilës i është dërguar si përgjigje.

Po mendoj të krijoj disa tema. SendPacket do të dërgojë paketën, do të ngarkojë paketën e dërguar, kohën e dërguar dhe afatin në memorie, do të përfshijë gjithashtu funksionin e kthimit të thirrjes? (array?) PacketProc do të analizojë paketat, do të kontrollojë grupin e paketave që presin për përgjigje dhe do të thërrasë funksionin e kthimit të thirrjes. Do të kontrollojë gjithashtu për ndonjë paketë pritjeje që ka skaduar dhe do të thërrasë kthimin e telefonatës për të treguar afatin?

Në fund të fundit, unë jam duke kërkuar për aftësinë për të dërguar paketa në pajisje të shumta (mund të përgjigjet në çdo mënyrë) dhe të veproj sipas atyre përgjigjeve ose të veproj në kohën e skadimit.

Unë nuk jam veçanërisht i njohur me .NET, a mundet dikush të komentojë këtë qasje ose të rekomandojë një model më të mirë për t'u parë? Ndonjë metodë .Net në të cilën duhet të shikoj?

02.10.2011

  • Nëse jeni i kufizuar në komunikimin serial, nuk do të jeni në gjendje të ekzekutoni me sukses fije të shumta në një instrument. Ju mund të hapni një fije për instrument, nëse po kuptoj se çfarë doni të bëni. 22.01.2013
  • Unë kam një projekt që përdor një emulator të veçantë që kam krijuar me dsf (korniza e simulimit të pajisjes) të microsoft-it. Nëse dëshironi ta përdorni për të imituar një pajisje ose për të testuar një tuajën me porosi, mund të pranoni pajisje të personalizuara. Nëse keni nevojë për diçka më mirë më tregoni por me dsf kushdo mund të simulojë ose testojë pothuajse çdo gjë. Do t'ju duhet një pikë përfundimtare jashtë, përveç pikës fundore, për të pasur komunikim të dyanshëm (djemtë e wdk do të mund t'ju tregojnë se si ta bëni këtë). Kjo funksionon në një nivel më të ulët (kodi i pamenaxhuar/kernel nga ms i përfshirë) kështu që ju mund ta personalizoni paketën përpara se të dërgohet. 19.07.2013
  • Më falni këtu është lidhja: kinectmultipoint.codeplex.com. Shënim: për të redaktuar simulatorin e pajisjes, duhet të redaktoni softhidreceiver i cili është në wdk nën WinDDK\7600.16385.1\src\test\dsf\usb\GenericHID. Ai do të ketë një funksion ose nën të quajtur CreateReportDescriptor i cili ju lejon të futni pajisjen tuaj. Ato janë versionet vb.net dhe c++ që i përshtaten shijes tuaj. 19.07.2013
  • Runtime dsf dhe softhidreceiver janë të dyja në wdk (windows driver kit) 7.1 por janë të pajtueshme me Windows 8 me pak punë nga kërkimi im. 19.07.2013
  • Në c++ për arduino, HonOBDapt im ka disa shembuj të mirë të një modeli të hyrjes/daljes serike jo bllokuese. (sourceforge.net/projects/honobdapt/files/?source=navbar ) 21.08.2013

Përgjigjet:


1

Përdorni klasën Task.

Imports System.Threading
Imports System.Threading.Tasks

...
Dim buffer As StringBuilder;
Sub processPackets() ' this runs as its own thread
    ' Wait for packet
    ' put here command/loop that waits packet

    buffer.Append(packet);
    'remove data from serial buffer and format in to packet
    'if IO response generated remotely, not requested put in IOQueue
    If buffer.ToString() = "REMOTELY" Then
        ' Put IOQueuo
        buffer.Clear()
    Else
        'Otherwise put in CMDQueue (response generate from request, ie cmd response or packet Ack
        ' Put in CMDQueue 
        buffer.Clear()
    End If
End Sub

...

' Create and execute the Task that will process the packets
 Dim t = Task.Factory.StartNew(Sub() processPackets())

http://www.dotnetcurry.com/ShowArticle.aspx?ID=491

17.09.2013
Materiale të reja

Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

Faketojeni derisa ta arrini me të dhënat false
A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

Si të përdorni kërkesën API në Python
Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

Një udhëzues hap pas hapi për të zotëruar React
Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

AI dhe Psikologjia — Pjesa 2
Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

Esencialet e punës ditore të kodit tim VS
Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..