pomoc při UDP a S-funkce?

A

asic1984

Guest
ahoj

Snažil jsem se tento kodex pro příjem dat s UDP protokolu, ale to doesnot přijímat jakoukoli věc,

Přál bych si, že někdo může pomoci v tomto s-funkci, je to velmi naléhavé, aby mi

Kód:

# Define S_FUNCTION_NAME sfuntaha_r / / přijímač

# Define S_FUNCTION_LEVEL 2# Include <afx.h>

# Include <afxsock.h>

# Include <time.h>

# Include <string>

# Include <stdlib.h>

/ / # Include <winsock2.h>

/ /WSADATA wsaData;

SOCKET ReceivingSocket;

SOCKADDR_IN ReceiverAddr;

int Port = 6500;

char ReceiveBuf [1024];

int BufLength = 1024;

SOCKADDR_IN SenderAddr;

int SenderAddrSize = sizeof (SenderAddr);

bool připojit = false;/ // *

* Potřeba zahrnout simstruc.h pro definici SimStruct a

* Ní spojené definice maker.

* /

# Include "simstruc.h"/ / S-parametrů funkcí

# Define NUM_PARAMS (1)

# Define TS_PARAM (ssGetSFcnParam (S, 0))/ / Makra pro přístup k S-funkce hodnoty parametrů

# Define SAMPLE_TIME (mxGetPr (TS_PARAM) [0])

/*====================*

* S-funkce metody *

*====================*// * Funkce: mdlInitializeSizes ============================================= ==

* Abstrakt:

* Rozměry informace jsou Simulink pro stanovení S-funkce

* Blok vlastností (počet vstupů, výstupů, státy, atd.).

* /

static void mdlInitializeSizes (SimStruct * S)

(

/ * Viz sfuntmpl_doc.c pro více informací o makra pod * /ssSetNumSFcnParams (S, NUM_PARAMS) / * Předpokládaný počet parametrů * /

if (ssGetNumSFcnParams (S)! = ssGetSFcnParamsCount (S)) (

/ * Vrátí, pokud počet předpokládaných! = Počet skutečných parametrů * /

návrat;

)ssSetNumContStates (S, 0);

ssSetNumDiscStates (S, 0);if (! ssSetNumInputPorts (S, 0)) return;

/ / Zde je jedna numerická výstup z této funkce

if (! ssSetNumOutputPorts (S, 1)) return;

/ / Výstup

ssSetOutputPortWidth (S, 0, 4);
ssSetNumSampleTimes (S, 1);

ssSetNumRWork (S, 0);

ssSetNumIWork (S, 0);

ssSetNumPWork (S, 0);

ssSetNumModes (S, 0);

ssSetNumNonsampledZCs (S, 0);ssSetOptions (S, 0);/ / Inicializace zásuvky

/ / AfxSocketInit (NULL);

)
/ * Funkce: mdlInitializeSampleTimes =========================================

* Abstrakt:

* Tato funkce se používá k určení vzorku čas (s) pro vaši

* S-funkce.
Ty se musí zaregistrovat stejný počet vzorků krát

* Uvedené v ssSetNumSampleTimes.

* /

static void mdlInitializeSampleTimes (SimStruct * S)

(

ssSetSampleTime (S, 0, SAMPLE_TIME);

ssSetOffsetTime (S, 0, 0,0);)
# Undef MDL_INITIALIZE_CONDITIONS / * Změna # undef k odstranění funkce * /

# Pokud definována (MDL_INITIALIZE_CONDITIONS)

/ * Funkce: mdlInitializeConditions ========================================

* Abstrakt:

* V této funkci, měli byste inicializovat spojitých a diskrétních

* Států pro S-funkční blok. Počátečních stavů jsou umístěny

* Ve státě vektoru, ssGetContStates (S) nebo ssGetRealDiscStates (S).

* Můžete také provádět jakékoli jiné činnosti, inicializační, že vaše

* S-funkce mohou vyžadovat.
Poznámka: bude to rutinní být volán na

* Start simulace, a pokud je přítomen v povoleny subsystému

* Nakonfigurován tak, aby reset států, bude volat, když umožnil subsystému

* Restartuje provedení resetovat států.

