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
similarity index 95%
rename from clients/opal_udp/models/send_receive/include/config.h
rename to clients/opal/udp/models/send_receive/include/config.h
index b71e0079d..6ed63d76a 100644
--- a/clients/opal_udp/models/send_receive/include/config.h
+++ b/clients/opal/udp/models/send_receive/include/config.h
@@ -1,16 +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_ */
+/** 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_ */
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 96%
rename from clients/opal_udp/models/send_receive/include/socket.h
rename to clients/opal/udp/models/send_receive/include/socket.h
index e45256821..af44756bf 100644
--- a/clients/opal_udp/models/send_receive/include/socket.h
+++ b/clients/opal/udp/models/send_receive/include/socket.h
@@ -1,33 +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.
- *
- * @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_ */
+/** 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 96%
rename from clients/opal_udp/models/send_receive/src/s2ss.c
rename to clients/opal/udp/models/send_receive/src/s2ss.c
index 41d4d3cd2..4a31bf6a7 100644
--- a/clients/opal_udp/models/send_receive/src/s2ss.c
+++ b/clients/opal/udp/models/send_receive/src/s2ss.c
@@ -1,362 +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.
- *
- * @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;
-}
+/** 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 96%
rename from clients/opal_udp/models/send_receive/src/socket.c
rename to clients/opal/udp/models/send_receive/src/socket.c
index bdba72753..674e18467 100644
--- a/clients/opal_udp/models/send_receive/src/socket.c
+++ b/clients/opal/udp/models/send_receive/src/socket.c
@@ -1,223 +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.
- *
- * @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;
-}
+/** 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
+
+
+
+