Skip to content

Commit 19c4d0d

Browse files
KyllianAubryGitHub Enterprise
authored andcommitted
SKA-1008: update CAN calling order (#192)
1 parent b59440b commit 19c4d0d

File tree

1 file changed

+27
-12
lines changed

1 file changed

+27
-12
lines changed

FmuImporter/FmuImporter/FmuImporter.cs

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)