EP CalcOff no Msg

Signed-off-by: Bernardo Carvalho <bernardo.carvalho@tecnico.ulisboa.pt>
This commit is contained in:
2024-12-05 12:56:51 +00:00
parent 33a9ec9bef
commit 86ac19ff83
6 changed files with 329 additions and 136 deletions

View File

@@ -80,8 +80,8 @@ def get_arguments():
action='store_true', help='Import Mirnov') action='store_true', help='Import Mirnov')
parser.add_argument('-l', '--langmuir', parser.add_argument('-l', '--langmuir',
action='store_true', help='Import Langmuir') action='store_true', help='Import Langmuir')
parser.add_argument('-t', '--ploT', parser.add_argument('-t', '--trigger', type=int,
action='store_true', help='Plot Signals') help='Trigger sample', default='0')
parser.add_argument('-n', '--names', parser.add_argument('-n', '--names',
action='store_true', help='Print Node Table') action='store_true', help='Print Node Table')
parser.add_argument('-z', '--zeros', type=int, parser.add_argument('-z', '--zeros', type=int,
@@ -101,8 +101,13 @@ if (__name__ == "__main__"):
data, tzero_us, period = LoadSdasData(client, nd['sdas'], pulseNo) data, tzero_us, period = LoadSdasData(client, nd['sdas'], pulseNo)
langmuirData.append(data) langmuirData.append(data)
time = np.arange(len(data), dtype='uint32') * int(period) time = np.arange(len(data), dtype='uint32') * int(period)
trigger = np.zeros(len(data), dtype='uint32')
if args.trigger > 0:
trigger[args.trigger:] = 1
langmuirNp = np.array(langmuirData).T langmuirNp = np.array(langmuirData).T
data2file = np.insert(langmuirNp, 0, time, axis=1) data2file = np.insert(langmuirNp, 0, trigger, axis=1)
data2file = np.insert(data2file, 0, time, axis=1)
if args.zeros > 0: if args.zeros > 0:
nCol = data2file.shape[1] nCol = data2file.shape[1]
zerRows = np.zeros([args.zeros, nCol]) zerRows = np.zeros([args.zeros, nCol])
@@ -112,8 +117,8 @@ if (__name__ == "__main__"):
# head = ('#Time (uint32)[1],Langmuir0 (float32)[1],Langmuir1 (float32)[1],' # head = ('#Time (uint32)[1],Langmuir0 (float32)[1],Langmuir1 (float32)[1],'
# 'Langmuir2 (float32)[1],Langmuir3 (float32)[1]') # 'Langmuir2 (float32)[1],Langmuir3 (float32)[1]')
# formt = '%d,%.6f,%.6f,%.6f,%.6f' # formt = '%d,%.6f,%.6f,%.6f,%.6f'
formt = '%d,{%.6f,%.6f,%.6f,%.6f}' formt = '%d,%d,{%.6f,%.6f,%.6f,%.6f}'
head = '#TimeSdas (uint32)[1],LangmuirSignals (float32)[4]' head = '#TimeSdas (uint32)[1],Trigger (uint32)[1],LangmuirSignals (float32)[4]'
np.savetxt(filename, data2file, fmt=formt, np.savetxt(filename, data2file, fmt=formt,
header=head, comments='') header=head, comments='')
# , delimiter=',') # , delimiter=',')

113
Analysis/pyqtPlotFile.py Executable file
View File

@@ -0,0 +1,113 @@
#!/usr/bin/env python3
"""
This script plots the MARTe2 ATCAIop samples stored in MDSplus
All of the plots may be panned/scaled by dragging with
the left/right mouse buttons. Right click on any plot to show a context menu.
To change EPICS EO, WO use. e.g.
caput -a ISTTOK:central:ATCAIOP1-WO 14 0.191 0.174 -0.036 -0.044 0.183 0.126 0.020 0.140 -0.461 -0.572 0.022 -0.262 0.475 0.353
"""
import numpy as np
import pyqtgraph as pg
# from pyqtgraph.Qt import QtCore
import argparse
app = pg.mkQApp("Plotting MARTe2 AtcaIop Data")
# mw = QtWidgets.QMainWindow()
# mw.resize(800,800)
# MAX_SAMPLES = 50000
ADC_CHANNELS = 14 # channels stored in ISTTOK
ADC_DECIM_RATE = 200
parser = argparse.ArgumentParser(description=
"""Script to plot AtcaIop MDSplus data and calc drifts
To change EPICS EO, WO use. e.g.
caput -a ISTTOK:central:ATCAIOP1-WO 14 0.191 0.174 -0.036 -0.044 0.183 0.126 0.020 0.140 -0.461 -0.572 0.022 -0.262 0.475 0.353""")
# parser.add_argument('-l','--list', nargs='+',
# help='<Required> Set flag', required=True)
# parser.add_argument('-l','--list', nargs='+')
parser.add_argument('-c', '--crange', nargs='+', type=int,
help='Channel plots (1 12)', default=[1, 12])
parser.add_argument('-i', '--irange', nargs='+', type=int, default=[1, 12])
# arser.add_argument('pulse','-', nargs='+', help='<Required> Set flag', required=True)
parser.add_argument('-s', '--shot', type=int,
help='Mds+ pulse Number ([1, ...])', default=100)
parser.add_argument('-m', '--maxpoints', type=int,
help='Max points to plot', default=1000)
parser.add_argument('-e', '--averages', action='store_true',
help='Calc averages')
parser.add_argument('-d', '--decimated', action='store_true',
help='Use decimated data')
# parser.add_argument('-w', '--drift', action='store_true', help='Calc drifts')
parser.add_argument('-z', '--zero', action='store_true',
help='Zero integral Lines')
parser.add_argument('-f', '--file', type=str,
help='filename device to open', default='LangmuirSdas')
args = parser.parse_args()
win = pg.GraphicsLayoutWidget(show=True, title="Basic plotting examples")
win.resize(1000, 600)
win.setWindowTitle('ISTTOK Plotting')
# Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)
p1 = win.addPlot(title="SDAS Languir Probe data")
# add plt.addLegend() BEFORE you create the curves.
# mdsNode = tree.getNode("ATCAIOP1.ADC0RAW")
# dataAdc = mdsNode.getData().data()
# timeData = mdsNode.getDimensionAt(0).data()
p1.addLegend()
start = args.crange[0] - 1
stop = args.crange[1]
dataSdas = np.load(args.file)
x = dataSdas[:args.maxpoints, 0] / 1e3 # us -> ms
# for i in range(1, 2):
lineName = ['Time', 'Trigger',
'ElectricTop', 'ElectricInner', 'ElectricOuter', 'ElectricBottom']
for i in [2, 3, 4, 5]:
y = dataSdas[:args.maxpoints, i]
# p1.plot(y, pen=pg.mkPen(i, width=2), name=f"Ch {i}")
p1.plot(y, pen=pg.mkPen(i, width=2), name=lineName[i])
p1.showGrid(x=True, y=True, alpha=0.5)
# p1.setLabel('bottom', "Time", units='ms')
# p1.setLabel('bottom', "Samp", units='')
win.nextRow()
p2 = win.addPlot(title="MARTE2 output data")
dataOut = np.genfromtxt('../Startup/IsttokOutput.csv', delimiter=',')
p2.addLegend()
x = dataOut[:args.maxpoints, 0] / 1e3 # us -> ms
y = dataOut[:args.maxpoints, 1]
# for i in range(1, 5):
lineName = ['Time', 'OutMdsW0', 'OutMdsW1', 'OutMdsW2', 'OutMdsW3']
for i in [1, 2, 3, 4,]:
y = dataOut[:args.maxpoints, i]
p2.plot(y, pen=pg.mkPen(i, width=2), name=lineName[i])
p2.showGrid(x=True, y=True, alpha=0.5)
# p2.plot(x, y) # , pen=pg.mkPen(i, width=2)) # , name=f"Ch {i+1}")
p2.setLabel('bottom', "Time", units='ms')
# print("WO: ", end='')
# updatePlot()
if __name__ == '__main__':
# import sys
# if sys.flags.interactive != 1 or not hasattr(QtCore, 'PYQT_VERSION'):
# pg.QtGui.QApplication.exec_()
# iprint("xwc")
pg.exec()
# vim: syntax=python ts=4 sw=4 sts=4 sr et

View File

@@ -168,12 +168,14 @@
param1 = Online param1 = Online
} }
} }
/*
+CalcOffSetsMsg = { +CalcOffSetsMsg = {
Class = "Message" Class = "Message"
Destination = "MdsLoopApp.Functions.GAMElectricProbes" Destination = "MdsLoopApp.Functions.GAMElectricProbes"
Function = "CalcOffSets" Function = "CalcOffSets"
Mode = "ExpectsReply" Mode = "ExpectsReply"
} }
*/
+StopCurrentStateExecutionMsg = { +StopCurrentStateExecutionMsg = {
Class = Message Class = Message
Destination = MdsLoopApp Destination = MdsLoopApp
@@ -243,20 +245,6 @@
} }
} }
} }
+Types = {
Class = ReferenceContainer
+LangmuirStructure = {
Class = IntrospectionStructure
TimeSdas = {
Type = uint32
NumberOfElements = 1
}
SignalArray = {
Type = float32
NumberOfElements = 4
}
}
}
$MdsLoopApp = { $MdsLoopApp = {
Class = RealTimeApplication Class = RealTimeApplication
+Functions = { +Functions = {
@@ -306,50 +294,39 @@ $MdsLoopApp = {
+GAMFileReader = { +GAMFileReader = {
Class = IOGAM Class = IOGAM
InputSignals = { InputSignals = {
Inputs = { TimeSdas = {
DataSource = FileReader_DS DataSource = FileReader_DS
Type = LangmuirStructure
MemberAliases = {
Inputs.TimeSdas = TimeSdas
Inputs.SignalArray = LangmuirSignals
}
}
}
OutputSignals = {
LangmuirStrt = {
DataSource = DDB1
Type = LangmuirStructure
MemberAliases = {
TimeSdasA = "LangmuirStrt.TimeSdas"
LangmuirSignalsA = "LangmuirStrt.SignalArray"
}
}
}
}
+FlatIOGAM = {
Class = FlattenedStructIOGAM
InputSignals = {
LangmuirStrt = { //Exactly one structure signal shall be defined.
Type = LangmuirStructure //The Type shall be structured and is required.
DataSource = DDB1 //Compulsory.
}
}
OutputSignals = {
LangmuirStrt_TimeSdas = {
Type = uint32 Type = uint32
NumberOfElements = 1
} }
LangmuirStrt_SignalArray = { Trigger = {
DataSource = FileReader_DS
Type = uint32
}
LangmuirSignals = {
DataSource = FileReader_DS
Type = float32
}
}
OutputSignals = {
TimeSdas = {
DataSource = "DDB1"
Type = uint32
}
TriggerSdas = {
DataSource = "DDB1"
Type = uint32
}
LangmuirSigs = {
DataSource = "DDB1"
Type = float32 Type = float32
NumberOfElements = 4 NumberOfElements = 4
} }
} }
} }
+GAMLangSigs= { +GAMLangSigs= {
Class = IOGAM Class = IOGAM
InputSignals = { InputSignals = {
LangmuirStrt_SignalArray = { LangmuirSigs = {
DataSource = "DDB1" DataSource = "DDB1"
Type = float32 Type = float32
NumberOfElements = 4 NumberOfElements = 4
@@ -374,58 +351,17 @@ $MdsLoopApp = {
} }
} }
} }
/*
+GAMFileReaderS = {
Class = IOGAM
InputSignals = {
TimeSdas = {
DataSource = FileReaderS_DS
Type = uint32
}
LangmuirSignals = {
DataSource = FileReaderS_DS
Type = float32
NumberOfElements = 4
}
}
OutputSignals = {
TimeSdasS = {
DataSource = "DDB1"
Type = uint32
}
LangmuirS = {
DataSource = "DDB1"
Type = float32
NumberOfElements = 4
}
}
}
OutMdsW1 = {
DataSource = FileSignalsWriter
Type = float32
}
OutMdsW2 = {
DataSource = FileSignalsWriter
Type = float32
}
OutMdsW3 = {
DataSource = FileSignalsWriter
Type = float32
}
//"LangmuirStrt.SignalsL[0]" = {
LangmuirStrt_SignalArray = {
DataSource = "DDB1"
Type = float32
NumberOfElements = 4
}
*/
+GAMElectricProbes = { +GAMElectricProbes = {
Class = ElectricProbesGAM Class = ElectricProbesGAM
Gain = 5 //Compulsory Gain = 5 //Compulsory
NumberOfSamplesAvg = 5 //Compulsory NumberOfSamplesAvg = 5 //Compulsory
ResetInEachState = 0 //Compulsory. 1> reset in each state, 0> reset if the previous state is different from the next state ResetInEachState = 0 //Compulsory. 1> reset in each state, 0> reset if the previous state is different from the next state
InputSignals = { InputSignals = {
LangmuirStrt_SignalArray = { TriggerSdas = {
DataSource = "DDB1"
Type = uint32
}
LangmuirSigs = {
DataSource = "DDB1" DataSource = "DDB1"
Type = float32 Type = float32
NumberOfElements = 4 NumberOfElements = 4
@@ -576,7 +512,7 @@ $MdsLoopApp = {
+Thread1 = { +Thread1 = {
Class = RealTimeThread Class = RealTimeThread
CPUs = 0x1 CPUs = 0x1
Functions = {GAMTimer GAMFileReader FlatIOGAM GAMLangSigs GAMElectricProbes GAMFileWriter } Functions = {GAMTimer GAMFileReader GAMLangSigs GAMElectricProbes GAMFileWriter }
} }
} }
} }

View File

@@ -64,12 +64,15 @@ namespace MARTe {
inputElectricOuter = NULL_PTR(MARTe::float32 *); inputElectricOuter = NULL_PTR(MARTe::float32 *);
inputElectricBottom = NULL_PTR(MARTe::float32 *); inputElectricBottom = NULL_PTR(MARTe::float32 *);
*/ */
lastInputs = NULL_PTR(MARTe::float32**); triggerSdas = NULL_PTR(MARTe::uint32 *);
inputSignal = NULL; // NULL_PTR(MARTe::float32*); inputSignal = NULL; // NULL_PTR(MARTe::float32*);
outputEpR = NULL_PTR(MARTe::float32 *); outputEpR = NULL_PTR(MARTe::float32 *);
outputEpZ = NULL_PTR(MARTe::float32 *); outputEpZ = NULL_PTR(MARTe::float32 *);
resetInEachState = false; resetInEachState = false;
lastInputs = NULL_PTR(MARTe::float32**);
lastTriggerSdas = 0u;
} }
ElectricProbesGAM::~ElectricProbesGAM() { ElectricProbesGAM::~ElectricProbesGAM() {
@@ -90,13 +93,6 @@ namespace MARTe {
} }
delete[] lastInputs; delete[] lastInputs;
} }
/*
for (k=0u; k < EP_NUM_INPUTS; k++) {
if(lastInputs[k] != NULL_PTR(MARTe::float32 *)) {
delete [] lastInputs[k];
}
}
*/
} }
bool ElectricProbesGAM::Initialise(MARTe::StructuredDataI & data) { bool ElectricProbesGAM::Initialise(MARTe::StructuredDataI & data) {
@@ -151,20 +147,20 @@ namespace MARTe {
bool ElectricProbesGAM::Setup() { bool ElectricProbesGAM::Setup() {
using namespace MARTe; using namespace MARTe;
uint32 numberOfInputSignals = GetNumberOfInputSignals(); uint32 numberOfInputSignals = GetNumberOfInputSignals();
bool ok = (numberOfInputSignals == 1u); bool ok = (numberOfInputSignals == 2u);
if (!ok) { if (!ok) {
REPORT_ERROR(ErrorManagement::ParametersError, "The number of input signals shall be equal to 4. numberOfInputSignals = %d ", numberOfInputSignals); REPORT_ERROR(ErrorManagement::ParametersError, "The number of input signals shall be equal to 2. numberOfInputSignals = %d ", numberOfInputSignals);
} }
if (ok) { if (ok) {
StreamString inputSignalName; StreamString inputSignalName;
ok = GetSignalName(InputSignals, 0u, inputSignalName); ok = GetSignalName(InputSignals, 0u, inputSignalName);
TypeDescriptor inputSignalType = GetSignalType(InputSignals, 0u); TypeDescriptor inputSignalType = GetSignalType(InputSignals, 0u);
ok = (inputSignalType == Float32Bit); ok = (inputSignalType == UnsignedInteger32Bit);
if (!ok) { if (!ok) {
const char8 * const inputSignalTypeStr = TypeDescriptor::GetTypeNameFromTypeDescriptor(inputSignalType); const char8 * const inputSignalTypeStr = TypeDescriptor::GetTypeNameFromTypeDescriptor(inputSignalType);
REPORT_ERROR(ErrorManagement::ParametersError, REPORT_ERROR(ErrorManagement::ParametersError,
"The type of the input signals shall be float32. inputSignalType = %s", inputSignalTypeStr); "The type of the input signals shall be uint32. inputSignalType = %s", inputSignalTypeStr);
} }
uint32 numberOfInputSamples = 0u; uint32 numberOfInputSamples = 0u;
if (ok) { if (ok) {
@@ -194,6 +190,49 @@ namespace MARTe {
if (ok) { if (ok) {
ok = GetSignalNumberOfElements(InputSignals, 0u, numberOfInputElements); ok = GetSignalNumberOfElements(InputSignals, 0u, numberOfInputElements);
} }
if (ok) {
ok = (numberOfInputElements == 1u);
}
if (!ok) {
REPORT_ERROR(ErrorManagement::ParametersError,
"The number of input signal elements shall be equal to 1. numberOfInputElements(%s) = %d", inputSignalName.Buffer(), numberOfInputElements);
}
ok = GetSignalName(InputSignals, 1u, inputSignalName);
inputSignalType = GetSignalType(InputSignals, 1u);
ok = (inputSignalType == Float32Bit);
if (!ok) {
const char8 * const inputSignalTypeStr = TypeDescriptor::GetTypeNameFromTypeDescriptor(inputSignalType);
REPORT_ERROR(ErrorManagement::ParametersError,
"The type of the input signals shall be float32. inputSignalType = %s", inputSignalTypeStr);
}
numberOfInputSamples = 0u;
if (ok) {
ok = GetSignalNumberOfSamples(InputSignals, 1u, numberOfInputSamples);
}
if (ok) {
ok = (numberOfInputSamples == 1u);
}
if (!ok) {
REPORT_ERROR(ErrorManagement::ParametersError,
"The number of input signals samples shall be equal to 1. numberOfInputSamples = %d", numberOfInputSamples);
}
numberOfInputDimensions = 0u;
if (ok) {
ok = GetSignalNumberOfDimensions(InputSignals, 1u, numberOfInputDimensions);
}
if (ok) {
ok = (numberOfInputDimensions == 0u);
if (!ok) {
REPORT_ERROR(
ErrorManagement::ParametersError,
"The number of input signals dimensions shall be equal to 0. numberOfInputDimensions(%s) = %d", inputSignalName.Buffer(), numberOfInputDimensions);
}
}
if (ok) {
ok = GetSignalNumberOfElements(InputSignals, 1u, numberOfInputElements);
}
if (ok) { if (ok) {
ok = (numberOfInputElements == 4u); ok = (numberOfInputElements == 4u);
} }
@@ -220,7 +259,8 @@ namespace MARTe {
} }
} }
if (ok) { if (ok) {
inputSignal = reinterpret_cast<float32 *>(GetInputSignalMemory(0u)); triggerSdas = reinterpret_cast<uint32 *>(GetInputSignalMemory(0u));
inputSignal = reinterpret_cast<float32 *>(GetInputSignalMemory(1u));
/* /*
inputElectricTop = reinterpret_cast<float32 *>(GetInputSignalMemory(0u)); inputElectricTop = reinterpret_cast<float32 *>(GetInputSignalMemory(0u));
inputElectricInner = reinterpret_cast<float32 *>(GetInputSignalMemory(1u)); inputElectricInner = reinterpret_cast<float32 *>(GetInputSignalMemory(1u));
@@ -309,18 +349,16 @@ namespace MARTe {
} }
bool ElectricProbesGAM::Execute() { bool ElectricProbesGAM::Execute() {
//*outputEpZ = 3.4; /* inputElectricOuter - inputElectricInner */
*outputEpR = inputSignal[0]; *outputEpR = (inputSignal[2] - inputOffset[2]) -
*outputEpZ = inputSignal[0] - inputOffsets[0]; (inputSignal[1] - inputOffset[1]);
//*outputEpR = (inputSignal[2] - inputOffsets[2]) - *outputEpZ = inputSignal[0] - inputOffset[0];
//*outputEpZ = inputSignal[0] - inputSignal[3]; //*outputEpZ = inputSignal[0] - inputSignal[3];
//*outputSignal1 = *inputSignals[0] - *inputSignals[1];
//update the last values /* update the last value arrays */
for (MARTe::uint32 i = 0u; i < numberOfInputElements; i++) { for (MARTe::uint32 i = 0u; i < numberOfInputElements; i++) {
if (numberOfSamplesAvg > 2u) { if (numberOfSamplesAvg > 2u) {
/*lint -e{9117} implicit conversion is safe*/
for (MARTe::uint32 k = (numberOfSamplesAvg - 1u); k > 0u; k--) { for (MARTe::uint32 k = (numberOfSamplesAvg - 1u); k > 0u; k--) {
lastInputs[i][k] = lastInputs[i][k - 1]; lastInputs[i][k] = lastInputs[i][k - 1];
} }
@@ -335,9 +373,18 @@ namespace MARTe {
lastInputs[1][0] = *inputElectricInner; lastInputs[1][0] = *inputElectricInner;
lastInputs[2][0] = *inputElectricOuter; lastInputs[2][0] = *inputElectricOuter;
lastInputs[3][0] = *inputElectricBottom; lastInputs[3][0] = *inputElectricBottom;
//lastInputs[i][0] = input[i][numberOfSamples - 1u];
lastInputs[i][0] = input[i][numberOfSamples - 1u];
} }
*/ */
/* Should use a MARTe2 Message.
* Here for Sdas recorded signel with Trigger pseudo-signal
* */
if ((lastTriggerSdas == 0u) && (*triggerSdas == 1u)) {
CalcOffSets();
}
lastTriggerSdas = *triggerSdas;
return true; return true;
} }
@@ -404,8 +451,6 @@ namespace MARTe {
ErrorManagement::ErrorType ElectricProbesGAM::CalcOffSets() { ErrorManagement::ErrorType ElectricProbesGAM::CalcOffSets() {
ErrorManagement::ErrorType ret = MARTe::ErrorManagement::NoError; ErrorManagement::ErrorType ret = MARTe::ErrorManagement::NoError;
//REPORT_ERROR(ErrorManagement::Information,
// "CalcOffSets. numberOfSamplesAvg: %d!", numberOfSamplesAvg);
REPORT_ERROR(ErrorManagement::Information, REPORT_ERROR(ErrorManagement::Information,
"CalcOffSets. Inputs:%f, %f, %f, %f.", "CalcOffSets. Inputs:%f, %f, %f, %f.",
inputSignal[0], inputSignal[0],
@@ -414,27 +459,26 @@ namespace MARTe {
inputSignal[3]); inputSignal[3]);
if (numberOfSamplesAvg > 1u) { if (numberOfSamplesAvg > 1u) {
for (uint32 i = 0u; i < EP_NUM_INPUTS; i++) { for (uint32 i = 0u; i < EP_NUM_INPUTS; i++) {
inputOffsets[i] = 0.0f; inputOffset[i] = 0.0f;
for (uint32 k = 0 ; k < numberOfSamplesAvg; k++) { for (uint32 k = 0 ; k < numberOfSamplesAvg; k++) {
inputOffsets[i] += lastInputs[i][k]; inputOffset[i] += lastInputs[i][k];
} }
inputOffsets[i] /= numberOfSamplesAvg; inputOffset[i] /= numberOfSamplesAvg;
} }
REPORT_ERROR(ErrorManagement::Information, REPORT_ERROR(ErrorManagement::Information,
"CalcOffSets. Offset:%f, %f, %f, %f.", "CalcOffSets. Offset:%f, %f, %f, %f.",
inputOffsets[0], inputOffset[0],
inputOffsets[1], inputOffset[1],
inputOffsets[2], inputOffset[2],
inputOffsets[3]); inputOffset[3]);
} }
return ret; return ret;
} }
CLASS_REGISTER(ElectricProbesGAM, "1.0") CLASS_REGISTER(ElectricProbesGAM, "1.1")
// CLASS_METHOD_REGISTER(ElectricProbesGAM, ElectricProbesGAM::CalcOffSets)
CLASS_METHOD_REGISTER(ElectricProbesGAM, CalcOffSets) CLASS_METHOD_REGISTER(ElectricProbesGAM, CalcOffSets)
} /* namespace MARTeIsttok */ } /* namespace MARTeIsttok */

View File

@@ -153,8 +153,9 @@ namespace MARTe {
* The input signals * The input signals
*/ */
uint32 *triggerSdas;
/** /**
* The input signal * The input Electric Probes signals
*/ */
float32 *inputSignal; float32 *inputSignal;
@@ -166,7 +167,7 @@ namespace MARTe {
*/ */
uint32 numberOfInputElements; uint32 numberOfInputElements;
float32 inputOffsets[4]; float32 inputOffset[4];
MARTe::float32 **lastInputs; MARTe::float32 **lastInputs;
@@ -174,7 +175,6 @@ namespace MARTe {
* The output signals * The output signals
*/ */
// MARTe::float32 **outputSignals; // MARTe::float32 **outputSignals;
//MARTe::float32 *outputSignal1;
float32 *outputEpR; float32 *outputEpR;
float32 *outputEpZ; float32 *outputEpZ;
@@ -188,6 +188,10 @@ namespace MARTe {
*/ */
StreamString lastStateExecuted; StreamString lastStateExecuted;
/**
* Flag to detect SDAS Trigger Edge.
*/
uint32 lastTriggerSdas;
}; };
} }

91
Startup/RtAppFile.sh Executable file
View File

@@ -0,0 +1,91 @@
#!/bin/bash
#Arguments -f FILENAME -m MESSAGE | -s STATE [-d cgdb|strace]
MDS=0
DEBUG=""
INPUT_ARGS=$*
while test $# -gt 0
do
case "$1" in
-d|--debug)
DEBUG="$2"
;;
-mds)
MDS=1
;;
esac
shift
done
MARTe2_HOME=~/git-repos/MARTe2
MARTe2_DIR=$MARTe2_HOME/MARTe2
MARTe2_Components_DIR=$MARTe2_HOME/MARTe2-components
MARTe2_Demos_DIR=~/git-repos/MARTe2-demos-padova
EPICS_ROOT=/opt/epics
EPICS_BASE=${EPICS_ROOT}/epics-base
EPICS_HOST_ARCH=linux-x86_64
EPICS_CA_ADDR_LIST="localhost"
#export EPICS_CA_ADDR_LIST="192.168.0.60 192.168.0.21 192.168.0.22 192.168.0.99"
#export EPICS_CA_ADDR_LIST="192.168.88.251"
# export EPICS_CA_ADDR_LIST="10.10.136.177"
export EPICS_CA_AUTO_ADDR_LIST="NO"
# export rtappdemo_path=$MARTe2_Demos_DIR/Trees
# rtappreader_path=$MARTe2_Demos_DIR/Trees
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/Components/GAMs/ElectricProbesGAM/
# LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/Components/DataSources/ADCSimulator/
#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/Components/Other/ControllerEx1/
#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../Build/x86-linux/Components/Other/ControllerEx2/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_DIR/Build/x86-linux/Core/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/EPICSCA/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/EPICSPVA/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LinuxTimer/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LoggerDataSource/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/FileDataSource/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/LinkDataSource/
#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/UDP/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/MDSReader/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/MDSWriter/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadSynchronisation/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/DataSources/RealTimeThreadAsyncBridge/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConstantGAM/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/ConversionGAM/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/FlattenedStructIOGAM/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/IOGAM/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/MessageGAM/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/FilterGAM/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/HistogramGAM/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/SSMGAM/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/TriggerOnChangeGAM/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/GAMs/WaveformGAM/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/BaseLib2Wrapper/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/EPICS/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/EPICSPVA/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/MemoryGate/
# LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/NI9157Device/
# LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/OPCUA/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MARTe2_Components_DIR/Build/x86-linux/Components/Interfaces/SysLogger/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$EPICS_BASE/lib/$EPICS_HOST_ARCH
echo $LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH
#export isttoksdas_path=/home/mdsplus/Trees
export isttokoutput_path=/home/mdsplus/Trees
# export rtappdemo_path=../Trees
#if [ ${MDS} == 1 ]; then
#fi
if [ "$DEBUG" = "cgdb" ]
then
cgdb --args $MARTe2_DIR/Build/x86-linux/App/MARTeApp.ex $INPUT_ARGS
else
$MARTe2_DIR/Build/x86-linux/App/MARTeApp.ex $INPUT_ARGS
fi