diff --git a/clients/README.txt b/clients/README.txt index 619e5fd7c..3ce8ce243 100644 --- a/clients/README.txt +++ b/clients/README.txt @@ -4,24 +4,6 @@ various simulators and tools to the S2SS server. Author: Steffen Vogel Date: Mid 2014 - End 2015 -- ml50x_cpld - A slightly modified configuration of the CPLD on the ML507 board. - It is based on the reference design provided by Xilinx. - The modification redirects the PCIe reset signal directly to the Virtex 5. - -- ml507_gtfpga_pcie - A Xilinx ISE 12.4 project to directly access RTDS registers via PCIe memory. - This is a WIP and should allow improve the latency of by directly accessing RTDS - registers through the S2SS server which runs on the same machine. - -- ml507_ppc440_udp - A Xilinx XPS 12.4 project which allows access to the RTDS registers via S2SS's - UDP protocol over the ML507 Ethernet interface. - This is working! - -- opal +- opal/udp Contains the implementation of an asynchronous process block for RT-LAB. This block allows exchanging messages with an S2SS server over UDP/TCP. - -- rscad - Some example RSCAD drafts to test the S2SS <-> RTDS interface. diff --git a/clients/opal_udp/.project b/clients/opal/udp/.project similarity index 95% rename from clients/opal_udp/.project rename to clients/opal/udp/.project index ee036a7d6..47831aed8 100644 --- a/clients/opal_udp/.project +++ b/clients/opal/udp/.project @@ -1,12 +1,12 @@ - - - s2ss_tests - - - - - - - com.opalrt.rtlab.ui.rtlabnature - - + + + s2ss_tests + + + + + + + com.opalrt.rtlab.ui.rtlabnature + + diff --git a/clients/opal_udp/.settings/com.opalrt.rtlab.ui.application.prefs b/clients/opal/udp/.settings/com.opalrt.rtlab.ui.application.prefs similarity index 96% rename from clients/opal_udp/.settings/com.opalrt.rtlab.ui.application.prefs rename to clients/opal/udp/.settings/com.opalrt.rtlab.ui.application.prefs index b62a22d66..2da0b5b3a 100644 --- a/clients/opal_udp/.settings/com.opalrt.rtlab.ui.application.prefs +++ b/clients/opal/udp/.settings/com.opalrt.rtlab.ui.application.prefs @@ -1,3 +1,3 @@ -#Mon Jul 14 20:43:18 CEST 2014 -eclipse.preferences.version=1 -rtprojectfile=s2ss_tests.llp +#Mon Jul 14 20:43:18 CEST 2014 +eclipse.preferences.version=1 +rtprojectfile=s2ss_tests.llp diff --git a/clients/opal/udp/models/send_receive/include/config.h b/clients/opal/udp/models/send_receive/include/config.h new file mode 100644 index 000000000..95af71795 --- /dev/null +++ b/clients/opal/udp/models/send_receive/include/config.h @@ -0,0 +1,16 @@ +/** Compiled-in settings + * + * @author Steffen Vogel + * @copyright 2014, Institute for Automation of Complex Power Systems, EONERC + * @file + */ + +#ifndef _CONFIG_H_ +#define _CONFIG_H_ + +#define PROGNAME "S2SS" +#define VERSION "0.1" + +#define MAX_VALUES 64 + +#endif /* _CONFIG_H_ */ \ No newline at end of file diff --git a/clients/opal_udp/models/send_receive/include/msg.h b/clients/opal/udp/models/send_receive/include/msg.h similarity index 100% rename from clients/opal_udp/models/send_receive/include/msg.h rename to clients/opal/udp/models/send_receive/include/msg.h diff --git a/clients/opal_udp/models/send_receive/include/msg_format.h b/clients/opal/udp/models/send_receive/include/msg_format.h similarity index 100% rename from clients/opal_udp/models/send_receive/include/msg_format.h rename to clients/opal/udp/models/send_receive/include/msg_format.h diff --git a/clients/opal_udp/models/send_receive/include/socket.h b/clients/opal/udp/models/send_receive/include/socket.h similarity index 68% rename from clients/opal_udp/models/send_receive/include/socket.h rename to clients/opal/udp/models/send_receive/include/socket.h index 5b8fbea76..336e18eb2 100644 --- a/clients/opal_udp/models/send_receive/include/socket.h +++ b/clients/opal/udp/models/send_receive/include/socket.h @@ -1,35 +1,33 @@ -/** Helper functions for socket - * - * Code example of an asynchronous program. This program is started - * by the asynchronous controller and demonstrates how to send and - * receive data to and from the asynchronous icons and a UDP or TCP - * port. - * - * @file - * @author Steffen Vogel - * @author Mathieu Dubé-Dallaire - * @copyright 2003, OPAL-RT Technologies inc - * @copyright 2014-2015, Institute for Automation of Complex Power Systems, EONERC - * This file is part of S2SS. All Rights Reserved. Proprietary and confidential. - * Unauthorized copying of this file, via any medium is strictly prohibited. - *********************************************************************************/ - -#ifndef _SOCKET_H_ -#define _SOCKET_H_ - -#define RT -#include "OpalGenAsyncParamCtrl.h" - -#define UDP_PROTOCOL 1 -#define TCP_PROTOCOL 2 -#define EOK 0 - -int InitSocket(Opal_GenAsyncParam_Ctrl IconCtrlStruct); - -int SendPacket(char* DataSend, int datalength); - -int RecvPacket(char* DataRecv, int datalength, double timeout); - -int CloseSocket(Opal_GenAsyncParam_Ctrl IconCtrlStruct); - -#endif /* _SOCKET_H_ */ +/** Helper functions for socket + * + * Code example of an asynchronous program. This program is started + * by the asynchronous controller and demonstrates how to send and + * receive data to and from the asynchronous icons and a UDP or TCP + * port. + * + * @author Steffen Vogel + * @author Mathieu Dubé-Dallaire + * @copyright 2014, Institute for Automation of Complex Power Systems, EONERC + * @copyright 2003, OPAL-RT Technologies inc + * @file + */ + +#ifndef _SOCKET_H_ +#define _SOCKET_H_ + +#define RT +#include "OpalGenAsyncParamCtrl.h" + +#define UDP_PROTOCOL 1 +#define TCP_PROTOCOL 2 +#define EOK 0 + +int InitSocket(Opal_GenAsyncParam_Ctrl IconCtrlStruct); + +int SendPacket(char* DataSend, int datalength); + +int RecvPacket(char* DataRecv, int datalength, double timeout); + +int CloseSocket(Opal_GenAsyncParam_Ctrl IconCtrlStruct); + +#endif /* _SOCKET_H_ */ diff --git a/clients/opal_udp/models/send_receive/include/utils.h b/clients/opal/udp/models/send_receive/include/utils.h similarity index 100% rename from clients/opal_udp/models/send_receive/include/utils.h rename to clients/opal/udp/models/send_receive/include/utils.h diff --git a/clients/opal_udp/models/send_receive/s2ss.mk b/clients/opal/udp/models/send_receive/s2ss.mk similarity index 95% rename from clients/opal_udp/models/send_receive/s2ss.mk rename to clients/opal/udp/models/send_receive/s2ss.mk index e31b9726c..0cf147180 100644 --- a/clients/opal_udp/models/send_receive/s2ss.mk +++ b/clients/opal/udp/models/send_receive/s2ss.mk @@ -1,75 +1,75 @@ -# Specify program name -PROGRAM = AsyncIP - -# Specify default values if we are not compiling from RT-LAB -TARGET_OPALRT_ROOT = /usr/opalrt - -# QNX v6.x -ifeq "$(SYSNAME)" "nto" - CC = gcc - LD = $(CC) - TARGET_LIB = -lsocket -endif - -# RedHawk Linux -ifeq "$(shell uname)" "Linux" - RTLAB_INTEL_COMPILER ?= 1 - - # Intel Compiler support - ifeq ($(RTLAB_INTEL_COMPILER),1) - CC = opicc - LD = opicpc - # Gnu Compiler support - else - CC = gcc - LD = g++ - INTEL_LIBS = -limf -lirc - endif - - # RedHat or RedHawk - LINUX_FLAVOR = $(shell uname -r | grep RedHawk) - ifneq "$(LINUX_FLAVOR) " " " ### Linux (RedHat) - RH_FLAGS = -D_GNU_SOURCE -D__redhawk__ - RH_LIBS = -lccur_rt - else - RH_FLAGS = -D_GNU_SOURCE - endif - - TARGET_LIB = -lpthread -lm -ldl -lutil -lrt $(RH_LIBS) $(INTEL_LIBS) -endif - -# Support for debugging symbols -ifeq ($(DEBUG),1) - CC_DEBUG_OPTS=-g -D_DEBUG - LD_DEBUG_OPTS=-g -else - CC_DEBUG_OPTS=-O - LD_DEBUG_OPTS= -endif - -INCLUDES = -I. -LIBPATH = -L. -CC_OPTS = -LD_OPTS = -OBJS = s2ss.o msg.o utils.o socket.o - -ADDLIB = -lOpalCore -lOpalUtils -LIBS = -lOpalAsyncApiCore $(ADDLIB) $(TARGET_LIB) - -CFLAGS = -c $(CC_OPTS) $(CC_DEBUG_OPTS) $(RH_FLAGS) $(INCLUDES) -LDFLAGS = $(LD_OPTS) $(LD_DEBUG_OPTS) $(LIBPATH) - -all: $(PROGRAM) - -install: - \mkdir -p $(TARGET_OPALRT_ROOT)/local - \chmod 755 $(TARGET_OPALRT_ROOT)/local - \cp -f $(PROGRAM) $(TARGET_OPALRT_ROOT)/local - -clean: - \rm -f $(OBJS) $(PROGRAM) - -$(PROGRAM): $(OBJS) - $(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) - chmod 777 $@ - @echo "### Created executable: $(PROGRAM)" +# Specify program name +PROGRAM = AsyncIP + +# Specify default values if we are not compiling from RT-LAB +TARGET_OPALRT_ROOT = /usr/opalrt + +# QNX v6.x +ifeq "$(SYSNAME)" "nto" + CC = gcc + LD = $(CC) + TARGET_LIB = -lsocket +endif + +# RedHawk Linux +ifeq "$(shell uname)" "Linux" + RTLAB_INTEL_COMPILER ?= 1 + + # Intel Compiler support + ifeq ($(RTLAB_INTEL_COMPILER),1) + CC = opicc + LD = opicpc + # Gnu Compiler support + else + CC = gcc + LD = g++ + INTEL_LIBS = -limf -lirc + endif + + # RedHat or RedHawk + LINUX_FLAVOR = $(shell uname -r | grep RedHawk) + ifneq "$(LINUX_FLAVOR) " " " ### Linux (RedHat) + RH_FLAGS = -D_GNU_SOURCE -D__redhawk__ + RH_LIBS = -lccur_rt + else + RH_FLAGS = -D_GNU_SOURCE + endif + + TARGET_LIB = -lpthread -lm -ldl -lutil -lrt $(RH_LIBS) $(INTEL_LIBS) +endif + +# Support for debugging symbols +ifeq ($(DEBUG),1) + CC_DEBUG_OPTS=-g -D_DEBUG + LD_DEBUG_OPTS=-g +else + CC_DEBUG_OPTS=-O + LD_DEBUG_OPTS= +endif + +INCLUDES = -I. +LIBPATH = -L. +CC_OPTS = +LD_OPTS = +OBJS = s2ss.o msg.o utils.o socket.o + +ADDLIB = -lOpalCore -lOpalUtils +LIBS = -lOpalAsyncApiCore $(ADDLIB) $(TARGET_LIB) + +CFLAGS = -c $(CC_OPTS) $(CC_DEBUG_OPTS) $(RH_FLAGS) $(INCLUDES) +LDFLAGS = $(LD_OPTS) $(LD_DEBUG_OPTS) $(LIBPATH) + +all: $(PROGRAM) + +install: + \mkdir -p $(TARGET_OPALRT_ROOT)/local + \chmod 755 $(TARGET_OPALRT_ROOT)/local + \cp -f $(PROGRAM) $(TARGET_OPALRT_ROOT)/local + +clean: + \rm -f $(OBJS) $(PROGRAM) + +$(PROGRAM): $(OBJS) + $(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) + chmod 777 $@ + @echo "### Created executable: $(PROGRAM)" diff --git a/clients/opal_udp/models/send_receive/send_receive.llm b/clients/opal/udp/models/send_receive/send_receive.llm similarity index 96% rename from clients/opal_udp/models/send_receive/send_receive.llm rename to clients/opal/udp/models/send_receive/send_receive.llm index fc682bd34..d6cd1fb19 100644 --- a/clients/opal_udp/models/send_receive/send_receive.llm +++ b/clients/opal/udp/models/send_receive/send_receive.llm @@ -1,107 +1,107 @@ -[EnvVars] -ABORT_COMPILE_WHEN_NO_BITSTREAM=0 -ACTION_AFTER_N_OVERRUNS=10 -ACTION_ON_OVERRUNS=0 -AcquisitionMemory=0,2500,24,100 -ActiveGroups=7/0/24/25/26/27/28/29/ -CACHEABLE_DMA_MEMORY_ACCESS=ON -COMM_RT=UDP/IP -ClockPeriodMode=Free-Clock -ClockPeriodTime=10 -DEBUG=0 -DETECT_OVERRUNS=ON -ENABLE_WATCHDOG=ON -EXT_CC_OPTS= -EXT_LD_OPTS= -EXT_LIB= -EXT_LIBPATH= -MODEL_PAUSE_TIME=0.000000 -MODEL_STOP_TIME=0.000000 -MONITORING=ON -MONITORING_BLOCK=OFF -MONITORING_DISPLAY=NEVER -MSG_PRECISION_FACTOR=0 -MaxDynamicSignals=2/0/100/24/42/ -NB_STEP_WITHOUT_OVERRUNS=10 -OPAL_DEBUG=OFF -OP_MATLABR2011B=1 -OS_COMPILE_RELEASE=2.6.29.6-opalrt-5 -PRINT_LOG_LEVEL=ALWAYS -RESET_IO_MISSING=ON -SYSNAME=linux -USER_INCS= -USER_SRCS= -WATCHDOG_TIMEOUT=5000 -[EnvVars_REDHAWK_DYN_1] -INTERNAL_IGN_SOURCE_FILE=sfun_gen_async_ctrl.c sfun_recv_async.c sfun_send_async.c -INTERNAL_LIBRARY2=-lOpalAsyncApiR2011b -INTERNAL_LIBRARY3=-lOpalAsyncApiCore -[ExtraPutFilesComp] -include\config.h=Ascii -include\msg.h=Ascii -include\msg_format.h=Ascii -include\socket.h=Ascii -include\utils.h=Ascii -s2ss.mk=Ascii -src\msg.c=Ascii -src\s2ss.c=Ascii -src\socket.c=Ascii -src\utils.c=Ascii -[ExtraPutFilesComp_1_RT_LAB] -C:\OPAL-RT\RT-LAB\v10.5.9.356\common\lib\redhawk\libOpalAsyncApiCore.a=Binary -[General] -ATT_CHECKSUM1=703418586 -ATT_CHECKSUM2=799511679 -ATT_CHECKSUM3=2136361860 -ATT_CHECKSUM4=3725771660 -ATT_CREATED_BY=jwu -ATT_CREATED_ON=Thu Apr 15 08:21:54 1999 -ATT_ENABLE_PTA=OFF -ATT_HANDLE_CONSOLE=ON -ATT_LAST_SAVED_BY=ACS -ATT_LAST_SAVED_ON=Thu Sep 04 16:25:19 2014 -ATT_REVISION=1.445 -AutoRetrieveFiles=ON -AutoRetrieveRtlab=ON -CompilerVersion=AUTOMATIC -DESCRIPTION= -DinamoFlag=OFF -FILENAME=D:\msv\02_msv-svo\opal\s2ss_tests\models\send_receive\send_receive.mdl -FORCE_RECOMPILE=0 -IMPORTED_GLOBAL_VARIABLES=1 -LastCompileRtlabVersion=v10.5.9.356 -LastMatlabUsed=21 -LastMatlabUsedName=v7.13 -MATLAB_USED_IN_MODEL=21 -Name=send_receive -PRINT_CYCLE=OFF -PostBuildCmd= -PreBuildCmd= -QNX_LAST_COMPILE_VERSION= -RH64_LAST_COMPILE_VERSION= -RH_LAST_COMPILE_VERSION=2.6.29.6-opalrt-5 -ReportFileId= -RetrieveBuildTree=ON -RetrieveRootDir= -SimulationMode=2 -TLC=Automatic -TMF=Automatic -TRANSFERFILE_AT_LOAD=OFF -TargetCompileCmd=/usr/bin/make -f /usr/opalrt/common/bin/opalmodelmk -TargetPlatform=REDHAWK -TimeFactor=1.000000000000000 -TimeStep=0.000050000000000 -sc_consoleTimeStep=-1.000000000000000 -sm_modelTimeStep=0.000049999998737 -sm_send_receiveTimeStep=0.000049999998737 -[NodeMapping] -sm_model=ACS_OPAL_RT -sm_model_CORE_ASSIGNATION=1 -sm_model_CPU=-1 -sm_model_DEBUG=OFF -sm_model_XHP_ENABLE=FALSE -sm_send_receive=ACS_OPAL_RT -sm_send_receive_CORE_ASSIGNATION=1 -sm_send_receive_CPU=-1 -sm_send_receive_DEBUG=OFF -sm_send_receive_XHP_ENABLE=FALSE +[EnvVars] +ABORT_COMPILE_WHEN_NO_BITSTREAM=0 +ACTION_AFTER_N_OVERRUNS=10 +ACTION_ON_OVERRUNS=0 +AcquisitionMemory=0,2500,24,100 +ActiveGroups=7/0/24/25/26/27/28/29/ +CACHEABLE_DMA_MEMORY_ACCESS=ON +COMM_RT=UDP/IP +ClockPeriodMode=Free-Clock +ClockPeriodTime=10 +DEBUG=0 +DETECT_OVERRUNS=ON +ENABLE_WATCHDOG=ON +EXT_CC_OPTS= +EXT_LD_OPTS= +EXT_LIB= +EXT_LIBPATH= +MODEL_PAUSE_TIME=0.000000 +MODEL_STOP_TIME=0.000000 +MONITORING=ON +MONITORING_BLOCK=OFF +MONITORING_DISPLAY=NEVER +MSG_PRECISION_FACTOR=0 +MaxDynamicSignals=2/0/100/24/42/ +NB_STEP_WITHOUT_OVERRUNS=10 +OPAL_DEBUG=OFF +OP_MATLABR2011B=1 +OS_COMPILE_RELEASE=2.6.29.6-opalrt-5 +PRINT_LOG_LEVEL=ALWAYS +RESET_IO_MISSING=ON +SYSNAME=linux +USER_INCS= +USER_SRCS= +WATCHDOG_TIMEOUT=5000 +[EnvVars_REDHAWK_DYN_1] +INTERNAL_IGN_SOURCE_FILE=sfun_gen_async_ctrl.c sfun_recv_async.c sfun_send_async.c +INTERNAL_LIBRARY2=-lOpalAsyncApiR2011b +INTERNAL_LIBRARY3=-lOpalAsyncApiCore +[ExtraPutFilesComp] +include\config.h=Ascii +include\msg.h=Ascii +include\msg_format.h=Ascii +include\socket.h=Ascii +include\utils.h=Ascii +s2ss.mk=Ascii +src\msg.c=Ascii +src\s2ss.c=Ascii +src\socket.c=Ascii +src\utils.c=Ascii +[ExtraPutFilesComp_1_RT_LAB] +C:\OPAL-RT\RT-LAB\v10.5.9.356\common\lib\redhawk\libOpalAsyncApiCore.a=Binary +[General] +ATT_CHECKSUM1=703418586 +ATT_CHECKSUM2=799511679 +ATT_CHECKSUM3=2136361860 +ATT_CHECKSUM4=3725771660 +ATT_CREATED_BY=jwu +ATT_CREATED_ON=Thu Apr 15 08:21:54 1999 +ATT_ENABLE_PTA=OFF +ATT_HANDLE_CONSOLE=ON +ATT_LAST_SAVED_BY=ACS +ATT_LAST_SAVED_ON=Thu Sep 04 16:25:19 2014 +ATT_REVISION=1.445 +AutoRetrieveFiles=ON +AutoRetrieveRtlab=ON +CompilerVersion=AUTOMATIC +DESCRIPTION= +DinamoFlag=OFF +FILENAME=D:\msv\02_msv-svo\opal\s2ss_tests\models\send_receive\send_receive.mdl +FORCE_RECOMPILE=0 +IMPORTED_GLOBAL_VARIABLES=1 +LastCompileRtlabVersion=v10.5.9.356 +LastMatlabUsed=21 +LastMatlabUsedName=v7.13 +MATLAB_USED_IN_MODEL=21 +Name=send_receive +PRINT_CYCLE=OFF +PostBuildCmd= +PreBuildCmd= +QNX_LAST_COMPILE_VERSION= +RH64_LAST_COMPILE_VERSION= +RH_LAST_COMPILE_VERSION=2.6.29.6-opalrt-5 +ReportFileId= +RetrieveBuildTree=ON +RetrieveRootDir= +SimulationMode=2 +TLC=Automatic +TMF=Automatic +TRANSFERFILE_AT_LOAD=OFF +TargetCompileCmd=/usr/bin/make -f /usr/opalrt/common/bin/opalmodelmk +TargetPlatform=REDHAWK +TimeFactor=1.000000000000000 +TimeStep=0.000050000000000 +sc_consoleTimeStep=-1.000000000000000 +sm_modelTimeStep=0.000049999998737 +sm_send_receiveTimeStep=0.000049999998737 +[NodeMapping] +sm_model=ACS_OPAL_RT +sm_model_CORE_ASSIGNATION=1 +sm_model_CPU=-1 +sm_model_DEBUG=OFF +sm_model_XHP_ENABLE=FALSE +sm_send_receive=ACS_OPAL_RT +sm_send_receive_CORE_ASSIGNATION=1 +sm_send_receive_CPU=-1 +sm_send_receive_DEBUG=OFF +sm_send_receive_XHP_ENABLE=FALSE diff --git a/clients/opal_udp/models/send_receive/send_receive.mdl b/clients/opal/udp/models/send_receive/send_receive.mdl similarity index 96% rename from clients/opal_udp/models/send_receive/send_receive.mdl rename to clients/opal/udp/models/send_receive/send_receive.mdl index 8f77fbd8f..af07a97e3 100644 --- a/clients/opal_udp/models/send_receive/send_receive.mdl +++ b/clients/opal/udp/models/send_receive/send_receive.mdl @@ -1,1473 +1,1473 @@ -# $Revision: 1.1 $ -Model { - Name "send_receive" - Version 7.8 - MdlSubVersion 0 - GraphicalInterface { - NumRootInports 0 - NumRootOutports 0 - ParameterArgumentNames "" - ComputedModelVersion "1.445" - NumModelReferences 0 - NumTestPointedSignals 0 - } - SavedCharacterEncoding "windows-1252" - SaveDefaultBlockParams on - ScopeRefreshTime 0.035000 - OverrideScopeRefreshTime on - DisableAllScopes off - DataTypeOverride "UseLocalSettings" - DataTypeOverrideAppliesTo "AllNumericTypes" - MinMaxOverflowLogging "UseLocalSettings" - MinMaxOverflowArchiveMode "Overwrite" - FPTRunName "Run 1" - MaxMDLFileLineLength 120 - Created "Thu Apr 15 08:21:54 1999" - Creator "jwu" - UpdateHistory "UpdateHistoryNever" - ModifiedByFormat "%" - LastModifiedBy "ACS" - ModifiedDateFormat "%" - LastModifiedDate "Thu Sep 04 16:25:19 2014" - RTWModifiedTimeStamp 331748717 - ModelVersionFormat "1.%" - ConfigurationManager "none" - SampleTimeColors off - SampleTimeAnnotations off - LibraryLinkDisplay "none" - WideLines off - ShowLineDimensions on - ShowPortDataTypes off - ShowDesignRanges off - ShowLoopsOnError on - IgnoreBidirectionalLines off - ShowStorageClass off - ShowTestPointIcons on - ShowSignalResolutionIcons on - ShowViewerIcons on - SortedOrder off - ExecutionContextIcon off - ShowLinearizationAnnotations on - BlockNameDataTip off - BlockParametersDataTip on - BlockDescriptionStringDataTip off - ToolBar on - StatusBar on - BrowserShowLibraryLinks off - BrowserLookUnderMasks off - SimulationMode "normal" - LinearizationMsg "none" - Profile off - ParamWorkspaceSource "MATLABWorkspace" - AccelSystemTargetFile "accel.tlc" - AccelTemplateMakefile "accel_default_tmf" - AccelMakeCommand "make_rtw" - TryForcingSFcnDF off - RecordCoverage off - CovPath "/" - CovSaveName "covdata" - CovMetricSettings "dw" - CovNameIncrementing off - CovHtmlReporting on - CovForceBlockReductionOff on - covSaveCumulativeToWorkspaceVar on - CovSaveSingleToWorkspaceVar on - CovCumulativeVarName "covCumulativeData" - CovCumulativeReport off - CovReportOnPause on - CovModelRefEnable "Off" - CovExternalEMLEnable off - ExtModeBatchMode off - ExtModeEnableFloating on - ExtModeTrigType "manual" - ExtModeTrigMode "oneshot" - ExtModeTrigPort "1" - ExtModeTrigElement "any" - ExtModeTrigDuration 1000 - ExtModeTrigDurationFloating "auto" - ExtModeTrigHoldOff 0 - ExtModeTrigDelay 0 - ExtModeTrigDirection "rising" - ExtModeTrigLevel 0 - ExtModeArchiveMode "off" - ExtModeAutoIncOneShot off - ExtModeIncDirWhenArm off - ExtModeAddSuffixToVar off - ExtModeWriteAllDataToWs off - ExtModeArmWhenConnect off - ExtModeSkipDownloadWhenConnect off - ExtModeLogAll on - ExtModeAutoUpdateStatusClock on - BufferReuse off - ShowModelReferenceBlockVersion off - ShowModelReferenceBlockIO off - Array { - Type "Handle" - Dimension 1 - Simulink.ConfigSet { - $ObjectID 1 - Version "1.11.1" - Array { - Type "Handle" - Dimension 8 - Simulink.SolverCC { - $ObjectID 2 - Version "1.11.1" - StartTime "0.0" - StopTime "inf" - AbsTol "1e-6" - FixedStep "0.00005" - InitialStep "auto" - MaxNumMinSteps "-1" - MaxOrder 5 - ZcThreshold "auto" - ConsecutiveZCsStepRelTol "10*128*eps" - MaxConsecutiveZCs "1000" - ExtrapolationOrder 4 - NumberNewtonIterations 1 - MaxStep "0.01" - MinStep "auto" - MaxConsecutiveMinStep "1" - RelTol "1e-3" - SolverMode "SingleTasking" - ConcurrentTasks off - Solver "ode4" - SolverName "ode4" - SolverJacobianMethodControl "auto" - ShapePreserveControl "DisableAll" - ZeroCrossControl "UseLocalSettings" - ZeroCrossAlgorithm "Nonadaptive" - AlgebraicLoopSolver "TrustRegion" - SolverResetMethod "Fast" - PositivePriorityOrder off - AutoInsertRateTranBlk off - SampleTimeConstraint "Unconstrained" - InsertRTBMode "Whenever possible" - } - Simulink.DataIOCC { - $ObjectID 3 - Version "1.11.1" - Decimation "1" - ExternalInput "[]" - FinalStateName "xFinal" - InitialState "[]" - LimitDataPoints off - MaxDataPoints "1000" - LoadExternalInput off - LoadInitialState off - SaveFinalState off - SaveCompleteFinalSimState off - SaveFormat "Array" - SignalLoggingSaveFormat "ModelDataLogs" - SaveOutput off - SaveState off - SignalLogging on - DSMLogging on - InspectSignalLogs off - SaveTime off - ReturnWorkspaceOutputs off - StateSaveName "xout" - TimeSaveName "tout" - OutputSaveName "yout" - SignalLoggingName "sigsOut" - DSMLoggingName "dsmout" - OutputOption "RefineOutputTimes" - OutputTimes "[]" - ReturnWorkspaceOutputsName "out" - Refine "1" - } - Simulink.OptimizationCC { - $ObjectID 4 - Version "1.11.1" - Array { - Type "Cell" - Dimension 4 - Cell "ZeroExternalMemoryAtStartup" - Cell "ZeroInternalMemoryAtStartup" - Cell "NoFixptDivByZeroProtection" - Cell "OptimizeModelRefInitCode" - PropName "DisabledProps" - } - BlockReduction on - BooleanDataType off - ConditionallyExecuteInputs on - InlineParams off - UseIntDivNetSlope off - UseFloatMulNetSlope off - UseSpecifiedMinMax off - InlineInvariantSignals off - OptimizeBlockIOStorage off - BufferReuse off - EnhancedBackFolding off - StrengthReduction off - ExpressionFolding off - BooleansAsBitfields off - BitfieldContainerType "uint_T" - EnableMemcpy on - MemcpyThreshold 64 - PassReuseOutputArgsAs "Structure reference" - ExpressionDepthLimit 2147483647 - FoldNonRolledExpr off - LocalBlockOutputs off - RollThreshold 5 - SystemCodeInlineAuto off - StateBitsets off - DataBitsets off - UseTempVars off - ZeroExternalMemoryAtStartup on - ZeroInternalMemoryAtStartup on - InitFltsAndDblsToZero on - NoFixptDivByZeroProtection off - EfficientFloat2IntCast off - EfficientMapNaN2IntZero on - OptimizeModelRefInitCode off - LifeSpan "inf" - MaxStackSize "Inherit from target" - BufferReusableBoundary on - SimCompilerOptimization "Off" - AccelVerboseBuild off - AccelParallelForEachSubsystem on - } - Simulink.DebuggingCC { - $ObjectID 5 - Version "1.11.1" - RTPrefix "error" - ConsistencyChecking "none" - ArrayBoundsChecking "none" - SignalInfNanChecking "none" - SignalRangeChecking "none" - ReadBeforeWriteMsg "UseLocalSettings" - WriteAfterWriteMsg "UseLocalSettings" - WriteAfterReadMsg "UseLocalSettings" - AlgebraicLoopMsg "warning" - ArtificialAlgebraicLoopMsg "warning" - SaveWithDisabledLinksMsg "warning" - SaveWithParameterizedLinksMsg "none" - CheckSSInitialOutputMsg on - UnderspecifiedInitializationDetection "Classic" - MergeDetectMultiDrivingBlocksExec "none" - CheckExecutionContextPreStartOutputMsg off - CheckExecutionContextRuntimeOutputMsg off - SignalResolutionControl "TryResolveAllWithWarning" - BlockPriorityViolationMsg "warning" - MinStepSizeMsg "warning" - TimeAdjustmentMsg "none" - MaxConsecutiveZCsMsg "error" - MaskedZcDiagnostic "warning" - IgnoredZcDiagnostic "warning" - SolverPrmCheckMsg "none" - InheritedTsInSrcMsg "none" - DiscreteInheritContinuousMsg "warning" - MultiTaskDSMMsg "warning" - MultiTaskCondExecSysMsg "none" - MultiTaskRateTransMsg "error" - SingleTaskRateTransMsg "none" - TasksWithSamePriorityMsg "warning" - SigSpecEnsureSampleTimeMsg "warning" - CheckMatrixSingularityMsg "none" - IntegerOverflowMsg "warning" - Int32ToFloatConvMsg "warning" - ParameterDowncastMsg "error" - ParameterOverflowMsg "error" - ParameterUnderflowMsg "none" - ParameterPrecisionLossMsg "warning" - ParameterTunabilityLossMsg "warning" - FixptConstUnderflowMsg "none" - FixptConstOverflowMsg "none" - FixptConstPrecisionLossMsg "none" - UnderSpecifiedDataTypeMsg "none" - UnnecessaryDatatypeConvMsg "none" - VectorMatrixConversionMsg "none" - InvalidFcnCallConnMsg "error" - FcnCallInpInsideContextMsg "Use local settings" - SignalLabelMismatchMsg "none" - UnconnectedInputMsg "warning" - UnconnectedOutputMsg "warning" - UnconnectedLineMsg "warning" - SFcnCompatibilityMsg "none" - FrameProcessingCompatibilityMsg "warning" - UniqueDataStoreMsg "none" - BusObjectLabelMismatch "warning" - RootOutportRequireBusObject "warning" - AssertControl "UseLocalSettings" - EnableOverflowDetection off - ModelReferenceIOMsg "none" - ModelReferenceMultiInstanceNormalModeStructChecksumCheck "error" - ModelReferenceVersionMismatchMessage "none" - ModelReferenceIOMismatchMessage "none" - ModelReferenceCSMismatchMessage "none" - UnknownTsInhSupMsg "warning" - ModelReferenceDataLoggingMessage "warning" - ModelReferenceSymbolNameMessage "warning" - ModelReferenceExtraNoncontSigs "error" - StateNameClashWarn "warning" - SimStateInterfaceChecksumMismatchMsg "warning" - SimStateOlderReleaseMsg "error" - InitInArrayFormatMsg "warning" - StrictBusMsg "None" - BusNameAdapt "WarnAndRepair" - NonBusSignalsTreatedAsBus "none" - LoggingUnavailableSignals "error" - BlockIODiagnostic "none" - SFUnusedDataAndEventsDiag "warning" - SFUnexpectedBacktrackingDiag "warning" - SFInvalidInputDataAccessInChartInitDiag "warning" - SFNoUnconditionalDefaultTransitionDiag "warning" - SFTransitionOutsideNaturalParentDiag "warning" - SFUnconditionalTransitionShadowingDiag "warning" - } - Simulink.HardwareCC { - $ObjectID 6 - Version "1.11.1" - ProdBitPerChar 8 - ProdBitPerShort 16 - ProdBitPerInt 32 - ProdBitPerLong 32 - ProdBitPerFloat 32 - ProdBitPerDouble 64 - ProdBitPerPointer 32 - ProdLargestAtomicInteger "Char" - ProdLargestAtomicFloat "None" - ProdIntDivRoundTo "Undefined" - ProdEndianess "Unspecified" - ProdWordSize 32 - ProdShiftRightIntArith on - ProdHWDeviceType "32-bit Generic" - TargetBitPerChar 8 - TargetBitPerShort 16 - TargetBitPerInt 32 - TargetBitPerLong 32 - TargetBitPerFloat 32 - TargetBitPerDouble 64 - TargetBitPerPointer 32 - TargetLargestAtomicInteger "Char" - TargetLargestAtomicFloat "None" - TargetShiftRightIntArith on - TargetIntDivRoundTo "Undefined" - TargetEndianess "Unspecified" - TargetWordSize 32 - TargetTypeEmulationWarnSuppressLevel 0 - TargetPreprocMaxBitsSint 32 - TargetPreprocMaxBitsUint 32 - TargetHWDeviceType "Specified" - TargetUnknown on - ProdEqTarget on - } - Simulink.ModelReferenceCC { - $ObjectID 7 - Version "1.11.1" - UpdateModelReferenceTargets "IfOutOfDateOrStructuralChange" - CheckModelReferenceTargetMessage "error" - EnableParallelModelReferenceBuilds off - ParallelModelReferenceErrorOnInvalidPool on - ParallelModelReferenceMATLABWorkerInit "None" - ModelReferenceNumInstancesAllowed "Multi" - PropagateVarSize "Infer from blocks in model" - ModelReferencePassRootInputsByReference on - ModelReferenceMinAlgLoopOccurrences off - PropagateSignalLabelsOutOfModel off - SupportModelReferenceSimTargetCustomCode off - } - Simulink.SFSimCC { - $ObjectID 8 - Version "1.11.1" - SFSimEnableDebug on - SFSimOverflowDetection on - SFSimEcho on - SimBlas on - SimCtrlC on - SimExtrinsic on - SimIntegrity on - SimUseLocalCustomCode off - SimParseCustomCode on - SimBuildMode "sf_incremental_build" - } - Simulink.RTWCC { - $BackupClass "Simulink.RTWCC" - $ObjectID 9 - Version "1.11.1" - Array { - Type "Cell" - Dimension 1 - Cell "IncludeHyperlinkInReport" - PropName "DisabledProps" - } - SystemTargetFile "grt.tlc" - GenCodeOnly off - MakeCommand "make_rtw" - GenerateMakefile on - TemplateMakefile "grt_default_tmf" - GenerateReport off - SaveLog off - RTWVerbose on - RetainRTWFile off - ProfileTLC off - TLCDebug off - TLCCoverage off - TLCAssert off - ProcessScriptMode "Default" - ConfigurationMode "Optimized" - ConfigAtBuild off - RTWUseLocalCustomCode off - RTWUseSimCustomCode off - IncludeHyperlinkInReport off - LaunchReport off - TargetLang "C" - IncludeBusHierarchyInRTWFileBlockHierarchyMap off - IncludeERTFirstTime on - GenerateTraceInfo off - GenerateTraceReport off - GenerateTraceReportSl off - GenerateTraceReportSf off - GenerateTraceReportEml off - GenerateCodeInfo off - GenerateSLWebview off - GenerateCodeMetricsReport off - RTWCompilerOptimization "Off" - CheckMdlBeforeBuild "Off" - CustomRebuildMode "OnUpdate" - Array { - Type "Handle" - Dimension 2 - Simulink.CodeAppCC { - $ObjectID 10 - Version "1.11.1" - Array { - Type "Cell" - Dimension 16 - Cell "IgnoreCustomStorageClasses" - Cell "InsertBlockDesc" - Cell "SFDataObjDesc" - Cell "SimulinkDataObjDesc" - Cell "DefineNamingRule" - Cell "SignalNamingRule" - Cell "ParamNamingRule" - Cell "InlinedPrmAccess" - Cell "CustomSymbolStr" - Cell "CustomSymbolStrGlobalVar" - Cell "CustomSymbolStrType" - Cell "CustomSymbolStrField" - Cell "CustomSymbolStrFcn" - Cell "CustomSymbolStrBlkIO" - Cell "CustomSymbolStrTmpVar" - Cell "CustomSymbolStrMacro" - PropName "DisabledProps" - } - ForceParamTrailComments off - GenerateComments on - IgnoreCustomStorageClasses off - IgnoreTestpoints off - IncHierarchyInIds off - MaxIdLength 31 - PreserveName off - PreserveNameWithParent off - ShowEliminatedStatement on - IncAutoGenComments off - SimulinkDataObjDesc off - SFDataObjDesc off - MATLABFcnDesc off - IncDataTypeInIds off - MangleLength 1 - CustomSymbolStrGlobalVar "$R$N$M" - CustomSymbolStrType "$N$R$M" - CustomSymbolStrField "$N$M" - CustomSymbolStrFcn "$R$N$M$F" - CustomSymbolStrFcnArg "rt$I$N$M" - CustomSymbolStrBlkIO "rtb_$N$M" - CustomSymbolStrTmpVar "$N$M" - CustomSymbolStrMacro "$R$N$M" - DefineNamingRule "None" - ParamNamingRule "None" - SignalNamingRule "None" - InsertBlockDesc off - InsertPolySpaceComments off - SimulinkBlockComments on - MATLABSourceComments off - EnableCustomComments off - InlinedPrmAccess "Literals" - ReqsInCode off - UseSimReservedNames off - } - Simulink.GRTTargetCC { - $BackupClass "Simulink.TargetCC" - $ObjectID 11 - Version "1.11.1" - Array { - Type "Cell" - Dimension 12 - Cell "IncludeMdlTerminateFcn" - Cell "CombineOutputUpdateFcns" - Cell "SuppressErrorStatus" - Cell "ERTCustomFileBanners" - Cell "GenerateSampleERTMain" - Cell "GenerateTestInterfaces" - Cell "MultiInstanceERTCode" - Cell "PurelyIntegerCode" - Cell "SupportNonInlinedSFcns" - Cell "SupportComplex" - Cell "SupportAbsoluteTime" - Cell "SupportContinuousTime" - PropName "DisabledProps" - } - TargetFcnLib "ansi_tfl_tmw.mat" - TargetLibSuffix "" - TargetPreCompLibLocation "" - TargetFunctionLibrary "ANSI_C" - UtilityFuncGeneration "Auto" - ERTMultiwordTypeDef "System defined" - CodeExecutionProfiling off - ERTMultiwordLength 256 - MultiwordLength 2048 - GenerateFullHeader on - GenerateSampleERTMain off - GenerateTestInterfaces off - IsPILTarget off - ModelReferenceCompliant on - ParMdlRefBuildCompliant on - CompOptLevelCompliant on - ConcurrentExecutionCompliant on - IncludeMdlTerminateFcn on - GeneratePreprocessorConditionals "Disable all" - CombineOutputUpdateFcns off - CombineSignalStateStructs off - SuppressErrorStatus off - ERTFirstTimeCompliant off - IncludeFileDelimiter "Auto" - ERTCustomFileBanners off - SupportAbsoluteTime on - LogVarNameModifier "rt_" - MatFileLogging on - MultiInstanceERTCode off - SupportNonFinite on - SupportComplex on - PurelyIntegerCode off - SupportContinuousTime on - SupportNonInlinedSFcns on - SupportVariableSizeSignals off - EnableShiftOperators on - ParenthesesLevel "Nominal" - PortableWordSizes off - ModelStepFunctionPrototypeControlCompliant off - CPPClassGenCompliant off - AutosarCompliant off - UseMalloc off - ExtMode off - ExtModeStaticAlloc off - ExtModeTesting off - ExtModeStaticAllocSize 1000000 - ExtModeTransport 0 - ExtModeMexFile "ext_comm" - ExtModeIntrfLevel "Level1" - RTWCAPISignals off - RTWCAPIParams off - RTWCAPIStates off - RTWCAPIRootIO off - GenerateASAP2 off - } - PropName "Components" - } - } - PropName "Components" - } - Name "Configuration" - CurrentDlgPage "Solver" - ConfigPrmDlgPosition [ 326, 217, 1222, 885 ] - } - PropName "ConfigurationSets" - } - Simulink.ConfigSet { - $PropName "ActiveConfigurationSet" - $ObjectID 1 - } - BlockDefaults { - ForegroundColor "black" - BackgroundColor "white" - DropShadow off - NamePlacement "normal" - FontName "Helvetica" - FontSize 10 - FontWeight "normal" - FontAngle "normal" - ShowName on - BlockRotation 0 - BlockMirror off - } - AnnotationDefaults { - HorizontalAlignment "center" - VerticalAlignment "middle" - ForegroundColor "black" - BackgroundColor "white" - DropShadow off - FontName "Helvetica" - FontSize 10 - FontWeight "normal" - FontAngle "normal" - UseDisplayTextAsClickCallback off - } - LineDefaults { - FontName "Helvetica" - FontSize 9 - FontWeight "normal" - FontAngle "normal" - } - BlockParameterDefaults { - Block { - BlockType Constant - Value "1" - VectorParams1D on - SamplingMode "Sample based" - OutMin "[]" - OutMax "[]" - OutDataTypeStr "Inherit: Inherit from 'Constant value'" - LockScale off - SampleTime "inf" - FramePeriod "inf" - PreserveConstantTs off - } - Block { - BlockType Demux - Outputs "4" - DisplayOption "none" - BusSelectionMode off - } - Block { - BlockType DiscretePulseGenerator - PulseType "Sample based" - TimeSource "Use simulation time" - Amplitude "1" - Period "2" - PulseWidth "1" - PhaseDelay "0" - SampleTime "1" - VectorParams1D on - } - Block { - BlockType Display - Format "short" - Decimation "10" - Floating off - SampleTime "-1" - } - Block { - BlockType Inport - Port "1" - OutputFunctionCall off - OutMin "[]" - OutMax "[]" - OutDataTypeStr "Inherit: auto" - LockScale off - BusOutputAsStruct off - PortDimensions "-1" - VarSizeSig "Inherit" - SampleTime "-1" - SignalType "auto" - SamplingMode "auto" - LatchByDelayingOutsideSignal off - LatchInputForFeedbackSignals off - Interpolate on - } - Block { - BlockType Mux - Inputs "4" - DisplayOption "none" - UseBusObject off - BusObject "BusObject" - NonVirtualBus off - } - Block { - BlockType Outport - Port "1" - OutMin "[]" - OutMax "[]" - OutDataTypeStr "Inherit: auto" - LockScale off - BusOutputAsStruct off - PortDimensions "-1" - VarSizeSig "Inherit" - SampleTime "-1" - SignalType "auto" - SamplingMode "auto" - SourceOfInitialOutputValue "Dialog" - OutputWhenDisabled "held" - InitialOutput "[]" - } - Block { - BlockType Scope - ModelBased off - TickLabels "OneTimeTick" - ZoomMode "on" - Grid "on" - TimeRange "auto" - YMin "-5" - YMax "5" - SaveToWorkspace off - SaveName "ScopeData" - LimitDataPoints on - MaxDataPoints "5000" - Decimation "1" - SampleInput off - SampleTime "-1" - } - Block { - BlockType SignalSpecification - OutMin "[]" - OutMax "[]" - OutDataTypeStr "Inherit: auto" - LockScale off - BusOutputAsStruct off - Dimensions "-1" - VarSizeSig "Inherit" - SampleTime "-1" - SignalType "auto" - SamplingMode "auto" - } - Block { - BlockType SubSystem - ShowPortLabels "FromPortIcon" - Permissions "ReadWrite" - PermitHierarchicalResolution "All" - TreatAsAtomicUnit off - CheckFcnCallInpInsideContextMsg off - SystemSampleTime "-1" - RTWFcnNameOpts "Auto" - RTWFileNameOpts "Auto" - RTWMemSecFuncInitTerm "Inherit from model" - RTWMemSecFuncExecute "Inherit from model" - RTWMemSecDataConstants "Inherit from model" - RTWMemSecDataInternal "Inherit from model" - RTWMemSecDataParameters "Inherit from model" - SimViewingDevice off - DataTypeOverride "UseLocalSettings" - DataTypeOverrideAppliesTo "AllNumericTypes" - MinMaxOverflowLogging "UseLocalSettings" - SFBlockType "NONE" - Variant off - GeneratePreprocessorConditionals off - } - Block { - BlockType Sum - IconShape "rectangular" - Inputs "++" - CollapseMode "All dimensions" - CollapseDim "1" - InputSameDT on - AccumDataTypeStr "Inherit: Inherit via internal rule" - OutMin "[]" - OutMax "[]" - OutDataTypeStr "Inherit: Same as first input" - LockScale off - RndMeth "Floor" - SaturateOnIntegerOverflow on - SampleTime "-1" - } - } - System { - Name "send_receive" - Location [826, 82, 1646, 981] - Open on - ModelBrowserVisibility off - ModelBrowserWidth 247 - ScreenColor "white" - PaperOrientation "landscape" - PaperPositionMode "auto" - PaperType "usletter" - PaperUnits "inches" - TiledPaperMargins [0.500000, 0.500000, 0.500000, 0.500000] - TiledPageScale 1 - ShowPageBoundaries off - ZoomFactor "100" - ReportName "simulink-default.rpt" - SIDHighWatermark "44" - Block { - BlockType SubSystem - Name "sc_console" - SID "3" - Ports [3] - Position [410, 98, 610, 192] - BackgroundColor "lightBlue" - MinAlgLoopOccurrences off - PropExecContextOutsideSubsystem off - RTWSystemCode "Auto" - FunctionWithSeparateData off - Opaque off - RequestExecContextInheritance off - MaskHideContents off - System { - Name "sc_console" - Location [-17, 82, 1626, 997] - Open off - ModelBrowserVisibility off - ModelBrowserWidth 200 - ScreenColor "white" - PaperOrientation "landscape" - PaperPositionMode "auto" - PaperType "A4" - PaperUnits "centimeters" - TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] - TiledPageScale 1 - ShowPageBoundaries off - ZoomFactor "206" - Block { - BlockType Inport - Name "data recv" - SID "4" - Position [140, 168, 170, 182] - BackgroundColor "yellow" - IconDisplay "Port number" - } - Block { - BlockType Inport - Name "errors_status" - SID "5" - Position [140, 128, 170, 142] - BackgroundColor "yellow" - Port "2" - IconDisplay "Port number" - } - Block { - BlockType Inport - Name "data send" - SID "29" - Position [140, 208, 170, 222] - BackgroundColor "yellow" - Port "3" - IconDisplay "Port number" - } - Block { - BlockType Demux - Name "Demux" - SID "6" - Ports [1, 2] - Position [285, 116, 290, 154] - BackgroundColor "black" - ShowName off - Outputs "[2 1]" - } - Block { - BlockType Demux - Name "Demux1" - SID "32" - Ports [1, 5] - Position [375, 211, 380, 299] - ShowName off - Outputs "5" - DisplayOption "bar" - } - Block { - BlockType Demux - Name "Demux2" - SID "39" - Ports [1, 5] - Position [375, 306, 380, 394] - ShowName off - Outputs "5" - DisplayOption "bar" - } - Block { - BlockType Mux - Name "Mux" - SID "34" - Ports [2, 1] - Position [465, 236, 470, 274] - ShowName off - Inputs "2" - DisplayOption "bar" - } - Block { - BlockType Reference - Name "OpComm" - SID "9" - Ports [3, 3] - Position [225, 135, 255, 215] - LibraryVersion "1.348" - SourceBlock "rtlab/OpComm" - SourceType "RT-LAB OpComm" - nbport "3" - groupe_acq "1" - subsys_rate "0" - st "0" - Synchronization on - Interpolation on - Threshold "1.0" - Missed_Data off - Offset off - Sim_Time off - Samples off - dynSigOut off - from_console "0" - warning_done off - writeOpCommFile off - } - Block { - BlockType Sum - Name "Subtract" - SID "42" - Ports [2, 1] - Position [510, 312, 540, 343] - ZOrder -31 - Inputs "+-" - InputSameDT off - OutDataTypeStr "Inherit: Inherit via internal rule" - SaturateOnIntegerOverflow off - } - Block { - BlockType Display - Name "errors" - SID "10" - Ports [1] - Position [385, 72, 455, 118] - BackgroundColor "yellow" - FontName "Arial" - FontSize 8 - Decimation "1" - Lockdown off - } - Block { - BlockType Scope - Name "message 1" - SID "40" - Ports [1] - Position [590, 159, 620, 191] - BackgroundColor "yellow" - Floating off - Location [826, 517, 1334, 952] - Open off - NumInputPorts "1" - List { - ListType AxesTitles - axes1 "%" - } - List { - ListType ScopeGraphics - FigureColor "[0.5 0.5 0.5]" - AxesColor "[0 0 0]" - AxesTickColor "[1 1 1]" - LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" - LineStyles "-|-|-|-|-|-" - LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" - MarkerStyles "none|none|none|none|none|none" - } - YMin "-1.75" - YMax "4" - SaveName "ScopeData1" - DataFormat "StructureWithTime" - SampleTime "0" - } - Block { - BlockType Scope - Name "message 2" - SID "33" - Ports [1] - Position [590, 239, 620, 271] - BackgroundColor "yellow" - Floating off - Location [826, 517, 1334, 952] - Open off - NumInputPorts "1" - List { - ListType AxesTitles - axes1 "%" - } - List { - ListType ScopeGraphics - FigureColor "[0.5 0.5 0.5]" - AxesColor "[0 0 0]" - AxesTickColor "[1 1 1]" - LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" - LineStyles "-|-|-|-|-|-" - LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" - MarkerStyles "none|none|none|none|none|none" - } - YMin "-1.75" - YMax "4" - DataFormat "StructureWithTime" - SampleTime "0" - } - Block { - BlockType Scope - Name "message 3" - SID "41" - Ports [1] - Position [590, 389, 620, 421] - BackgroundColor "yellow" - Floating off - Location [826, 517, 1334, 952] - Open off - NumInputPorts "1" - List { - ListType AxesTitles - axes1 "%" - } - List { - ListType ScopeGraphics - FigureColor "[0.5 0.5 0.5]" - AxesColor "[0 0 0]" - AxesTickColor "[1 1 1]" - LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" - LineStyles "-|-|-|-|-|-" - LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" - MarkerStyles "none|none|none|none|none|none" - } - YMin "-1.75" - YMax "4" - SaveName "ScopeData2" - DataFormat "StructureWithTime" - SampleTime "0" - } - Block { - BlockType Scope - Name "message 4" - SID "43" - Ports [1] - Position [590, 314, 620, 346] - BackgroundColor "yellow" - Floating off - Location [826, 517, 1334, 952] - Open off - NumInputPorts "1" - List { - ListType AxesTitles - axes1 "%" - } - List { - ListType ScopeGraphics - FigureColor "[0.5 0.5 0.5]" - AxesColor "[0 0 0]" - AxesTickColor "[1 1 1]" - LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" - LineStyles "-|-|-|-|-|-" - LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" - MarkerStyles "none|none|none|none|none|none" - } - YMin "-1.75" - YMax "4" - SaveName "ScopeData3" - DataFormat "StructureWithTime" - SampleTime "0" - } - Block { - BlockType Display - Name "reception status" - SID "12" - Ports [1] - Position [390, 133, 450, 157] - BackgroundColor "yellow" - FontName "Arial" - FontSize 8 - Decimation "1" - Lockdown off - } - Line { - SrcBlock "errors_status" - SrcPort 1 - Points [25, 0; 0, 15] - DstBlock "OpComm" - DstPort 1 - } - Line { - SrcBlock "OpComm" - SrcPort 2 - Points [45, 0; 0, 80] - Branch { - Labels [1, 0] - DstBlock "Demux1" - DstPort 1 - } - Branch { - Points [0, -80] - DstBlock "message 1" - DstPort 1 - } - } - Line { - SrcBlock "data recv" - SrcPort 1 - DstBlock "OpComm" - DstPort 2 - } - Line { - SrcBlock "OpComm" - SrcPort 1 - Points [10, 0] - DstBlock "Demux" - DstPort 1 - } - Line { - SrcBlock "Demux" - SrcPort 1 - Points [45, 0; 0, -30] - DstBlock "errors" - DstPort 1 - } - Line { - SrcBlock "Demux" - SrcPort 2 - DstBlock "reception status" - DstPort 1 - } - Line { - Labels [0, 0] - SrcBlock "Mux" - SrcPort 1 - DstBlock "message 2" - DstPort 1 - } - Line { - SrcBlock "data send" - SrcPort 1 - Points [25, 0; 0, -15] - DstBlock "OpComm" - DstPort 3 - } - Line { - SrcBlock "OpComm" - SrcPort 3 - Points [25, 0; 0, 150] - Branch { - Points [0, 0] - DstBlock "Demux2" - DstPort 1 - } - Branch { - Points [0, 55] - DstBlock "message 3" - DstPort 1 - } - } - Line { - SrcBlock "Subtract" - SrcPort 1 - DstBlock "message 4" - DstPort 1 - } - Line { - SrcBlock "Demux2" - SrcPort 5 - Points [40, 0; 0, -45] - Branch { - Points [0, -70] - DstBlock "Mux" - DstPort 2 - } - Branch { - DstBlock "Subtract" - DstPort 2 - } - } - Line { - SrcBlock "Demux1" - SrcPort 5 - Points [25, 0] - Branch { - Points [0, -40] - DstBlock "Mux" - DstPort 1 - } - Branch { - Points [0, 35] - DstBlock "Subtract" - DstPort 1 - } - } - Annotation { - Name "Simple analysis of round trip time" - Position [273, 42] - FontName "Verdana" - FontSize 14 - FontWeight "bold" - } - } - } - Block { - BlockType SubSystem - Name "sm_model" - SID "13" - Ports [0, 3] - Position [55, 97, 235, 193] - BackgroundColor "lightBlue" - MinAlgLoopOccurrences off - PropExecContextOutsideSubsystem off - RTWSystemCode "Auto" - FunctionWithSeparateData off - Opaque off - RequestExecContextInheritance off - MaskHideContents off - System { - Name "sm_model" - Location [2, 82, 1662, 980] - Open on - ModelBrowserVisibility off - ModelBrowserWidth 200 - ScreenColor "white" - PaperOrientation "landscape" - PaperPositionMode "auto" - PaperType "A4" - PaperUnits "centimeters" - TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] - TiledPageScale 1 - ShowPageBoundaries off - ZoomFactor "180" - Block { - BlockType Mux - Name "Mux" - SID "16" - Ports [3, 1] - Position [870, 140, 875, 190] - ShowName off - Inputs "3" - DisplayOption "bar" - } - Block { - BlockType Mux - Name "Mux1" - SID "17" - Ports [2, 1] - Position [290, 209, 295, 271] - BackgroundColor "yellow" - ShowName off - Inputs "2" - DisplayOption "bar" - } - Block { - BlockType Reference - Name "OpIPSocketCtrl1" - SID "18" - Ports [] - Position [105, 112, 234, 173] - LibraryVersion "1.10" - SourceBlock "rtio_generic_ip/OpIPSocketCtrl" - SourceType "OpAsyncIPCtrl" - ctl_id "1" - proto "UDP/IP" - ip_addr_remote "10.10.10.1" - ip_port_remote "12000" - ip_port_local "12001" - ip_addr_mcast "0.0.0.0" - exe_name "AsyncIP" - } - Block { - BlockType DiscretePulseGenerator - Name "Pulse\nGenerator" - SID "44" - Ports [0, 1] - Position [190, 238, 240, 272] - ZOrder -13 - BackgroundColor "yellow" - PulseType "Time based" - Amplitude "5" - Period "0.1" - PulseWidth "30" - } - Block { - BlockType Constant - Name "constants" - SID "19" - Position [180, 216, 250, 234] - BackgroundColor "yellow" - NamePlacement "alternate" - Value "[1 2 3 4]" - } - Block { - BlockType DiscretePulseGenerator - Name "data ready 2 kHz" - SID "20" - Ports [0, 1] - Position [290, 131, 335, 149] - NamePlacement "alternate" - Period "10" - SampleTime "0.00005" - } - Block { - BlockType Reference - Name "receive message 1" - SID "21" - Ports [1, 3] - Position [625, 159, 800, 201] - LibraryVersion "1.348" - SourceBlock "rtlab/Communication/Asynchronous/OpAsyncRecv" - SourceType "OpAsyncRecv" - ctl_id "1" - recv_id "1" - enable_param off - fp1 "1" - fp2 "2" - fp3 "3" - fp4 "4" - fp5 "5" - sp1 "string1" - sp2 "string2" - sp3 "string3" - sp4 "string4" - sp5 "string5" - } - Block { - BlockType Reference - Name "send message 1" - SID "22" - Ports [2, 1] - Position [375, 129, 545, 171] - LibraryVersion "1.348" - SourceBlock "rtlab/Communication/Asynchronous/OpAsyncSend" - SourceType "OpAsyncSend" - ctl_id "1" - send_id "1" - mode "DONT_NEED_REPLY" - enable_param off - fp1 "1" - fp2 "2" - fp3 "3" - fp4 "4" - fp5 "5" - sp1 "string1" - sp2 "string2" - sp3 "string3" - sp4 "string4" - sp5 "string5" - } - Block { - BlockType SignalSpecification - Name "set width" - SID "23" - Position [830, 187, 855, 203] - Dimensions "5" - } - Block { - BlockType Constant - Name "timeout" - SID "25" - Position [580, 173, 610, 187] - Value "2" - } - Block { - BlockType Outport - Name "data recv" - SID "26" - Position [915, 187, 950, 203] - BackgroundColor "yellow" - IconDisplay "Port number" - } - Block { - BlockType Outport - Name "errors_status" - SID "27" - Position [915, 142, 950, 158] - BackgroundColor "yellow" - Port "2" - IconDisplay "Port number" - } - Block { - BlockType Outport - Name "data send" - SID "28" - Position [915, 232, 950, 248] - BackgroundColor "yellow" - Port "3" - IconDisplay "Port number" - } - Line { - SrcBlock "receive message 1" - SrcPort 3 - DstBlock "set width" - DstPort 1 - } - Line { - SrcBlock "receive message 1" - SrcPort 1 - DstBlock "Mux" - DstPort 2 - } - Line { - SrcBlock "receive message 1" - SrcPort 2 - DstBlock "Mux" - DstPort 3 - } - Line { - SrcBlock "timeout" - SrcPort 1 - DstBlock "receive message 1" - DstPort 1 - } - Line { - SrcBlock "send message 1" - SrcPort 1 - DstBlock "Mux" - DstPort 1 - } - Line { - SrcBlock "Mux" - SrcPort 1 - Points [0, -15] - DstBlock "errors_status" - DstPort 1 - } - Line { - SrcBlock "set width" - SrcPort 1 - DstBlock "data recv" - DstPort 1 - } - Line { - SrcBlock "constants" - SrcPort 1 - DstBlock "Mux1" - DstPort 1 - } - Line { - Labels [0, 0] - SrcBlock "Mux1" - SrcPort 1 - Points [45, 0] - Branch { - Points [0, -80] - DstBlock "send message 1" - DstPort 2 - } - Branch { - Labels [1, 0] - DstBlock "data send" - DstPort 1 - } - } - Line { - SrcBlock "data ready 2 kHz" - SrcPort 1 - DstBlock "send message 1" - DstPort 1 - } - Line { - SrcBlock "Pulse\nGenerator" - SrcPort 1 - DstBlock "Mux1" - DstPort 2 - } - Annotation { - Name "Simple S2SS to OPAL test using UDP messages" - Position [288, 52] - FontName "Verdana" - FontSize 14 - FontWeight "bold" - } - } - } - Line { - SrcBlock "sm_model" - SrcPort 1 - DstBlock "sc_console" - DstPort 1 - } - Line { - SrcBlock "sm_model" - SrcPort 2 - DstBlock "sc_console" - DstPort 2 - } - Line { - Labels [0, 0] - SrcBlock "sm_model" - SrcPort 3 - DstBlock "sc_console" - DstPort 3 - } - } -} +# $Revision: 1.1 $ +Model { + Name "send_receive" + Version 7.8 + MdlSubVersion 0 + GraphicalInterface { + NumRootInports 0 + NumRootOutports 0 + ParameterArgumentNames "" + ComputedModelVersion "1.445" + NumModelReferences 0 + NumTestPointedSignals 0 + } + SavedCharacterEncoding "windows-1252" + SaveDefaultBlockParams on + ScopeRefreshTime 0.035000 + OverrideScopeRefreshTime on + DisableAllScopes off + DataTypeOverride "UseLocalSettings" + DataTypeOverrideAppliesTo "AllNumericTypes" + MinMaxOverflowLogging "UseLocalSettings" + MinMaxOverflowArchiveMode "Overwrite" + FPTRunName "Run 1" + MaxMDLFileLineLength 120 + Created "Thu Apr 15 08:21:54 1999" + Creator "jwu" + UpdateHistory "UpdateHistoryNever" + ModifiedByFormat "%" + LastModifiedBy "ACS" + ModifiedDateFormat "%" + LastModifiedDate "Thu Sep 04 16:25:19 2014" + RTWModifiedTimeStamp 331748717 + ModelVersionFormat "1.%" + ConfigurationManager "none" + SampleTimeColors off + SampleTimeAnnotations off + LibraryLinkDisplay "none" + WideLines off + ShowLineDimensions on + ShowPortDataTypes off + ShowDesignRanges off + ShowLoopsOnError on + IgnoreBidirectionalLines off + ShowStorageClass off + ShowTestPointIcons on + ShowSignalResolutionIcons on + ShowViewerIcons on + SortedOrder off + ExecutionContextIcon off + ShowLinearizationAnnotations on + BlockNameDataTip off + BlockParametersDataTip on + BlockDescriptionStringDataTip off + ToolBar on + StatusBar on + BrowserShowLibraryLinks off + BrowserLookUnderMasks off + SimulationMode "normal" + LinearizationMsg "none" + Profile off + ParamWorkspaceSource "MATLABWorkspace" + AccelSystemTargetFile "accel.tlc" + AccelTemplateMakefile "accel_default_tmf" + AccelMakeCommand "make_rtw" + TryForcingSFcnDF off + RecordCoverage off + CovPath "/" + CovSaveName "covdata" + CovMetricSettings "dw" + CovNameIncrementing off + CovHtmlReporting on + CovForceBlockReductionOff on + covSaveCumulativeToWorkspaceVar on + CovSaveSingleToWorkspaceVar on + CovCumulativeVarName "covCumulativeData" + CovCumulativeReport off + CovReportOnPause on + CovModelRefEnable "Off" + CovExternalEMLEnable off + ExtModeBatchMode off + ExtModeEnableFloating on + ExtModeTrigType "manual" + ExtModeTrigMode "oneshot" + ExtModeTrigPort "1" + ExtModeTrigElement "any" + ExtModeTrigDuration 1000 + ExtModeTrigDurationFloating "auto" + ExtModeTrigHoldOff 0 + ExtModeTrigDelay 0 + ExtModeTrigDirection "rising" + ExtModeTrigLevel 0 + ExtModeArchiveMode "off" + ExtModeAutoIncOneShot off + ExtModeIncDirWhenArm off + ExtModeAddSuffixToVar off + ExtModeWriteAllDataToWs off + ExtModeArmWhenConnect off + ExtModeSkipDownloadWhenConnect off + ExtModeLogAll on + ExtModeAutoUpdateStatusClock on + BufferReuse off + ShowModelReferenceBlockVersion off + ShowModelReferenceBlockIO off + Array { + Type "Handle" + Dimension 1 + Simulink.ConfigSet { + $ObjectID 1 + Version "1.11.1" + Array { + Type "Handle" + Dimension 8 + Simulink.SolverCC { + $ObjectID 2 + Version "1.11.1" + StartTime "0.0" + StopTime "inf" + AbsTol "1e-6" + FixedStep "0.00005" + InitialStep "auto" + MaxNumMinSteps "-1" + MaxOrder 5 + ZcThreshold "auto" + ConsecutiveZCsStepRelTol "10*128*eps" + MaxConsecutiveZCs "1000" + ExtrapolationOrder 4 + NumberNewtonIterations 1 + MaxStep "0.01" + MinStep "auto" + MaxConsecutiveMinStep "1" + RelTol "1e-3" + SolverMode "SingleTasking" + ConcurrentTasks off + Solver "ode4" + SolverName "ode4" + SolverJacobianMethodControl "auto" + ShapePreserveControl "DisableAll" + ZeroCrossControl "UseLocalSettings" + ZeroCrossAlgorithm "Nonadaptive" + AlgebraicLoopSolver "TrustRegion" + SolverResetMethod "Fast" + PositivePriorityOrder off + AutoInsertRateTranBlk off + SampleTimeConstraint "Unconstrained" + InsertRTBMode "Whenever possible" + } + Simulink.DataIOCC { + $ObjectID 3 + Version "1.11.1" + Decimation "1" + ExternalInput "[]" + FinalStateName "xFinal" + InitialState "[]" + LimitDataPoints off + MaxDataPoints "1000" + LoadExternalInput off + LoadInitialState off + SaveFinalState off + SaveCompleteFinalSimState off + SaveFormat "Array" + SignalLoggingSaveFormat "ModelDataLogs" + SaveOutput off + SaveState off + SignalLogging on + DSMLogging on + InspectSignalLogs off + SaveTime off + ReturnWorkspaceOutputs off + StateSaveName "xout" + TimeSaveName "tout" + OutputSaveName "yout" + SignalLoggingName "sigsOut" + DSMLoggingName "dsmout" + OutputOption "RefineOutputTimes" + OutputTimes "[]" + ReturnWorkspaceOutputsName "out" + Refine "1" + } + Simulink.OptimizationCC { + $ObjectID 4 + Version "1.11.1" + Array { + Type "Cell" + Dimension 4 + Cell "ZeroExternalMemoryAtStartup" + Cell "ZeroInternalMemoryAtStartup" + Cell "NoFixptDivByZeroProtection" + Cell "OptimizeModelRefInitCode" + PropName "DisabledProps" + } + BlockReduction on + BooleanDataType off + ConditionallyExecuteInputs on + InlineParams off + UseIntDivNetSlope off + UseFloatMulNetSlope off + UseSpecifiedMinMax off + InlineInvariantSignals off + OptimizeBlockIOStorage off + BufferReuse off + EnhancedBackFolding off + StrengthReduction off + ExpressionFolding off + BooleansAsBitfields off + BitfieldContainerType "uint_T" + EnableMemcpy on + MemcpyThreshold 64 + PassReuseOutputArgsAs "Structure reference" + ExpressionDepthLimit 2147483647 + FoldNonRolledExpr off + LocalBlockOutputs off + RollThreshold 5 + SystemCodeInlineAuto off + StateBitsets off + DataBitsets off + UseTempVars off + ZeroExternalMemoryAtStartup on + ZeroInternalMemoryAtStartup on + InitFltsAndDblsToZero on + NoFixptDivByZeroProtection off + EfficientFloat2IntCast off + EfficientMapNaN2IntZero on + OptimizeModelRefInitCode off + LifeSpan "inf" + MaxStackSize "Inherit from target" + BufferReusableBoundary on + SimCompilerOptimization "Off" + AccelVerboseBuild off + AccelParallelForEachSubsystem on + } + Simulink.DebuggingCC { + $ObjectID 5 + Version "1.11.1" + RTPrefix "error" + ConsistencyChecking "none" + ArrayBoundsChecking "none" + SignalInfNanChecking "none" + SignalRangeChecking "none" + ReadBeforeWriteMsg "UseLocalSettings" + WriteAfterWriteMsg "UseLocalSettings" + WriteAfterReadMsg "UseLocalSettings" + AlgebraicLoopMsg "warning" + ArtificialAlgebraicLoopMsg "warning" + SaveWithDisabledLinksMsg "warning" + SaveWithParameterizedLinksMsg "none" + CheckSSInitialOutputMsg on + UnderspecifiedInitializationDetection "Classic" + MergeDetectMultiDrivingBlocksExec "none" + CheckExecutionContextPreStartOutputMsg off + CheckExecutionContextRuntimeOutputMsg off + SignalResolutionControl "TryResolveAllWithWarning" + BlockPriorityViolationMsg "warning" + MinStepSizeMsg "warning" + TimeAdjustmentMsg "none" + MaxConsecutiveZCsMsg "error" + MaskedZcDiagnostic "warning" + IgnoredZcDiagnostic "warning" + SolverPrmCheckMsg "none" + InheritedTsInSrcMsg "none" + DiscreteInheritContinuousMsg "warning" + MultiTaskDSMMsg "warning" + MultiTaskCondExecSysMsg "none" + MultiTaskRateTransMsg "error" + SingleTaskRateTransMsg "none" + TasksWithSamePriorityMsg "warning" + SigSpecEnsureSampleTimeMsg "warning" + CheckMatrixSingularityMsg "none" + IntegerOverflowMsg "warning" + Int32ToFloatConvMsg "warning" + ParameterDowncastMsg "error" + ParameterOverflowMsg "error" + ParameterUnderflowMsg "none" + ParameterPrecisionLossMsg "warning" + ParameterTunabilityLossMsg "warning" + FixptConstUnderflowMsg "none" + FixptConstOverflowMsg "none" + FixptConstPrecisionLossMsg "none" + UnderSpecifiedDataTypeMsg "none" + UnnecessaryDatatypeConvMsg "none" + VectorMatrixConversionMsg "none" + InvalidFcnCallConnMsg "error" + FcnCallInpInsideContextMsg "Use local settings" + SignalLabelMismatchMsg "none" + UnconnectedInputMsg "warning" + UnconnectedOutputMsg "warning" + UnconnectedLineMsg "warning" + SFcnCompatibilityMsg "none" + FrameProcessingCompatibilityMsg "warning" + UniqueDataStoreMsg "none" + BusObjectLabelMismatch "warning" + RootOutportRequireBusObject "warning" + AssertControl "UseLocalSettings" + EnableOverflowDetection off + ModelReferenceIOMsg "none" + ModelReferenceMultiInstanceNormalModeStructChecksumCheck "error" + ModelReferenceVersionMismatchMessage "none" + ModelReferenceIOMismatchMessage "none" + ModelReferenceCSMismatchMessage "none" + UnknownTsInhSupMsg "warning" + ModelReferenceDataLoggingMessage "warning" + ModelReferenceSymbolNameMessage "warning" + ModelReferenceExtraNoncontSigs "error" + StateNameClashWarn "warning" + SimStateInterfaceChecksumMismatchMsg "warning" + SimStateOlderReleaseMsg "error" + InitInArrayFormatMsg "warning" + StrictBusMsg "None" + BusNameAdapt "WarnAndRepair" + NonBusSignalsTreatedAsBus "none" + LoggingUnavailableSignals "error" + BlockIODiagnostic "none" + SFUnusedDataAndEventsDiag "warning" + SFUnexpectedBacktrackingDiag "warning" + SFInvalidInputDataAccessInChartInitDiag "warning" + SFNoUnconditionalDefaultTransitionDiag "warning" + SFTransitionOutsideNaturalParentDiag "warning" + SFUnconditionalTransitionShadowingDiag "warning" + } + Simulink.HardwareCC { + $ObjectID 6 + Version "1.11.1" + ProdBitPerChar 8 + ProdBitPerShort 16 + ProdBitPerInt 32 + ProdBitPerLong 32 + ProdBitPerFloat 32 + ProdBitPerDouble 64 + ProdBitPerPointer 32 + ProdLargestAtomicInteger "Char" + ProdLargestAtomicFloat "None" + ProdIntDivRoundTo "Undefined" + ProdEndianess "Unspecified" + ProdWordSize 32 + ProdShiftRightIntArith on + ProdHWDeviceType "32-bit Generic" + TargetBitPerChar 8 + TargetBitPerShort 16 + TargetBitPerInt 32 + TargetBitPerLong 32 + TargetBitPerFloat 32 + TargetBitPerDouble 64 + TargetBitPerPointer 32 + TargetLargestAtomicInteger "Char" + TargetLargestAtomicFloat "None" + TargetShiftRightIntArith on + TargetIntDivRoundTo "Undefined" + TargetEndianess "Unspecified" + TargetWordSize 32 + TargetTypeEmulationWarnSuppressLevel 0 + TargetPreprocMaxBitsSint 32 + TargetPreprocMaxBitsUint 32 + TargetHWDeviceType "Specified" + TargetUnknown on + ProdEqTarget on + } + Simulink.ModelReferenceCC { + $ObjectID 7 + Version "1.11.1" + UpdateModelReferenceTargets "IfOutOfDateOrStructuralChange" + CheckModelReferenceTargetMessage "error" + EnableParallelModelReferenceBuilds off + ParallelModelReferenceErrorOnInvalidPool on + ParallelModelReferenceMATLABWorkerInit "None" + ModelReferenceNumInstancesAllowed "Multi" + PropagateVarSize "Infer from blocks in model" + ModelReferencePassRootInputsByReference on + ModelReferenceMinAlgLoopOccurrences off + PropagateSignalLabelsOutOfModel off + SupportModelReferenceSimTargetCustomCode off + } + Simulink.SFSimCC { + $ObjectID 8 + Version "1.11.1" + SFSimEnableDebug on + SFSimOverflowDetection on + SFSimEcho on + SimBlas on + SimCtrlC on + SimExtrinsic on + SimIntegrity on + SimUseLocalCustomCode off + SimParseCustomCode on + SimBuildMode "sf_incremental_build" + } + Simulink.RTWCC { + $BackupClass "Simulink.RTWCC" + $ObjectID 9 + Version "1.11.1" + Array { + Type "Cell" + Dimension 1 + Cell "IncludeHyperlinkInReport" + PropName "DisabledProps" + } + SystemTargetFile "grt.tlc" + GenCodeOnly off + MakeCommand "make_rtw" + GenerateMakefile on + TemplateMakefile "grt_default_tmf" + GenerateReport off + SaveLog off + RTWVerbose on + RetainRTWFile off + ProfileTLC off + TLCDebug off + TLCCoverage off + TLCAssert off + ProcessScriptMode "Default" + ConfigurationMode "Optimized" + ConfigAtBuild off + RTWUseLocalCustomCode off + RTWUseSimCustomCode off + IncludeHyperlinkInReport off + LaunchReport off + TargetLang "C" + IncludeBusHierarchyInRTWFileBlockHierarchyMap off + IncludeERTFirstTime on + GenerateTraceInfo off + GenerateTraceReport off + GenerateTraceReportSl off + GenerateTraceReportSf off + GenerateTraceReportEml off + GenerateCodeInfo off + GenerateSLWebview off + GenerateCodeMetricsReport off + RTWCompilerOptimization "Off" + CheckMdlBeforeBuild "Off" + CustomRebuildMode "OnUpdate" + Array { + Type "Handle" + Dimension 2 + Simulink.CodeAppCC { + $ObjectID 10 + Version "1.11.1" + Array { + Type "Cell" + Dimension 16 + Cell "IgnoreCustomStorageClasses" + Cell "InsertBlockDesc" + Cell "SFDataObjDesc" + Cell "SimulinkDataObjDesc" + Cell "DefineNamingRule" + Cell "SignalNamingRule" + Cell "ParamNamingRule" + Cell "InlinedPrmAccess" + Cell "CustomSymbolStr" + Cell "CustomSymbolStrGlobalVar" + Cell "CustomSymbolStrType" + Cell "CustomSymbolStrField" + Cell "CustomSymbolStrFcn" + Cell "CustomSymbolStrBlkIO" + Cell "CustomSymbolStrTmpVar" + Cell "CustomSymbolStrMacro" + PropName "DisabledProps" + } + ForceParamTrailComments off + GenerateComments on + IgnoreCustomStorageClasses off + IgnoreTestpoints off + IncHierarchyInIds off + MaxIdLength 31 + PreserveName off + PreserveNameWithParent off + ShowEliminatedStatement on + IncAutoGenComments off + SimulinkDataObjDesc off + SFDataObjDesc off + MATLABFcnDesc off + IncDataTypeInIds off + MangleLength 1 + CustomSymbolStrGlobalVar "$R$N$M" + CustomSymbolStrType "$N$R$M" + CustomSymbolStrField "$N$M" + CustomSymbolStrFcn "$R$N$M$F" + CustomSymbolStrFcnArg "rt$I$N$M" + CustomSymbolStrBlkIO "rtb_$N$M" + CustomSymbolStrTmpVar "$N$M" + CustomSymbolStrMacro "$R$N$M" + DefineNamingRule "None" + ParamNamingRule "None" + SignalNamingRule "None" + InsertBlockDesc off + InsertPolySpaceComments off + SimulinkBlockComments on + MATLABSourceComments off + EnableCustomComments off + InlinedPrmAccess "Literals" + ReqsInCode off + UseSimReservedNames off + } + Simulink.GRTTargetCC { + $BackupClass "Simulink.TargetCC" + $ObjectID 11 + Version "1.11.1" + Array { + Type "Cell" + Dimension 12 + Cell "IncludeMdlTerminateFcn" + Cell "CombineOutputUpdateFcns" + Cell "SuppressErrorStatus" + Cell "ERTCustomFileBanners" + Cell "GenerateSampleERTMain" + Cell "GenerateTestInterfaces" + Cell "MultiInstanceERTCode" + Cell "PurelyIntegerCode" + Cell "SupportNonInlinedSFcns" + Cell "SupportComplex" + Cell "SupportAbsoluteTime" + Cell "SupportContinuousTime" + PropName "DisabledProps" + } + TargetFcnLib "ansi_tfl_tmw.mat" + TargetLibSuffix "" + TargetPreCompLibLocation "" + TargetFunctionLibrary "ANSI_C" + UtilityFuncGeneration "Auto" + ERTMultiwordTypeDef "System defined" + CodeExecutionProfiling off + ERTMultiwordLength 256 + MultiwordLength 2048 + GenerateFullHeader on + GenerateSampleERTMain off + GenerateTestInterfaces off + IsPILTarget off + ModelReferenceCompliant on + ParMdlRefBuildCompliant on + CompOptLevelCompliant on + ConcurrentExecutionCompliant on + IncludeMdlTerminateFcn on + GeneratePreprocessorConditionals "Disable all" + CombineOutputUpdateFcns off + CombineSignalStateStructs off + SuppressErrorStatus off + ERTFirstTimeCompliant off + IncludeFileDelimiter "Auto" + ERTCustomFileBanners off + SupportAbsoluteTime on + LogVarNameModifier "rt_" + MatFileLogging on + MultiInstanceERTCode off + SupportNonFinite on + SupportComplex on + PurelyIntegerCode off + SupportContinuousTime on + SupportNonInlinedSFcns on + SupportVariableSizeSignals off + EnableShiftOperators on + ParenthesesLevel "Nominal" + PortableWordSizes off + ModelStepFunctionPrototypeControlCompliant off + CPPClassGenCompliant off + AutosarCompliant off + UseMalloc off + ExtMode off + ExtModeStaticAlloc off + ExtModeTesting off + ExtModeStaticAllocSize 1000000 + ExtModeTransport 0 + ExtModeMexFile "ext_comm" + ExtModeIntrfLevel "Level1" + RTWCAPISignals off + RTWCAPIParams off + RTWCAPIStates off + RTWCAPIRootIO off + GenerateASAP2 off + } + PropName "Components" + } + } + PropName "Components" + } + Name "Configuration" + CurrentDlgPage "Solver" + ConfigPrmDlgPosition [ 326, 217, 1222, 885 ] + } + PropName "ConfigurationSets" + } + Simulink.ConfigSet { + $PropName "ActiveConfigurationSet" + $ObjectID 1 + } + BlockDefaults { + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + NamePlacement "normal" + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + ShowName on + BlockRotation 0 + BlockMirror off + } + AnnotationDefaults { + HorizontalAlignment "center" + VerticalAlignment "middle" + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + UseDisplayTextAsClickCallback off + } + LineDefaults { + FontName "Helvetica" + FontSize 9 + FontWeight "normal" + FontAngle "normal" + } + BlockParameterDefaults { + Block { + BlockType Constant + Value "1" + VectorParams1D on + SamplingMode "Sample based" + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: Inherit from 'Constant value'" + LockScale off + SampleTime "inf" + FramePeriod "inf" + PreserveConstantTs off + } + Block { + BlockType Demux + Outputs "4" + DisplayOption "none" + BusSelectionMode off + } + Block { + BlockType DiscretePulseGenerator + PulseType "Sample based" + TimeSource "Use simulation time" + Amplitude "1" + Period "2" + PulseWidth "1" + PhaseDelay "0" + SampleTime "1" + VectorParams1D on + } + Block { + BlockType Display + Format "short" + Decimation "10" + Floating off + SampleTime "-1" + } + Block { + BlockType Inport + Port "1" + OutputFunctionCall off + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: auto" + LockScale off + BusOutputAsStruct off + PortDimensions "-1" + VarSizeSig "Inherit" + SampleTime "-1" + SignalType "auto" + SamplingMode "auto" + LatchByDelayingOutsideSignal off + LatchInputForFeedbackSignals off + Interpolate on + } + Block { + BlockType Mux + Inputs "4" + DisplayOption "none" + UseBusObject off + BusObject "BusObject" + NonVirtualBus off + } + Block { + BlockType Outport + Port "1" + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: auto" + LockScale off + BusOutputAsStruct off + PortDimensions "-1" + VarSizeSig "Inherit" + SampleTime "-1" + SignalType "auto" + SamplingMode "auto" + SourceOfInitialOutputValue "Dialog" + OutputWhenDisabled "held" + InitialOutput "[]" + } + Block { + BlockType Scope + ModelBased off + TickLabels "OneTimeTick" + ZoomMode "on" + Grid "on" + TimeRange "auto" + YMin "-5" + YMax "5" + SaveToWorkspace off + SaveName "ScopeData" + LimitDataPoints on + MaxDataPoints "5000" + Decimation "1" + SampleInput off + SampleTime "-1" + } + Block { + BlockType SignalSpecification + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: auto" + LockScale off + BusOutputAsStruct off + Dimensions "-1" + VarSizeSig "Inherit" + SampleTime "-1" + SignalType "auto" + SamplingMode "auto" + } + Block { + BlockType SubSystem + ShowPortLabels "FromPortIcon" + Permissions "ReadWrite" + PermitHierarchicalResolution "All" + TreatAsAtomicUnit off + CheckFcnCallInpInsideContextMsg off + SystemSampleTime "-1" + RTWFcnNameOpts "Auto" + RTWFileNameOpts "Auto" + RTWMemSecFuncInitTerm "Inherit from model" + RTWMemSecFuncExecute "Inherit from model" + RTWMemSecDataConstants "Inherit from model" + RTWMemSecDataInternal "Inherit from model" + RTWMemSecDataParameters "Inherit from model" + SimViewingDevice off + DataTypeOverride "UseLocalSettings" + DataTypeOverrideAppliesTo "AllNumericTypes" + MinMaxOverflowLogging "UseLocalSettings" + SFBlockType "NONE" + Variant off + GeneratePreprocessorConditionals off + } + Block { + BlockType Sum + IconShape "rectangular" + Inputs "++" + CollapseMode "All dimensions" + CollapseDim "1" + InputSameDT on + AccumDataTypeStr "Inherit: Inherit via internal rule" + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: Same as first input" + LockScale off + RndMeth "Floor" + SaturateOnIntegerOverflow on + SampleTime "-1" + } + } + System { + Name "send_receive" + Location [826, 82, 1646, 981] + Open on + ModelBrowserVisibility off + ModelBrowserWidth 247 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "usletter" + PaperUnits "inches" + TiledPaperMargins [0.500000, 0.500000, 0.500000, 0.500000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + ReportName "simulink-default.rpt" + SIDHighWatermark "44" + Block { + BlockType SubSystem + Name "sc_console" + SID "3" + Ports [3] + Position [410, 98, 610, 192] + BackgroundColor "lightBlue" + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + System { + Name "sc_console" + Location [-17, 82, 1626, 997] + Open off + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "206" + Block { + BlockType Inport + Name "data recv" + SID "4" + Position [140, 168, 170, 182] + BackgroundColor "yellow" + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "errors_status" + SID "5" + Position [140, 128, 170, 142] + BackgroundColor "yellow" + Port "2" + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "data send" + SID "29" + Position [140, 208, 170, 222] + BackgroundColor "yellow" + Port "3" + IconDisplay "Port number" + } + Block { + BlockType Demux + Name "Demux" + SID "6" + Ports [1, 2] + Position [285, 116, 290, 154] + BackgroundColor "black" + ShowName off + Outputs "[2 1]" + } + Block { + BlockType Demux + Name "Demux1" + SID "32" + Ports [1, 5] + Position [375, 211, 380, 299] + ShowName off + Outputs "5" + DisplayOption "bar" + } + Block { + BlockType Demux + Name "Demux2" + SID "39" + Ports [1, 5] + Position [375, 306, 380, 394] + ShowName off + Outputs "5" + DisplayOption "bar" + } + Block { + BlockType Mux + Name "Mux" + SID "34" + Ports [2, 1] + Position [465, 236, 470, 274] + ShowName off + Inputs "2" + DisplayOption "bar" + } + Block { + BlockType Reference + Name "OpComm" + SID "9" + Ports [3, 3] + Position [225, 135, 255, 215] + LibraryVersion "1.348" + SourceBlock "rtlab/OpComm" + SourceType "RT-LAB OpComm" + nbport "3" + groupe_acq "1" + subsys_rate "0" + st "0" + Synchronization on + Interpolation on + Threshold "1.0" + Missed_Data off + Offset off + Sim_Time off + Samples off + dynSigOut off + from_console "0" + warning_done off + writeOpCommFile off + } + Block { + BlockType Sum + Name "Subtract" + SID "42" + Ports [2, 1] + Position [510, 312, 540, 343] + ZOrder -31 + Inputs "+-" + InputSameDT off + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + } + Block { + BlockType Display + Name "errors" + SID "10" + Ports [1] + Position [385, 72, 455, 118] + BackgroundColor "yellow" + FontName "Arial" + FontSize 8 + Decimation "1" + Lockdown off + } + Block { + BlockType Scope + Name "message 1" + SID "40" + Ports [1] + Position [590, 159, 620, 191] + BackgroundColor "yellow" + Floating off + Location [826, 517, 1334, 952] + Open off + NumInputPorts "1" + List { + ListType AxesTitles + axes1 "%" + } + List { + ListType ScopeGraphics + FigureColor "[0.5 0.5 0.5]" + AxesColor "[0 0 0]" + AxesTickColor "[1 1 1]" + LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" + LineStyles "-|-|-|-|-|-" + LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" + MarkerStyles "none|none|none|none|none|none" + } + YMin "-1.75" + YMax "4" + SaveName "ScopeData1" + DataFormat "StructureWithTime" + SampleTime "0" + } + Block { + BlockType Scope + Name "message 2" + SID "33" + Ports [1] + Position [590, 239, 620, 271] + BackgroundColor "yellow" + Floating off + Location [826, 517, 1334, 952] + Open off + NumInputPorts "1" + List { + ListType AxesTitles + axes1 "%" + } + List { + ListType ScopeGraphics + FigureColor "[0.5 0.5 0.5]" + AxesColor "[0 0 0]" + AxesTickColor "[1 1 1]" + LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" + LineStyles "-|-|-|-|-|-" + LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" + MarkerStyles "none|none|none|none|none|none" + } + YMin "-1.75" + YMax "4" + DataFormat "StructureWithTime" + SampleTime "0" + } + Block { + BlockType Scope + Name "message 3" + SID "41" + Ports [1] + Position [590, 389, 620, 421] + BackgroundColor "yellow" + Floating off + Location [826, 517, 1334, 952] + Open off + NumInputPorts "1" + List { + ListType AxesTitles + axes1 "%" + } + List { + ListType ScopeGraphics + FigureColor "[0.5 0.5 0.5]" + AxesColor "[0 0 0]" + AxesTickColor "[1 1 1]" + LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" + LineStyles "-|-|-|-|-|-" + LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" + MarkerStyles "none|none|none|none|none|none" + } + YMin "-1.75" + YMax "4" + SaveName "ScopeData2" + DataFormat "StructureWithTime" + SampleTime "0" + } + Block { + BlockType Scope + Name "message 4" + SID "43" + Ports [1] + Position [590, 314, 620, 346] + BackgroundColor "yellow" + Floating off + Location [826, 517, 1334, 952] + Open off + NumInputPorts "1" + List { + ListType AxesTitles + axes1 "%" + } + List { + ListType ScopeGraphics + FigureColor "[0.5 0.5 0.5]" + AxesColor "[0 0 0]" + AxesTickColor "[1 1 1]" + LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" + LineStyles "-|-|-|-|-|-" + LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" + MarkerStyles "none|none|none|none|none|none" + } + YMin "-1.75" + YMax "4" + SaveName "ScopeData3" + DataFormat "StructureWithTime" + SampleTime "0" + } + Block { + BlockType Display + Name "reception status" + SID "12" + Ports [1] + Position [390, 133, 450, 157] + BackgroundColor "yellow" + FontName "Arial" + FontSize 8 + Decimation "1" + Lockdown off + } + Line { + SrcBlock "errors_status" + SrcPort 1 + Points [25, 0; 0, 15] + DstBlock "OpComm" + DstPort 1 + } + Line { + SrcBlock "OpComm" + SrcPort 2 + Points [45, 0; 0, 80] + Branch { + Labels [1, 0] + DstBlock "Demux1" + DstPort 1 + } + Branch { + Points [0, -80] + DstBlock "message 1" + DstPort 1 + } + } + Line { + SrcBlock "data recv" + SrcPort 1 + DstBlock "OpComm" + DstPort 2 + } + Line { + SrcBlock "OpComm" + SrcPort 1 + Points [10, 0] + DstBlock "Demux" + DstPort 1 + } + Line { + SrcBlock "Demux" + SrcPort 1 + Points [45, 0; 0, -30] + DstBlock "errors" + DstPort 1 + } + Line { + SrcBlock "Demux" + SrcPort 2 + DstBlock "reception status" + DstPort 1 + } + Line { + Labels [0, 0] + SrcBlock "Mux" + SrcPort 1 + DstBlock "message 2" + DstPort 1 + } + Line { + SrcBlock "data send" + SrcPort 1 + Points [25, 0; 0, -15] + DstBlock "OpComm" + DstPort 3 + } + Line { + SrcBlock "OpComm" + SrcPort 3 + Points [25, 0; 0, 150] + Branch { + Points [0, 0] + DstBlock "Demux2" + DstPort 1 + } + Branch { + Points [0, 55] + DstBlock "message 3" + DstPort 1 + } + } + Line { + SrcBlock "Subtract" + SrcPort 1 + DstBlock "message 4" + DstPort 1 + } + Line { + SrcBlock "Demux2" + SrcPort 5 + Points [40, 0; 0, -45] + Branch { + Points [0, -70] + DstBlock "Mux" + DstPort 2 + } + Branch { + DstBlock "Subtract" + DstPort 2 + } + } + Line { + SrcBlock "Demux1" + SrcPort 5 + Points [25, 0] + Branch { + Points [0, -40] + DstBlock "Mux" + DstPort 1 + } + Branch { + Points [0, 35] + DstBlock "Subtract" + DstPort 1 + } + } + Annotation { + Name "Simple analysis of round trip time" + Position [273, 42] + FontName "Verdana" + FontSize 14 + FontWeight "bold" + } + } + } + Block { + BlockType SubSystem + Name "sm_model" + SID "13" + Ports [0, 3] + Position [55, 97, 235, 193] + BackgroundColor "lightBlue" + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + System { + Name "sm_model" + Location [2, 82, 1662, 980] + Open on + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "180" + Block { + BlockType Mux + Name "Mux" + SID "16" + Ports [3, 1] + Position [870, 140, 875, 190] + ShowName off + Inputs "3" + DisplayOption "bar" + } + Block { + BlockType Mux + Name "Mux1" + SID "17" + Ports [2, 1] + Position [290, 209, 295, 271] + BackgroundColor "yellow" + ShowName off + Inputs "2" + DisplayOption "bar" + } + Block { + BlockType Reference + Name "OpIPSocketCtrl1" + SID "18" + Ports [] + Position [105, 112, 234, 173] + LibraryVersion "1.10" + SourceBlock "rtio_generic_ip/OpIPSocketCtrl" + SourceType "OpAsyncIPCtrl" + ctl_id "1" + proto "UDP/IP" + ip_addr_remote "10.10.10.1" + ip_port_remote "12000" + ip_port_local "12001" + ip_addr_mcast "0.0.0.0" + exe_name "AsyncIP" + } + Block { + BlockType DiscretePulseGenerator + Name "Pulse\nGenerator" + SID "44" + Ports [0, 1] + Position [190, 238, 240, 272] + ZOrder -13 + BackgroundColor "yellow" + PulseType "Time based" + Amplitude "5" + Period "0.1" + PulseWidth "30" + } + Block { + BlockType Constant + Name "constants" + SID "19" + Position [180, 216, 250, 234] + BackgroundColor "yellow" + NamePlacement "alternate" + Value "[1 2 3 4]" + } + Block { + BlockType DiscretePulseGenerator + Name "data ready 2 kHz" + SID "20" + Ports [0, 1] + Position [290, 131, 335, 149] + NamePlacement "alternate" + Period "10" + SampleTime "0.00005" + } + Block { + BlockType Reference + Name "receive message 1" + SID "21" + Ports [1, 3] + Position [625, 159, 800, 201] + LibraryVersion "1.348" + SourceBlock "rtlab/Communication/Asynchronous/OpAsyncRecv" + SourceType "OpAsyncRecv" + ctl_id "1" + recv_id "1" + enable_param off + fp1 "1" + fp2 "2" + fp3 "3" + fp4 "4" + fp5 "5" + sp1 "string1" + sp2 "string2" + sp3 "string3" + sp4 "string4" + sp5 "string5" + } + Block { + BlockType Reference + Name "send message 1" + SID "22" + Ports [2, 1] + Position [375, 129, 545, 171] + LibraryVersion "1.348" + SourceBlock "rtlab/Communication/Asynchronous/OpAsyncSend" + SourceType "OpAsyncSend" + ctl_id "1" + send_id "1" + mode "DONT_NEED_REPLY" + enable_param off + fp1 "1" + fp2 "2" + fp3 "3" + fp4 "4" + fp5 "5" + sp1 "string1" + sp2 "string2" + sp3 "string3" + sp4 "string4" + sp5 "string5" + } + Block { + BlockType SignalSpecification + Name "set width" + SID "23" + Position [830, 187, 855, 203] + Dimensions "5" + } + Block { + BlockType Constant + Name "timeout" + SID "25" + Position [580, 173, 610, 187] + Value "2" + } + Block { + BlockType Outport + Name "data recv" + SID "26" + Position [915, 187, 950, 203] + BackgroundColor "yellow" + IconDisplay "Port number" + } + Block { + BlockType Outport + Name "errors_status" + SID "27" + Position [915, 142, 950, 158] + BackgroundColor "yellow" + Port "2" + IconDisplay "Port number" + } + Block { + BlockType Outport + Name "data send" + SID "28" + Position [915, 232, 950, 248] + BackgroundColor "yellow" + Port "3" + IconDisplay "Port number" + } + Line { + SrcBlock "receive message 1" + SrcPort 3 + DstBlock "set width" + DstPort 1 + } + Line { + SrcBlock "receive message 1" + SrcPort 1 + DstBlock "Mux" + DstPort 2 + } + Line { + SrcBlock "receive message 1" + SrcPort 2 + DstBlock "Mux" + DstPort 3 + } + Line { + SrcBlock "timeout" + SrcPort 1 + DstBlock "receive message 1" + DstPort 1 + } + Line { + SrcBlock "send message 1" + SrcPort 1 + DstBlock "Mux" + DstPort 1 + } + Line { + SrcBlock "Mux" + SrcPort 1 + Points [0, -15] + DstBlock "errors_status" + DstPort 1 + } + Line { + SrcBlock "set width" + SrcPort 1 + DstBlock "data recv" + DstPort 1 + } + Line { + SrcBlock "constants" + SrcPort 1 + DstBlock "Mux1" + DstPort 1 + } + Line { + Labels [0, 0] + SrcBlock "Mux1" + SrcPort 1 + Points [45, 0] + Branch { + Points [0, -80] + DstBlock "send message 1" + DstPort 2 + } + Branch { + Labels [1, 0] + DstBlock "data send" + DstPort 1 + } + } + Line { + SrcBlock "data ready 2 kHz" + SrcPort 1 + DstBlock "send message 1" + DstPort 1 + } + Line { + SrcBlock "Pulse\nGenerator" + SrcPort 1 + DstBlock "Mux1" + DstPort 2 + } + Annotation { + Name "Simple S2SS to OPAL test using UDP messages" + Position [288, 52] + FontName "Verdana" + FontSize 14 + FontWeight "bold" + } + } + } + Line { + SrcBlock "sm_model" + SrcPort 1 + DstBlock "sc_console" + DstPort 1 + } + Line { + SrcBlock "sm_model" + SrcPort 2 + DstBlock "sc_console" + DstPort 2 + } + Line { + Labels [0, 0] + SrcBlock "sm_model" + SrcPort 3 + DstBlock "sc_console" + DstPort 3 + } + } +} diff --git a/clients/opal_udp/models/send_receive/src/msg.c b/clients/opal/udp/models/send_receive/src/msg.c similarity index 100% rename from clients/opal_udp/models/send_receive/src/msg.c rename to clients/opal/udp/models/send_receive/src/msg.c diff --git a/clients/opal_udp/models/send_receive/src/s2ss.c b/clients/opal/udp/models/send_receive/src/s2ss.c similarity index 88% rename from clients/opal_udp/models/send_receive/src/s2ss.c rename to clients/opal/udp/models/send_receive/src/s2ss.c index 8c44ed0b8..5ea9a0cc1 100644 --- a/clients/opal_udp/models/send_receive/src/s2ss.c +++ b/clients/opal/udp/models/send_receive/src/s2ss.c @@ -1,350 +1,362 @@ -/** Main - * - * Code example of an asynchronous program. This program is started - * by the asynchronous controller and demonstrates how to send and - * receive data to and from the asynchronous icons and a UDP or TCP - * port. - * - * @file - * @author Steffen Vogel - * @author Mathieu Dubé-Dallaire - * @copyright 2003, OPAL-RT Technologies inc - * @copyright 2014-2015, Institute for Automation of Complex Power Systems, EONERC - * This file is part of S2SS. All Rights Reserved. Proprietary and confidential. - * Unauthorized copying of this file, via any medium is strictly prohibited. - *********************************************************************************/ - -/* Standard ANSI C headers needed for this program */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(__QNXNTO__) - #include - #include - #include - #include -#elif defined(__linux__) - #define _GNU_SOURCE 1 -#endif - -/* Define RTLAB before including OpalPrint.h for messages to be sent - * to the OpalDisplay. Otherwise stdout will be used. */ -#define RTLAB -#include "OpalPrint.h" -#include "AsyncApi.h" - -/* This is the message format */ -#include "config.h" -#include "msg.h" -#include "socket.h" - -/* This is just for initializing the shared memory access to communicate - * with the RT-LAB model. It's easier to remember the arguments like this */ -#define ASYNC_SHMEM_NAME argv[1] -#define ASYNC_SHMEM_SIZE atoi(argv[2]) -#define PRINT_SHMEM_NAME argv[3] - -#ifdef _DEBUG // TODO: workaround - #define CPU_TICKS 3466948000 -struct msg *msg_send = NULL; - -void Tick(int sig, siginfo_t *si, void *ptr) -{ - Opal_GenAsyncParam_Ctrl *IconCtrlStruct; - unsigned long long CpuTime, CpuTimeStart; - double ModelTime; - - if (!msg_send) - return; - - IconCtrlStruct = (Opal_GenAsyncParam_Ctrl*) si->si_value.sival_ptr; - - OpalGetAsyncStartExecCpuTime(IconCtrlStruct, &CpuTimeStart); - OpalGetAsyncModelTime(IconCtrlStruct, &CpuTime, &ModelTime); - - OpalPrint("%s: CpuTime: %llu\tModelTime: %.3f\tSequence: %hu\tValue: %.2f\n", - PROGNAME, (CpuTime - CpuTimeStart) / CPU_TICKS, ModelTime, ntohs(msg_send->sequence), msg_send->data[0].f); -} -#endif /* _DEBUG */ - -static void *SendToIPPort(void *arg) -{ - unsigned int SendID = 1; - unsigned int ModelState; - unsigned int i, n; - unsigned short seq = 0; - int nbSend = 0; - - /* Data from OPAL-RT model */ - double mdldata[MSG_VALUES]; - int mdldata_size; - - /* Data from the S2SS server */ - struct msg msg = MSG_INIT(0); - int len; - -#ifdef _DEBUG // TODO: workaround - msg_send = &msg; -#endif /* _DEBUG */ - - OpalPrint("%s: SendToIPPort thread started\n", PROGNAME); - - OpalGetNbAsyncSendIcon(&nbSend); - if (nbSend >= 1) { - do { - /* This call unblocks when the 'Data Ready' line of a send icon is asserted. */ - if ((n = OpalWaitForAsyncSendRequest(&SendID)) != EOK) { - ModelState = OpalGetAsyncModelState(); - if ((ModelState != STATE_RESET) && (ModelState != STATE_STOP)) { - OpalSetAsyncSendIconError(n, SendID); - OpalPrint("%s: OpalWaitForAsyncSendRequest(), errno %d\n", PROGNAME, n); - } - - continue; - } - - /* No errors encountered yet */ - OpalSetAsyncSendIconError(0, SendID); - - /* Get the size of the data being sent by the unblocking SendID */ - OpalGetAsyncSendIconDataLength(&mdldata_size, SendID); - if (mdldata_size / sizeof(double) > MSG_VALUES) { - OpalPrint("%s: Number of signals for SendID=%d exceeds allowed maximum (%d)\n", - PROGNAME, SendID, MSG_VALUES); - - return NULL; - } - - /* Read data from the model */ - OpalGetAsyncSendIconData(mdldata, mdldata_size, SendID); - - msg.sequence = htons(seq++); - msg.length = mdldata_size / sizeof(double); - - for (i = 0; i < msg.length; i++) - msg.data[i].f = (float) mdldata[i]; - - len = MSG_LEN(&msg); - - /* Perform the actual write to the ip port */ - if (SendPacket((char *) &msg, len) < 0) - OpalSetAsyncSendIconError(errno, SendID); - else - OpalSetAsyncSendIconError(0, SendID); - - /* This next call allows the execution of the "asynchronous" process - * to actually be synchronous with the model. To achieve this, you - * should set the "Sending Mode" in the Async_Send block to - * NEED_REPLY_BEFORE_NEXT_SEND or NEED_REPLY_NOW. This will force - * the model to wait for this process to call this - * OpalAsyncSendRequestDone function before continuing. */ - OpalAsyncSendRequestDone(SendID); - - /* Before continuing, we make sure that the real-time model - * has not been stopped. If it has, we quit. */ - ModelState = OpalGetAsyncModelState(); - } while ((ModelState != STATE_RESET) && (ModelState != STATE_STOP)); - - OpalPrint("%s: SendToIPPort: Finished\n", PROGNAME); - } - else { - OpalPrint("%s: SendToIPPort: No transimission block for this controller. Stopping thread.\n", PROGNAME); - } - - return NULL; -} - -static void *RecvFromIPPort(void *arg) -{ - unsigned RecvID = 1; - unsigned i, n; - int nbRecv = 0; - unsigned ModelState; - - /* Data from OPAL-RT model */ - double mdldata[MSG_VALUES]; - int mdldata_size; - - /* Data from the S2SS server */ - struct msg msg = MSG_INIT(0); - int len; - - OpalPrint("%s: RecvFromIPPort thread started\n", PROGNAME); - - OpalGetNbAsyncRecvIcon(&nbRecv); - if (nbRecv >= 1) { - do { - n = RecvPacket((char *) &msg, sizeof(msg), 1.0); - - int ret = msg_verify(m); - if (ret) { - printf("Dropping invalid message (reason=%d)\r\n", ret); - goto out; - } - - /** @todo: We may check the sequence number here. */ - msg.sequence = ntohs(msg.sequence); - - if (msg.endian != MSG_ENDIAN_HOST) - msg_swap(&msg); - - len = MSG_LEN(&msg); - - if (n < 1) { - ModelState = OpalGetAsyncModelState(); - if ((ModelState != STATE_RESET) && (ModelState != STATE_STOP)) { - // n == 0 means timeout, so we continue silently - //if (n == 0) - // OpalPrint("%s: Timeout while waiting for data\n", PROGNAME, errno); - // n == -1 means a more serious error, so we print it - if (n == -1) - OpalPrint("%s: Error %d while waiting for data\n", PROGNAME, errno); - continue; - } - break; - } - else if (n != len) { - OpalPrint("%s: Received incoherent packet (size: %d, complete: %d)\n", PROGNAME, n, len); - continue; - } - - OpalSetAsyncRecvIconStatus(msg.sequence, RecvID); /* Set the Status to the message ID */ - OpalSetAsyncRecvIconError(0, RecvID); /* Set the Error to 0 */ - - /* Get the number of signals to send back to the model */ - OpalGetAsyncRecvIconDataLength(&mdldata_size, RecvID); - - if (mdldata_size / sizeof(double) > MSG_VALUES) { - OpalPrint("%s: Number of signals for RecvID=%d (%d) exceeds allowed maximum (%d)\n", - PROGNAME, RecvID, mdldata_size / sizeof(double), MSG_VALUES); - return NULL; - } - - if (mdldata_size / sizeof(double) > msg.length) { - OpalPrint("%s: Number of signals for RecvID=%d (%d) exceeds what was received (%d)\n", - PROGNAME, RecvID, mdldata_size / sizeof(double), msg.length); - } - - for (i = 0; i < msg.length; i++) - mdldata[i] = (double) msg.data[i].f; - - OpalSetAsyncRecvIconData(mdldata, mdldata_size, RecvID); - - /* Before continuing, we make sure that the real-time model - * has not been stopped. If it has, we quit. */ - ModelState = OpalGetAsyncModelState(); - } while ((ModelState != STATE_RESET) && (ModelState != STATE_STOP)); - - OpalPrint("%s: RecvFromIPPort: Finished\n", PROGNAME); - } - else { - OpalPrint("%s: RecvFromIPPort: No reception block for this controller. Stopping thread.\n", PROGNAME); - } - - return NULL; -} - -int main(int argc, char *argv[]) -{ - int err; - - Opal_GenAsyncParam_Ctrl IconCtrlStruct; - - pthread_t tid_send, tid_recv; - pthread_attr_t attr_send, attr_recv; - - OpalPrint("%s: This is a S2SS client\n", PROGNAME); - - /* Check for the proper arguments to the program */ - if (argc < 4) { - printf("Invalid Arguments: 1-AsyncShmemName 2-AsyncShmemSize 3-PrintShmemName\n"); - exit(0); - } - - /* Enable the OpalPrint function. This prints to the OpalDisplay. */ - if (OpalSystemCtrl_Register(PRINT_SHMEM_NAME) != EOK) { - printf("%s: ERROR: OpalPrint() access not available\n", PROGNAME); - exit(EXIT_FAILURE); - } - - /* Open Share Memory created by the model. */ - if ((OpalOpenAsyncMem(ASYNC_SHMEM_SIZE, ASYNC_SHMEM_NAME)) != EOK) { - OpalPrint("%s: ERROR: Model shared memory not available\n", PROGNAME); - exit(EXIT_FAILURE); - } - - /* For Redhawk, Assign this process to CPU 0 in order to support partial XHP */ - AssignProcToCpu0(); - - /* Get IP Controler Parameters (ie: ip address, port number...) and - * initialize the device on the QNX node. */ - memset(&IconCtrlStruct, 0, sizeof(IconCtrlStruct)); - if ((err = OpalGetAsyncCtrlParameters(&IconCtrlStruct, sizeof(IconCtrlStruct))) != EOK) { - OpalPrint("%s: ERROR: Could not get controller parameters (%d).\n", PROGNAME, err); - exit(EXIT_FAILURE); - } - - /* Initialize socket */ - if (InitSocket(IconCtrlStruct) != EOK) { - OpalPrint("%s: ERROR: Initialization failed.\n", PROGNAME); - exit(EXIT_FAILURE); - } - -#ifdef _DEBUG - /* Setup signals */ - struct sigaction sa_tick = { - .sa_flags = SA_SIGINFO, - .sa_sigaction = Tick - }; - - sigemptyset(&sa_tick.sa_mask); - sigaction(SIGUSR1, &sa_tick, NULL); - - /* Setup timer */ - timer_t t; - struct sigevent sev = { - .sigev_notify = SIGEV_SIGNAL, - .sigev_signo = SIGUSR1, - .sigev_value.sival_ptr = &IconCtrlStruct - }; - - struct itimerspec its = { - .it_interval = { 1, 0 }, - .it_value = { 0, 1 } - }; - - timer_create(CLOCK_REALTIME, &sev, &t); - timer_settime(t, 0, &its, NULL); -#endif /* _DEBUG */ - - /* Start send/receive threads */ - if ((pthread_create(&tid_send, NULL, SendToIPPort, NULL)) == -1) - OpalPrint("%s: ERROR: Could not create thread (SendToIPPort), errno %d\n", PROGNAME, errno); - if ((pthread_create(&tid_recv, NULL, RecvFromIPPort, NULL)) == -1) - OpalPrint("%s: ERROR: Could not create thread (RecvFromIPPort), errno %d\n", PROGNAME, errno); - - /* Wait for both threads to finish */ - if ((err = pthread_join(tid_send, NULL)) != 0) - OpalPrint("%s: ERROR: pthread_join (SendToIPPort), errno %d\n", PROGNAME, err); - if ((err = pthread_join(tid_recv, NULL)) != 0) - OpalPrint("%s: ERROR: pthread_join (RecvFromIPPort), errno %d\n", PROGNAME, err); - - /* Close the ip port and shared memories */ - CloseSocket(IconCtrlStruct); - OpalCloseAsyncMem (ASYNC_SHMEM_SIZE, ASYNC_SHMEM_NAME); - OpalSystemCtrl_UnRegister(PRINT_SHMEM_NAME); - -#ifdef _DEBUG - timer_delete(t); -#endif /* _DEBUG */ - - return 0; -} +/** Main + * + * Code example of an asynchronous program. This program is started + * by the asynchronous controller and demonstrates how to send and + * receive data to and from the asynchronous icons and a UDP or TCP + * port. + * + * @author Steffen Vogel + * @author Mathieu Dubé-Dallaire + * @copyright 2014, Institute for Automation of Complex Power Systems, EONERC + * @copyright 2003, OPAL-RT Technologies inc + * @file + */ + +/* Standard ANSI C headers needed for this program */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(__QNXNTO__) +# include +# include +# include +# include +#elif defined(__linux__) +# define _GNU_SOURCE 1 +#endif + +/* Define RTLAB before including OpalPrint.h for messages to be sent + * to the OpalDisplay. Otherwise stdout will be used. */ +#define RTLAB +#include "OpalPrint.h" +#include "AsyncApi.h" + +/* This is the message format */ +#include "config.h" +#include "msg.h" +#include "socket.h" + +/* This is just for initializing the shared memory access to communicate + * with the RT-LAB model. It's easier to remember the arguments like this */ +#define ASYNC_SHMEM_NAME argv[1] +#define ASYNC_SHMEM_SIZE atoi(argv[2]) +#define PRINT_SHMEM_NAME argv[3] + +#ifdef _DEBUG // TODO: workaround +#define CPU_TICKS 3466948000 +struct msg *msg_send = NULL; + +void Tick(int sig, siginfo_t *si, void *ptr) +{ + Opal_GenAsyncParam_Ctrl *IconCtrlStruct; + unsigned long long CpuTime, CpuTimeStart; + double ModelTime; + + if (!msg_send) + return; + + IconCtrlStruct = (Opal_GenAsyncParam_Ctrl*) si->si_value.sival_ptr; + + OpalGetAsyncStartExecCpuTime(IconCtrlStruct, &CpuTimeStart); + OpalGetAsyncModelTime(IconCtrlStruct, &CpuTime, &ModelTime); + + OpalPrint("%s: CpuTime: %llu\tModelTime: %.3f\tSequence: %hu\tValue: %.2f\n", + PROGNAME, (CpuTime - CpuTimeStart) / CPU_TICKS, ModelTime, ntohs(msg_send->sequence), msg_send->data[0].f); +} +#endif /* _DEBUG */ + +static void *SendToIPPort(void *arg) +{ + unsigned int SendID = 1; + unsigned int ModelState; + unsigned int i, n; + unsigned short seq = 0; + int nbSend = 0; + + /* Data from OPAL-RT model */ + double mdldata[MSG_VALUES]; + int mdldata_size; + + /* Data from the S2SS server */ + struct msg msg = MSG_INIT(0); + int msg_size; + +#ifdef _DEBUG // TODO: workaround + msg_send = &msg; +#endif /* _DEBUG */ + + OpalPrint("%s: SendToIPPort thread started\n", PROGNAME); + + OpalGetNbAsyncSendIcon(&nbSend); + if (nbSend >= 1) { + do { + /* This call unblocks when the 'Data Ready' line of a send icon is asserted. */ + if ((n = OpalWaitForAsyncSendRequest(&SendID)) != EOK) { + ModelState = OpalGetAsyncModelState(); + if ((ModelState != STATE_RESET) && (ModelState != STATE_STOP)) { + OpalSetAsyncSendIconError(n, SendID); + OpalPrint("%s: OpalWaitForAsyncSendRequest(), errno %d\n", PROGNAME, n); + } + + continue; + } + + /* No errors encountered yet */ + OpalSetAsyncSendIconError(0, SendID); + + /* Get the size of the data being sent by the unblocking SendID */ + OpalGetAsyncSendIconDataLength(&mdldata_size, SendID); + if (mdldata_size / sizeof(double) > MSG_VALUES) { + OpalPrint("%s: Number of signals for SendID=%d exceeds allowed maximum (%d)\n", + PROGNAME, SendID, MSG_VALUES); + + return NULL; + } + + /* Read data from the model */ + OpalGetAsyncSendIconData(mdldata, mdldata_size, SendID); + +/******* FORMAT TO SPECIFIC PROTOCOL HERE *****************************/ + // msg.dev_id = SendID; /* Use the SendID as a device ID here */ + msg.sequence = htons(seq++); + msg.length = mdldata_size / sizeof(double); + + for (i = 0; i < msg.length; i++) + msg.data[i].f = (float) mdldata[i]; + + msg_size = MSG_LEN(msg.length); +/**********************************************************************/ + + /* Perform the actual write to the ip port */ + if (SendPacket((char *) &msg, msg_size) < 0) + OpalSetAsyncSendIconError(errno, SendID); + else + OpalSetAsyncSendIconError(0, SendID); + + /* This next call allows the execution of the "asynchronous" process + * to actually be synchronous with the model. To achieve this, you + * should set the "Sending Mode" in the Async_Send block to + * NEED_REPLY_BEFORE_NEXT_SEND or NEED_REPLY_NOW. This will force + * the model to wait for this process to call this + * OpalAsyncSendRequestDone function before continuing. */ + OpalAsyncSendRequestDone(SendID); + + /* Before continuing, we make sure that the real-time model + * has not been stopped. If it has, we quit. */ + ModelState = OpalGetAsyncModelState(); + } while ((ModelState != STATE_RESET) && (ModelState != STATE_STOP)); + + OpalPrint("%s: SendToIPPort: Finished\n", PROGNAME); + } + else { + OpalPrint("%s: SendToIPPort: No transimission block for this controller. Stopping thread.\n", PROGNAME); + } + + return NULL; +} + +static void *RecvFromIPPort(void *arg) +{ + unsigned RecvID = 1; + unsigned i, n; + int nbRecv = 0; + unsigned ModelState; + + /* Data from OPAL-RT model */ + double mdldata[MSG_VALUES]; + int mdldata_size; + + /* Data from the S2SS server */ + struct msg msg = MSG_INIT(0); + unsigned msg_size; + + OpalPrint("%s: RecvFromIPPort thread started\n", PROGNAME); + + OpalGetNbAsyncRecvIcon(&nbRecv); + if (nbRecv >= 1) { + do { + +/******* FORMAT TO SPECIFIC PROTOCOL HERE ******************************/ + n = RecvPacket((char *) &msg, sizeof(msg), 1.0); + + /** @todo: Check and ntohs() sequence number! */ + + if (msg.version != MSG_VERSION) { + OpalPrint("%s: Received message with unknown version. Skipping..\n", PROGNAME); + continue; + } + else if (msg.type != MSG_TYPE_DATA) { + OpalPrint("%s: Received no data. Skipping..\n", PROGNAME); + continue; + } + + /** @todo: We may check the sequence number here. */ + + msg.sequence = ntohs(msg.sequence); + + if (msg.endian != MSG_ENDIAN_HOST) + msg_swap(&msg); + + msg_size = MSG_LEN(msg.length); +/***********************************************************************/ + + if (n < 1) { + ModelState = OpalGetAsyncModelState(); + if ((ModelState != STATE_RESET) && (ModelState != STATE_STOP)) { + // n == 0 means timeout, so we continue silently + //if (n == 0) + // OpalPrint("%s: Timeout while waiting for data\n", PROGNAME, errno); + // n == -1 means a more serious error, so we print it + if (n == -1) + OpalPrint("%s: Error %d while waiting for data\n", PROGNAME, errno); + continue; + } + break; + } + else if (n != msg_size) { + OpalPrint("%s: Received incoherent packet (size: %d, complete: %d)\n", PROGNAME, n, msg_size); + continue; + } + +/******* FORMAT TO SPECIFIC PROTOCOL HERE *******************************/ + OpalSetAsyncRecvIconStatus(msg.sequence, RecvID); /* Set the Status to the message ID */ + OpalSetAsyncRecvIconError(0, RecvID); /* Set the Error to 0 */ + + /* Get the number of signals to send back to the model */ + OpalGetAsyncRecvIconDataLength(&mdldata_size, RecvID); + + if (mdldata_size / sizeof(double) > MSG_VALUES) { + OpalPrint("%s: Number of signals for RecvID=%d (%d) exceeds allowed maximum (%d)\n", + PROGNAME, RecvID, mdldata_size / sizeof(double), MSG_VALUES); + return NULL; + } + + if (mdldata_size / sizeof(double) > msg.length) { + OpalPrint("%s: Number of signals for RecvID=%d (%d) exceeds what was received (%d)\n", + PROGNAME, RecvID, mdldata_size / sizeof(double), msg.length); + } + + for (i = 0; i < msg.length; i++) + mdldata[i] = (double) msg.data[i].f; +/************************************************************************/ + + OpalSetAsyncRecvIconData(mdldata, mdldata_size, RecvID); + + /* Before continuing, we make sure that the real-time model + * has not been stopped. If it has, we quit. */ + ModelState = OpalGetAsyncModelState(); + } while ((ModelState != STATE_RESET) && (ModelState != STATE_STOP)); + + OpalPrint("%s: RecvFromIPPort: Finished\n", PROGNAME); + } + else { + OpalPrint("%s: RecvFromIPPort: No reception block for this controller. Stopping thread.\n", PROGNAME); + } + + return NULL; +} + +int main(int argc, char *argv[]) +{ + int err; + + Opal_GenAsyncParam_Ctrl IconCtrlStruct; + + pthread_t tid_send, tid_recv; + pthread_attr_t attr_send, attr_recv; + + OpalPrint("%s: This is a S2SS client\n", PROGNAME); + + /* Check for the proper arguments to the program */ + if (argc < 4) { + printf("Invalid Arguments: 1-AsyncShmemName 2-AsyncShmemSize 3-PrintShmemName\n"); + exit(0); + } + + /* Enable the OpalPrint function. This prints to the OpalDisplay. */ + if (OpalSystemCtrl_Register(PRINT_SHMEM_NAME) != EOK) { + printf("%s: ERROR: OpalPrint() access not available\n", PROGNAME); + exit(EXIT_FAILURE); + } + + /* Open Share Memory created by the model. */ + if ((OpalOpenAsyncMem(ASYNC_SHMEM_SIZE, ASYNC_SHMEM_NAME)) != EOK) { + OpalPrint("%s: ERROR: Model shared memory not available\n", PROGNAME); + exit(EXIT_FAILURE); + } + + /* For Redhawk, Assign this process to CPU 0 in order to support partial XHP */ + AssignProcToCpu0(); + + /* Get IP Controler Parameters (ie: ip address, port number...) and + * initialize the device on the QNX node. */ + memset(&IconCtrlStruct, 0, sizeof(IconCtrlStruct)); + if ((err = OpalGetAsyncCtrlParameters(&IconCtrlStruct, sizeof(IconCtrlStruct))) != EOK) { + OpalPrint("%s: ERROR: Could not get controller parameters (%d).\n", PROGNAME, err); + exit(EXIT_FAILURE); + } + + /* Initialize socket */ + if (InitSocket(IconCtrlStruct) != EOK) { + OpalPrint("%s: ERROR: Initialization failed.\n", PROGNAME); + exit(EXIT_FAILURE); + } + +#ifdef _DEBUG + /* Setup signals */ + struct sigaction sa_tick = { + .sa_flags = SA_SIGINFO, + .sa_sigaction = Tick + }; + + sigemptyset(&sa_tick.sa_mask); + sigaction(SIGUSR1, &sa_tick, NULL); + + /* Setup timer */ + timer_t t; + struct sigevent sev = { + .sigev_notify = SIGEV_SIGNAL, + .sigev_signo = SIGUSR1, + .sigev_value.sival_ptr = &IconCtrlStruct + }; + + struct itimerspec its = { + .it_interval = { 1, 0 }, + .it_value = { 0, 1 } + }; + + timer_create(CLOCK_REALTIME, &sev, &t); + timer_settime(t, 0, &its, NULL); +#endif /* _DEBUG */ + + /* Start send/receive threads */ + if ((pthread_create(&tid_send, NULL, SendToIPPort, NULL)) == -1) + OpalPrint("%s: ERROR: Could not create thread (SendToIPPort), errno %d\n", PROGNAME, errno); + if ((pthread_create(&tid_recv, NULL, RecvFromIPPort, NULL)) == -1) + OpalPrint("%s: ERROR: Could not create thread (RecvFromIPPort), errno %d\n", PROGNAME, errno); + + /* Wait for both threads to finish */ + if ((err = pthread_join(tid_send, NULL)) != 0) + OpalPrint("%s: ERROR: pthread_join (SendToIPPort), errno %d\n", PROGNAME, err); + if ((err = pthread_join(tid_recv, NULL)) != 0) + OpalPrint("%s: ERROR: pthread_join (RecvFromIPPort), errno %d\n", PROGNAME, err); + + /* Close the ip port and shared memories */ + CloseSocket(IconCtrlStruct); + OpalCloseAsyncMem (ASYNC_SHMEM_SIZE, ASYNC_SHMEM_NAME); + OpalSystemCtrl_UnRegister(PRINT_SHMEM_NAME); + +#ifdef _DEBUG + timer_delete(t); +#endif /* _DEBUG */ + + return 0; +} diff --git a/clients/opal_udp/models/send_receive/src/socket.c b/clients/opal/udp/models/send_receive/src/socket.c similarity index 92% rename from clients/opal_udp/models/send_receive/src/socket.c rename to clients/opal/udp/models/send_receive/src/socket.c index 43da393cd..59fc2e0c4 100644 --- a/clients/opal_udp/models/send_receive/src/socket.c +++ b/clients/opal/udp/models/send_receive/src/socket.c @@ -1,225 +1,223 @@ -/** Helper functions for socket - * - * Code example of an asynchronous program. This program is started - * by the asynchronous controller and demonstrates how to send and - * receive data to and from the asynchronous icons and a UDP or TCP - * port. - * - * @file - * @author Steffen Vogel - * @author Mathieu Dubé-Dallaire - * @copyright 2003, OPAL-RT Technologies inc - * @copyright 2014-2015, Institute for Automation of Complex Power Systems, EONERC - * This file is part of S2SS. All Rights Reserved. Proprietary and confidential. - * Unauthorized copying of this file, via any medium is strictly prohibited. - *********************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include - -/* Define RTLAB before including OpalPrint.h for messages to be sent - * to the OpalDisplay. Otherwise stdout will be used. */ -#define RTLAB -#include "OpalPrint.h" -#include "AsyncApi.h" - -#include "config.h" -#include "socket.h" - -/* Globals variables */ -struct sockaddr_in send_ad; /* Send address */ -struct sockaddr_in recv_ad; /* Receive address */ -int sd = -1; /* socket descriptor */ -int proto = UDP_PROTOCOL; - -int InitSocket(Opal_GenAsyncParam_Ctrl IconCtrlStruct) -{ - struct ip_mreq mreq; /* Multicast group structure */ - int socket_type; - int socket_proto; - unsigned char TTL = 1; - unsigned char LOOP = 0; - int rc; - - proto = (int) IconCtrlStruct.FloatParam[0]; - OpalPrint("%s: Version : %s\n", PROGNAME, VERSION); - - switch (proto) { - case UDP_PROTOCOL: /* Communication using UDP/IP protocol */ - socket_proto = IPPROTO_UDP; - socket_type = SOCK_DGRAM; - OpalPrint("%s: Protocol : UDP/IP\n", PROGNAME); - break; - - case TCP_PROTOCOL: /* Communication using TCP/IP protocol */ - socket_proto = IPPROTO_IP; - socket_type = SOCK_STREAM; - OpalPrint("%s: Protocol : TCP/IP\n", PROGNAME); - break; - - default: /* Protocol is not recognized */ - OpalPrint("%s: ERROR: Protocol (%d) not supported!\n", PROGNAME, proto); - return EINVAL; - } - - OpalPrint("%s: Remote Address : %s\n", PROGNAME, IconCtrlStruct.StringParam[0]); - OpalPrint("%s: Remote Port : %d\n", PROGNAME, (int) IconCtrlStruct.FloatParam[1]); - - /* Initialize the socket */ - if ((sd = socket(AF_INET, socket_type, socket_proto)) < 0) { - OpalPrint("%s: ERROR: Could not open socket\n", PROGNAME); - return EIO; - } - - /* Set the structure for the remote port and address */ - memset(&send_ad, 0, sizeof(send_ad)); - send_ad.sin_family = AF_INET; - send_ad.sin_addr.s_addr = inet_addr(IconCtrlStruct.StringParam[0]); - send_ad.sin_port = htons((u_short)IconCtrlStruct.FloatParam[1]); - - /* Set the structure for the local port and address */ - memset(&recv_ad, 0, sizeof(recv_ad)); - recv_ad.sin_family = AF_INET; - recv_ad.sin_addr.s_addr = INADDR_ANY; - recv_ad.sin_port = htons((u_short)IconCtrlStruct.FloatParam[2]); - - /* Bind local port and address to socket. */ - if (bind(sd, (struct sockaddr *) &recv_ad, sizeof(struct sockaddr_in)) == -1) { - OpalPrint("%s: ERROR: Could not bind local port to socket\n", PROGNAME); - return EIO; - } - else - OpalPrint("%s: Local Port : %d\n", PROGNAME, (int) IconCtrlStruct.FloatParam[2]); - - switch (proto) { - case UDP_PROTOCOL: /* Communication using UDP/IP protocol */ - /* If sending to a multicast address */ - if ((inet_addr(IconCtrlStruct.StringParam[0]) & inet_addr("240.0.0.0")) == inet_addr("224.0.0.0")) { - if (setsockopt(sd, IPPROTO_IP, IP_MULTICAST_TTL, (char *) &TTL, sizeof(TTL)) == -1) { - OpalPrint("%s: ERROR: Could not set TTL for multicast send (%d)\n", PROGNAME, errno); - return EIO; - } - if (setsockopt(sd, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&LOOP, sizeof(LOOP)) == -1) { - OpalPrint("%s: ERROR: Could not set loopback for multicast send (%d)\n", PROGNAME, errno); - return EIO; - } - - OpalPrint("%s: Configured socket for sending to multicast address\n", PROGNAME); - } - - /* If receiving from a multicast group, register for it. */ - if (inet_addr(IconCtrlStruct.StringParam[1]) > 0) { - if ((inet_addr(IconCtrlStruct.StringParam[1]) & inet_addr("240.0.0.0")) == inet_addr("224.0.0.0")) { - mreq.imr_multiaddr.s_addr = inet_addr(IconCtrlStruct.StringParam[1]); - mreq.imr_interface.s_addr = INADDR_ANY; - - /* Have the multicast socket join the multicast group */ - if (setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &mreq, sizeof(mreq)) == -1) { - OpalPrint("%s: ERROR: Could not join multicast group (%d)\n", PROGNAME, errno); - return EIO; - } - - OpalPrint("%s: Added process to multicast group (%s)\n", - PROGNAME, IconCtrlStruct.StringParam[1]); - } - else { - OpalPrint("%s: WARNING: IP address for multicast group is not in multicast range. Ignored\n", - PROGNAME); - } - } - break; - - case TCP_PROTOCOL: /* Communication using TCP/IP protocol */ - OpalPrint("%s: Calling connect()\n", PROGNAME); - - /* Connect to server to start data transmission */ - rc = connect(sd, (struct sockaddr *) &send_ad, sizeof(send_ad)); - if (rc < 0) { - OpalPrint("%s: ERROR: Call to connect() failed\n", PROGNAME); - return EIO; - } - break; - } - - return EOK; -} - -int SendPacket(char* DataSend, int datalength) -{ - int err; - - if(sd < 0) - return -1; - - /* Send the packet */ - if (proto == TCP_PROTOCOL) - err = send(sd, DataSend, datalength, 0); - else - err = sendto(sd, DataSend, datalength, 0, (struct sockaddr *)&send_ad, sizeof(send_ad)); - - return err; -} - -int RecvPacket(char* DataRecv, int datalength, double timeout) -{ - int len; - struct sockaddr_in client_ad; - socklen_t client_ad_size = sizeof(client_ad); - fd_set sd_set; - struct timeval tv; - - if (sd < 0) - return -1; - - /* Set the descriptor set for the select() call */ - FD_ZERO(&sd_set); - FD_SET(sd, &sd_set); - - /* Set the tv structure to the correct timeout value */ - tv.tv_sec = (int) timeout; - tv.tv_usec = (int) ((timeout - tv.tv_sec) * 1000000); - - /* Wait for a packet. We use select() to have a timeout. This is - * necessary when reseting the model so we don't wait indefinitely - * and prevent the process from exiting and freeing the port for - * a future instance (model load). */ - switch (select(sd+1, &sd_set, (fd_set *) 0, (fd_set *) 0, &tv)) { - case -1: /* Error */ - return -1; - case 0: /* We hit the timeout */ - return 0; - default: - if (!(FD_ISSET(sd, &sd_set))) { - /* We received something, but it's not on "sd". Since sd is the only - * descriptor in the set... */ - OpalPrint("%s: RecvPacket: God, is that You trying to reach me?\n", PROGNAME); - return -1; - } - } - - /* Clear the DataRecv array (in case we receive an incomplete packet) */ - memset(DataRecv, 0, datalength); - - /* Perform the reception */ - if (proto == TCP_PROTOCOL) - len = recv(sd, DataRecv, datalength, 0); - else - len = recvfrom(sd, DataRecv, datalength, 0, (struct sockaddr *) &client_ad, &client_ad_size); - - return len; -} - -int CloseSocket(Opal_GenAsyncParam_Ctrl IconCtrlStruct) -{ - if (sd < 0) { - shutdown(sd, SHUT_RDWR); - close(sd); - } - - return 0; -} +/** Helper functions for socket + * + * Code example of an asynchronous program. This program is started + * by the asynchronous controller and demonstrates how to send and + * receive data to and from the asynchronous icons and a UDP or TCP + * port. + * + * @author Steffen Vogel + * @author Mathieu Dubé-Dallaire + * @copyright 2014, Institute for Automation of Complex Power Systems, EONERC + * @copyright 2003, OPAL-RT Technologies inc + * @file + */ + +#include +#include +#include +#include +#include +#include +#include + +/* Define RTLAB before including OpalPrint.h for messages to be sent + * to the OpalDisplay. Otherwise stdout will be used. */ +#define RTLAB +#include "OpalPrint.h" +#include "AsyncApi.h" + +#include "config.h" +#include "socket.h" + +/* Globals variables */ +struct sockaddr_in send_ad; /* Send address */ +struct sockaddr_in recv_ad; /* Receive address */ +int sd = -1; /* socket descriptor */ +int proto = UDP_PROTOCOL; + +int InitSocket(Opal_GenAsyncParam_Ctrl IconCtrlStruct) +{ + struct ip_mreq mreq; /* Multicast group structure */ + int socket_type; + int socket_proto; + unsigned char TTL = 1; + unsigned char LOOP = 0; + int rc; + + proto = (int) IconCtrlStruct.FloatParam[0]; + OpalPrint("%s: Version : %s\n", PROGNAME, VERSION); + + switch (proto) { + case UDP_PROTOCOL: /* Communication using UDP/IP protocol */ + socket_proto = IPPROTO_UDP; + socket_type = SOCK_DGRAM; + OpalPrint("%s: Protocol : UDP/IP\n", PROGNAME); + break; + + case TCP_PROTOCOL: /* Communication using TCP/IP protocol */ + socket_proto = IPPROTO_IP; + socket_type = SOCK_STREAM; + OpalPrint("%s: Protocol : TCP/IP\n", PROGNAME); + break; + + default: /* Protocol is not recognized */ + OpalPrint("%s: ERROR: Protocol (%d) not supported!\n", PROGNAME, proto); + return EINVAL; + } + + OpalPrint("%s: Remote Address : %s\n", PROGNAME, IconCtrlStruct.StringParam[0]); + OpalPrint("%s: Remote Port : %d\n", PROGNAME, (int) IconCtrlStruct.FloatParam[1]); + + /* Initialize the socket */ + if ((sd = socket(AF_INET, socket_type, socket_proto)) < 0) { + OpalPrint("%s: ERROR: Could not open socket\n", PROGNAME); + return EIO; + } + + /* Set the structure for the remote port and address */ + memset(&send_ad, 0, sizeof(send_ad)); + send_ad.sin_family = AF_INET; + send_ad.sin_addr.s_addr = inet_addr(IconCtrlStruct.StringParam[0]); + send_ad.sin_port = htons((u_short)IconCtrlStruct.FloatParam[1]); + + /* Set the structure for the local port and address */ + memset(&recv_ad, 0, sizeof(recv_ad)); + recv_ad.sin_family = AF_INET; + recv_ad.sin_addr.s_addr = INADDR_ANY; + recv_ad.sin_port = htons((u_short)IconCtrlStruct.FloatParam[2]); + + /* Bind local port and address to socket. */ + if (bind(sd, (struct sockaddr *) &recv_ad, sizeof(struct sockaddr_in)) == -1) { + OpalPrint("%s: ERROR: Could not bind local port to socket\n", PROGNAME); + return EIO; + } + else + OpalPrint("%s: Local Port : %d\n", PROGNAME, (int) IconCtrlStruct.FloatParam[2]); + + switch (proto) { + case UDP_PROTOCOL: /* Communication using UDP/IP protocol */ + /* If sending to a multicast address */ + if ((inet_addr(IconCtrlStruct.StringParam[0]) & inet_addr("240.0.0.0")) == inet_addr("224.0.0.0")) { + if (setsockopt(sd, IPPROTO_IP, IP_MULTICAST_TTL, (char *) &TTL, sizeof(TTL)) == -1) { + OpalPrint("%s: ERROR: Could not set TTL for multicast send (%d)\n", PROGNAME, errno); + return EIO; + } + if (setsockopt(sd, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&LOOP, sizeof(LOOP)) == -1) { + OpalPrint("%s: ERROR: Could not set loopback for multicast send (%d)\n", PROGNAME, errno); + return EIO; + } + + OpalPrint("%s: Configured socket for sending to multicast address\n", PROGNAME); + } + + /* If receiving from a multicast group, register for it. */ + if (inet_addr(IconCtrlStruct.StringParam[1]) > 0) { + if ((inet_addr(IconCtrlStruct.StringParam[1]) & inet_addr("240.0.0.0")) == inet_addr("224.0.0.0")) { + mreq.imr_multiaddr.s_addr = inet_addr(IconCtrlStruct.StringParam[1]); + mreq.imr_interface.s_addr = INADDR_ANY; + + /* Have the multicast socket join the multicast group */ + if (setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &mreq, sizeof(mreq)) == -1) { + OpalPrint("%s: ERROR: Could not join multicast group (%d)\n", PROGNAME, errno); + return EIO; + } + + OpalPrint("%s: Added process to multicast group (%s)\n", + PROGNAME, IconCtrlStruct.StringParam[1]); + } + else { + OpalPrint("%s: WARNING: IP address for multicast group is not in multicast range. Ignored\n", + PROGNAME); + } + } + break; + + case TCP_PROTOCOL: /* Communication using TCP/IP protocol */ + OpalPrint("%s: Calling connect()\n", PROGNAME); + + /* Connect to server to start data transmission */ + rc = connect(sd, (struct sockaddr *) &send_ad, sizeof(send_ad)); + if (rc < 0) { + OpalPrint("%s: ERROR: Call to connect() failed\n", PROGNAME); + return EIO; + } + break; + } + + return EOK; +} + +int SendPacket(char* DataSend, int datalength) +{ + int err; + + if(sd < 0) + return -1; + + /* Send the packet */ + if (proto == TCP_PROTOCOL) + err = send(sd, DataSend, datalength, 0); + else + err = sendto(sd, DataSend, datalength, 0, (struct sockaddr *)&send_ad, sizeof(send_ad)); + + return err; +} + +int RecvPacket(char* DataRecv, int datalength, double timeout) +{ + int len; + struct sockaddr_in client_ad; + socklen_t client_ad_size = sizeof(client_ad); + fd_set sd_set; + struct timeval tv; + + if (sd < 0) + return -1; + + /* Set the descriptor set for the select() call */ + FD_ZERO(&sd_set); + FD_SET(sd, &sd_set); + + /* Set the tv structure to the correct timeout value */ + tv.tv_sec = (int) timeout; + tv.tv_usec = (int) ((timeout - tv.tv_sec) * 1000000); + + /* Wait for a packet. We use select() to have a timeout. This is + * necessary when reseting the model so we don't wait indefinitely + * and prevent the process from exiting and freeing the port for + * a future instance (model load). */ + switch (select(sd+1, &sd_set, (fd_set *) 0, (fd_set *) 0, &tv)) { + case -1: /* Error */ + return -1; + case 0: /* We hit the timeout */ + return 0; + default: + if (!(FD_ISSET(sd, &sd_set))) { + /* We received something, but it's not on "sd". Since sd is the only + * descriptor in the set... */ + OpalPrint("%s: RecvPacket: God, is that You trying to reach me?\n", PROGNAME); + return -1; + } + } + + /* Clear the DataRecv array (in case we receive an incomplete packet) */ + memset(DataRecv, 0, datalength); + + /* Perform the reception */ + if (proto == TCP_PROTOCOL) + len = recv(sd, DataRecv, datalength, 0); + else + len = recvfrom(sd, DataRecv, datalength, 0, (struct sockaddr *) &client_ad, &client_ad_size); + + return len; +} + +int CloseSocket(Opal_GenAsyncParam_Ctrl IconCtrlStruct) +{ + if (sd < 0) { + shutdown(sd, SHUT_RDWR); + close(sd); + } + + return 0; +} diff --git a/clients/opal_udp/models/send_receive/src/utils.c b/clients/opal/udp/models/send_receive/src/utils.c similarity index 100% rename from clients/opal_udp/models/send_receive/src/utils.c rename to clients/opal/udp/models/send_receive/src/utils.c diff --git a/clients/opal_udp/s2ss_tests.llp b/clients/opal/udp/s2ss_tests.llp similarity index 97% rename from clients/opal_udp/s2ss_tests.llp rename to clients/opal/udp/s2ss_tests.llp index faf3ee696..e83c4c4ea 100644 --- a/clients/opal_udp/s2ss_tests.llp +++ b/clients/opal/udp/s2ss_tests.llp @@ -1,18 +1,18 @@ - - - - s2ss_tests - This is a project! - ON - D:\msv\svo\opal\s2ss_tests\s2ss_tests.llp - - - - - models\send_receive\send_receive.mdl - D:\msv\svo\opal\s2ss_tests\models\send_receive\send_receive.mdl - D:\msv\svo\opal\s2ss_tests\models\send_receive\send_receive.mdl - - - - + + + + s2ss_tests + This is a project! + ON + D:\msv\svo\opal\s2ss_tests\s2ss_tests.llp + + + + + models\send_receive\send_receive.mdl + D:\msv\svo\opal\s2ss_tests\models\send_receive\send_receive.mdl + D:\msv\svo\opal\s2ss_tests\models\send_receive\send_receive.mdl + + + + diff --git a/clients/opal_udp/models/send_receive/include/config.h b/clients/opal_udp/models/send_receive/include/config.h deleted file mode 100644 index 0ce58162a..000000000 --- a/clients/opal_udp/models/send_receive/include/config.h +++ /dev/null @@ -1,18 +0,0 @@ -/** Compiled-in settings - * - * @file - * @author Steffen Vogel - * @copyright 2014-2015, Institute for Automation of Complex Power Systems, EONERC - * This file is part of S2SS. All Rights Reserved. Proprietary and confidential. - * Unauthorized copying of this file, via any medium is strictly prohibited. - *********************************************************************************/ - -#ifndef _CONFIG_H_ -#define _CONFIG_H_ - -#define PROGNAME "S2SS" -#define VERSION "0.1" - -#define MAX_VALUES 64 - -#endif /* _CONFIG_H_ */