* /

static void mdlInitializeConditions (SimStruct * S)

(

)

# Endif / * MDL_INITIALIZE_CONDITIONS * /
# Define MDL_START / * Změna # undef k odstranění funkce * /

# Pokud definována (MDL_START)

/ * Funkce: mdlStart ============================================= ==========

* Abstrakt:

* Tato funkce se nazývá jednou na začátku model výkonu.
Pokud jste

* Se uvádí, že by měly být inicializované jednou, je to místo

* Na to.

* /

static void mdlStart (SimStruct * S)

(WSAStartup (MAKEWORD (2,2), swsaData);ReceivingSocket = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);

ReceiverAddr.sin_family = AF_INET;

ReceiverAddr.sin_port = htons (Port);

ReceiverAddr.sin_addr.s_addr = htonl (INADDR_ANY);bind (ReceivingSocket, (sockaddr *) & SenderAddr, sizeof (SenderAddr));
)

# Endif / * MDL_START * /
/ * Funkce: mdlOutputs ============================================= ==========

* Abstrakt:

* V této funkci můžete spočítat výstupy vašeho S-funkce

* Blok.
Obecně výstupy jsou umístěny ve výstupním vektoru, ssGetY (S).

* /

static void mdlOutputs (SimStruct * S, int_T třikrát denně)

(

double d [4];

char buf [8];
recvfrom (ReceivingSocket, buf, BufLength, 0,

(Sockaddr *) & SenderAddr, & SenderAddrSize);d [0] = atof (buf);

recvfrom (ReceivingSocket, buf, BufLength, 0,

(Sockaddr *) & SenderAddr, & SenderAddrSize);

d [1] = atof (buf);

recvfrom (ReceivingSocket, buf, BufLength, 0,

(Sockaddr *) & SenderAddr, & SenderAddrSize);

d [2] = atof (buf);

recvfrom (ReceivingSocket, buf, BufLength, 0,

(Sockaddr *) & SenderAddr, & SenderAddrSize);

d [3] = atof (buf);real_T * y = ssGetOutputPortRealSignal (S, 0);y [0] = d [0];

y [1] = d [1];

y [2] = d [2];

y [3] = d [3];)
# Undef MDL_UPDATE / * Změna # undef k odstranění funkce * /

# Pokud definována (MDL_UPDATE)

/ * Funkce: mdlUpdate ============================================= =========

* Abstrakt:

* Tato funkce se nazývá jednou pro každý velký krok integrace čas.

* Diskrétní státy jsou obvykle aktualizovány tady, ale tato funkce je užitečná

* Pro plnění všech úkolů, které by měly probíhat pouze jednou za

* Integrační krok.

* /

static void mdlUpdate (SimStruct * S, int_T třikrát denně)

(

)

# Endif / * MDL_UPDATE * /
# Undef MDL_DERIVATIVES / * Změna # undef k odstranění funkce * /

# Pokud definována (MDL_DERIVATIVES)

/ * Funkce: mdlDerivatives ============================================= ====

* Abstrakt:

* V této funkci můžete spočítat S-funkce bloku deriváty.

* Deriváty jsou umístěny v derivát vektoru, ssGetdX (S).

* /

static void mdlDerivatives (SimStruct * S)

(

)

# Endif / * MDL_DERIVATIVES * /
/ * Funkce: mdlTerminate ============================================= ========

* Abstrakt:

* V této funkci byste měli provést žádné akce, které jsou nezbytné

* Při ukončení simulace. Například, pokud paměť

* Přidělené v mdlStart, toto je místo pro volný to.

* /

static void mdlTerminate (SimStruct * S)

()/*================================================ ======*

* Viz sfuntmpl_doc.c pro volitelný S-funkce metody *

*================================================= =====*//*=============================*

* Povinné S-funkce trailer *

*=============================*/# Ifdef MATLAB_MEX_FILE / * Je to soubor je sestaven jako MEX-soubor?
* /

# Include "simulink.c" / * MEX-soubor rozhraní mechanismus * /

# Jinak

# Include "cg_sfun.h" / * generování kódu registrační funkce * /

# Endif
 

Welcome to EDABoard.com

Sponsor

Back
Top