@@ -590,6 +590,20 @@ private void ProcessRpcServerVariables(ref Dictionary<uint /* ValueReference */,
590590 }
591591 }
592592
593+ private void RecordClocksAndClockedVariables ( )
594+ {
595+ // retrieve and send CAN frames
596+ var outputCan = FmuCanManager . GetCanData ( ) ;
597+ SilKitCanManager . SendAllFrames ( outputCan ) ;
598+ }
599+
600+ private void ApplyClocksAndClockedInputs ( )
601+ {
602+ // handle received CAN frames
603+ var receivedSilKitCanData = SilKitCanManager . RetrieveReceivedCanData ( _lastSimStep ! . Value ) ;
604+ FmuCanManager . SetCanData ( receivedSilKitCanData ) ;
605+ }
606+
593607 public void StartSimulation ( )
594608 {
595609 SilKitEntity . Logger . Log ( LogLevel . Info , "Starting Simulation." ) ;
@@ -713,8 +727,12 @@ private void OnSimulationStep(ulong nowInNs, ulong durationInNs)
713727
714728 if ( FmuEntity . ModelDescription . CoSimulation . hasEventMode )
715729 {
730+ RecordClocksAndClockedVariables ( ) ;
731+
716732 do
717733 {
734+ ApplyClocksAndClockedInputs ( ) ;
735+
718736 FmuEntity . UpdateDiscreteStates ( out discreteStatesNeedUpdate , out terminateRequested ) ;
719737
720738 if ( terminateRequested )
@@ -724,6 +742,9 @@ private void OnSimulationStep(ulong nowInNs, ulong durationInNs)
724742 ExitFmuImporter ( ) ;
725743 return ;
726744 }
745+
746+ RecordClocksAndClockedVariables ( ) ;
747+
727748 } while ( discreteStatesNeedUpdate ) ;
728749
729750 FmuEntity . EnterStepMode ( ) ;
@@ -748,10 +769,6 @@ private void OnSimulationStep(ulong nowInNs, ulong durationInNs)
748769 FmuDataManager . SetData ( receivedSilKitDataStruct ) ;
749770 FmuDataManager . SetData ( receivedSilKitDataClockedStruct ) ;
750771
751- // handle received CAN frames
752- var receivedSilKitCanData = SilKitCanManager . RetrieveReceivedCanData ( _lastSimStep ! . Value ) ;
753- FmuCanManager . SetCanData ( receivedSilKitCanData ) ;
754-
755772 // handle client RPC results
756773 var receivedRpcResults = SilKitRpcClientManager . RetrieveReceivedRpcEvents ( _lastSimStep ! . Value ) ;
757774 FmuRpcClientManager . SetData ( receivedRpcResults ) ;
@@ -813,6 +830,8 @@ private void OnSimulationStep(ulong nowInNs, ulong durationInNs)
813830 {
814831 FmuEntity . EnterEventMode ( ) ;
815832
833+ RecordClocksAndClockedVariables ( ) ;
834+
816835 // set all data that was received up to the current simulation time (~lastSimStep) of the FMU
817836 var receivedSilKitDataEventMode = SilKitDataManager . RetrieveReceivedData ( _lastSimStep ! . Value , FmuDataManager . InputVariableRefs ) ;
818837 var receivedSilKitClocksEventMode = SilKitDataManager . RetrieveReceivedData ( _lastSimStep ! . Value , FmuDataManager . InputClockRefs ) ;
@@ -826,10 +845,6 @@ private void OnSimulationStep(ulong nowInNs, ulong durationInNs)
826845 FmuDataManager . SetData ( receivedSilKitDataStructEventMode ) ;
827846 FmuDataManager . SetData ( receivedSilKitDataClockedStructEventMode ) ;
828847
829- // Handle received CAN frames
830- var receivedSilKitCanDataEventMode = SilKitCanManager . RetrieveReceivedCanData ( _lastSimStep ! . Value ) ;
831- FmuCanManager . SetCanData ( receivedSilKitCanDataEventMode ) ;
832-
833848 // handle client RPC results
834849 var recvRpcResults = SilKitRpcClientManager . RetrieveReceivedRpcEvents ( _lastSimStep ! . Value ) ;
835850 FmuRpcClientManager . SetData ( recvRpcResults ) ;
@@ -840,8 +855,12 @@ private void OnSimulationStep(ulong nowInNs, ulong durationInNs)
840855
841856 do
842857 {
858+ ApplyClocksAndClockedInputs ( ) ;
859+
843860 FmuEntity . UpdateDiscreteStates ( out discreteStatesNeedUpdate , out terminateRequested ) ;
844861
862+ RecordClocksAndClockedVariables ( ) ;
863+
845864 if ( terminateRequested )
846865 {
847866 SilKitCanManager . StopCanControllers ( ) ;
@@ -878,10 +897,6 @@ private void OnSimulationStep(ulong nowInNs, ulong durationInNs)
878897 SilKitDataManager . PublishAll ( currentStructureOutputDataEventMode ) ;
879898 SilKitDataManager . PublishAll ( currentClockedStructureOutputDataEventMode ) ;
880899
881- // Retrieve and send can frames
882- var outputCan = FmuCanManager . GetCanData ( ) ;
883- SilKitCanManager . SendAllFrames ( outputCan ) ;
884-
885900 FmuEntity . EnterStepMode ( ) ;
886901 }
887902 }
0 commit comments