EP CalcOff no Msg
Signed-off-by: Bernardo Carvalho <bernardo.carvalho@tecnico.ulisboa.pt>
This commit is contained in:
@@ -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
113
Analysis/pyqtPlotFile.py
Executable 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
|
||||||
@@ -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
|
Type = uint32
|
||||||
MemberAliases = {
|
}
|
||||||
Inputs.TimeSdas = TimeSdas
|
Trigger = {
|
||||||
Inputs.SignalArray = LangmuirSignals
|
DataSource = FileReader_DS
|
||||||
}
|
Type = uint32
|
||||||
}
|
}
|
||||||
|
LangmuirSignals = {
|
||||||
|
DataSource = FileReader_DS
|
||||||
|
Type = float32
|
||||||
|
}
|
||||||
}
|
}
|
||||||
OutputSignals = {
|
OutputSignals = {
|
||||||
LangmuirStrt = {
|
TimeSdas = {
|
||||||
DataSource = DDB1
|
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
|
}
|
||||||
}
|
TriggerSdas = {
|
||||||
LangmuirStrt_SignalArray = {
|
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 }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,10 +373,19 @@ 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];
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
return true;
|
|
||||||
|
/* Should use a MARTe2 Message.
|
||||||
|
* Here for Sdas recorded signel with Trigger pseudo-signal
|
||||||
|
* */
|
||||||
|
if ((lastTriggerSdas == 0u) && (*triggerSdas == 1u)) {
|
||||||
|
CalcOffSets();
|
||||||
|
}
|
||||||
|
lastTriggerSdas = *triggerSdas;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ElectricProbesGAM::PrepareNextState(const char8 * const currentStateName,
|
bool ElectricProbesGAM::PrepareNextState(const char8 * const currentStateName,
|
||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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
91
Startup/RtAppFile.sh
Executable 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
|
||||||
|
|
||||||
Reference in New Issue
Block a user