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
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