DataStreamInterface: (1) supports multiple meters, (2) Shutdown() added
This commit is contained in:
parent
3ac90ee622
commit
fa03c09f09
@ -7,49 +7,77 @@ namespace DataStreamInterface
|
|||||||
{
|
{
|
||||||
public interface IDataStreamMeter
|
public interface IDataStreamMeter
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Returns count of water meters supported by the data stream component
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Water meters count</returns>
|
||||||
|
int GetMetersCount();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get state of the connected data stream meter
|
/// Get state of the connected data stream meter
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="meterIx">Index of the meter in range 0 .. (GetMetersCount() - 1)</param>
|
||||||
/// <param name="state">Current state of the meter</param>
|
/// <param name="state">Current state of the meter</param>
|
||||||
|
/// <param name="parameter">Current extra parameter of the meter</param>
|
||||||
/// <returns>true when successful</returns>
|
/// <returns>true when successful</returns>
|
||||||
bool GetState(out int state, out string parameter);
|
bool GetState(int meterIx, out int state, out string parameter);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Set state of the connected data stream meter
|
/// Set state of the connected data stream meter
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="meterIx">Index of the meter in range 0 .. (GetMetersCount() - 1)</param>
|
||||||
/// <param name="state">Required state of the meter</param>
|
/// <param name="state">Required state of the meter</param>
|
||||||
|
/// <param name="parameter">Required extra parameter of the meter</param>
|
||||||
/// <returns>true when successful</returns>
|
/// <returns>true when successful</returns>
|
||||||
bool SetState(int state, string parameter);
|
bool SetState(int meterIx, int state, string parameter);
|
||||||
|
|
||||||
|
bool SetStateAll(int state, string parameter);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Establish connection with a data stream meter
|
/// Establish connection with a data stream meter
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="meterIx">Index of the meter in range 0 .. (GetMetersCount() - 1)</param>
|
||||||
/// <param name="connectionParameters">Connection parameters</param>
|
/// <param name="connectionParameters">Connection parameters</param>
|
||||||
/// <param name="meterId">Meter ID (e.g. serial number)</param>
|
/// <param name="meterId">Meter ID (e.g. serial number)</param>
|
||||||
/// <returns>true when successful</returns>
|
/// <returns>true when successful</returns>
|
||||||
bool OpenConnection(string connectionParameters, out string meterId);
|
bool OpenConnection(int meterIx, string connectionParameters, out string meterId);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Closes connection with the data stream meter
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>true when successful</returns>
|
|
||||||
bool CloseConnection();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Stars saving measurement results into internal data structures of the component.
|
/// Stars saving measurement results into internal data structures of the component.
|
||||||
/// Each data frame obtains a unique ID.
|
/// Each data frame obtains a unique ID.
|
||||||
/// The very first data fraim obrains ID = 0.
|
/// The very first data fraim obrains ID = 0.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="meterIx">Index of the meter in range 0 .. (GetMetersCount() - 1)</param>
|
||||||
/// <returns>true when successful</returns>
|
/// <returns>true when successful</returns>
|
||||||
bool StartMeasurement();
|
bool StartMeasurement(int meterIx);
|
||||||
|
|
||||||
|
bool StartMeasurementAll();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Stops saving measurement results into internal data structures of the component.
|
/// Stops saving measurement results into internal data structures of the component.
|
||||||
/// Updates ID of the last date frame received from the meter.
|
/// Updates ID of the last date frame received from the meter.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="meterIx">Index of the meter in range 0 .. (GetMetersCount() - 1)</param>
|
||||||
/// <param name="storedFramesCount">Number of stored date frames</param>
|
/// <param name="storedFramesCount">Number of stored date frames</param>
|
||||||
/// <returns>true when successful</returns>
|
/// <returns>true when successful</returns>
|
||||||
bool StopMeasurement(out Int64 storedFramesCount);
|
bool StopMeasurement(int meterIx, out Int64 storedFramesCount);
|
||||||
|
|
||||||
|
bool StopMeasurementAll(out Int64[] storedFramesCounts);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Closes connection with the data stream meter
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="meterIx">Index of the meter in range 0 .. (GetMetersCount() - 1)</param>
|
||||||
|
/// <returns>true when successful</returns>
|
||||||
|
bool CloseConnection(int meterIx);
|
||||||
|
|
||||||
|
bool CloseConnectionAll();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This function is called when TBF program is shutting down.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>true when successful</returns>
|
||||||
|
bool Shutdown();
|
||||||
|
|
||||||
///------------------------------------------------
|
///------------------------------------------------
|
||||||
/// Units of time, volume and optional quantities
|
/// Units of time, volume and optional quantities
|
||||||
@ -94,17 +122,19 @@ namespace DataStreamInterface
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Retuns 'count' data frames starting with data frame with ID = 'id'
|
/// Retuns 'count' data frames starting with data frame with ID = 'id'
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="meterIx">Index of the meter in range 0 .. (GetMetersCount() - 1)</param>
|
||||||
/// <param name="id">First frame ID</param>
|
/// <param name="id">First frame ID</param>
|
||||||
/// <param name="count">Frames count</param>
|
/// <param name="count">Frames count</param>
|
||||||
/// <returns>Selected data frames</returns>
|
/// <returns>Selected data frames</returns>
|
||||||
DataFrame[] GetFrames(Int64 id, int count);
|
DataFrame[] GetFrames(int meterIx, Int64 id, int count);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns ID of the data frame where time equals or exceeds the specified time.
|
/// Returns ID of the data frame where time equals or exceeds the specified time.
|
||||||
/// When time of the first frame (ID=0) is larger then specified time, function returns 0.
|
/// When time of the first frame (ID=0) is larger then specified time, function returns 0.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="meterIx">Index of the meter in range 0 .. (GetMetersCount() - 1)</param>
|
||||||
/// <param name="time">Time</param>
|
/// <param name="time">Time</param>
|
||||||
/// <returns>ID of the data frame at or after the pecified time</returns>
|
/// <returns>ID of the data frame at or after the pecified time</returns>
|
||||||
Int64 GetID(double time);
|
Int64 GetID(int meterIx, double time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
23
DataStreamInterfaceTest/DemoMainWnd.Designer.cs
generated
23
DataStreamInterfaceTest/DemoMainWnd.Designer.cs
generated
@ -49,8 +49,8 @@
|
|||||||
this.logsTextBox = new System.Windows.Forms.TextBox();
|
this.logsTextBox = new System.Windows.Forms.TextBox();
|
||||||
this.dataTabControl = new System.Windows.Forms.TabControl();
|
this.dataTabControl = new System.Windows.Forms.TabControl();
|
||||||
this.tabPage1 = new System.Windows.Forms.TabPage();
|
this.tabPage1 = new System.Windows.Forms.TabPage();
|
||||||
this.tabPage2 = new System.Windows.Forms.TabPage();
|
|
||||||
this.framesListView = new System.Windows.Forms.ListView();
|
this.framesListView = new System.Windows.Forms.ListView();
|
||||||
|
this.tabPage2 = new System.Windows.Forms.TabPage();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
||||||
this.splitContainer1.Panel1.SuspendLayout();
|
this.splitContainer1.Panel1.SuspendLayout();
|
||||||
this.splitContainer1.Panel2.SuspendLayout();
|
this.splitContainer1.Panel2.SuspendLayout();
|
||||||
@ -304,16 +304,6 @@
|
|||||||
this.tabPage1.Text = "Transferred frames";
|
this.tabPage1.Text = "Transferred frames";
|
||||||
this.tabPage1.UseVisualStyleBackColor = true;
|
this.tabPage1.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// tabPage2
|
|
||||||
//
|
|
||||||
this.tabPage2.Location = new System.Drawing.Point(4, 22);
|
|
||||||
this.tabPage2.Name = "tabPage2";
|
|
||||||
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
|
|
||||||
this.tabPage2.Size = new System.Drawing.Size(664, 331);
|
|
||||||
this.tabPage2.TabIndex = 1;
|
|
||||||
this.tabPage2.Text = "Graph";
|
|
||||||
this.tabPage2.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// framesListView
|
// framesListView
|
||||||
//
|
//
|
||||||
this.framesListView.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.framesListView.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
@ -325,6 +315,16 @@
|
|||||||
this.framesListView.UseCompatibleStateImageBehavior = false;
|
this.framesListView.UseCompatibleStateImageBehavior = false;
|
||||||
this.framesListView.View = System.Windows.Forms.View.Details;
|
this.framesListView.View = System.Windows.Forms.View.Details;
|
||||||
//
|
//
|
||||||
|
// tabPage2
|
||||||
|
//
|
||||||
|
this.tabPage2.Location = new System.Drawing.Point(4, 22);
|
||||||
|
this.tabPage2.Name = "tabPage2";
|
||||||
|
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
|
||||||
|
this.tabPage2.Size = new System.Drawing.Size(664, 331);
|
||||||
|
this.tabPage2.TabIndex = 1;
|
||||||
|
this.tabPage2.Text = "Graph";
|
||||||
|
this.tabPage2.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
// DemoMainWnd
|
// DemoMainWnd
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
@ -333,6 +333,7 @@
|
|||||||
this.Controls.Add(this.splitContainer1);
|
this.Controls.Add(this.splitContainer1);
|
||||||
this.Name = "DemoMainWnd";
|
this.Name = "DemoMainWnd";
|
||||||
this.Text = "Datastream interface test";
|
this.Text = "Datastream interface test";
|
||||||
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DemoMainWnd_FormClosing);
|
||||||
this.splitContainer1.Panel1.ResumeLayout(false);
|
this.splitContainer1.Panel1.ResumeLayout(false);
|
||||||
this.splitContainer1.Panel1.PerformLayout();
|
this.splitContainer1.Panel1.PerformLayout();
|
||||||
this.splitContainer1.Panel2.ResumeLayout(false);
|
this.splitContainer1.Panel2.ResumeLayout(false);
|
||||||
|
|||||||
@ -127,7 +127,7 @@ namespace DataStreamInterfaceTest
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
string meterId;
|
string meterId;
|
||||||
if (dataStreamMeter.OpenConnection("no connection parameters", out meterId))
|
if (dataStreamMeter.OpenConnection(0, "no connection parameters", out meterId))
|
||||||
{
|
{
|
||||||
activityLog.Print(string.Format("Connection established, meter ID is {0}", meterId));
|
activityLog.Print(string.Format("Connection established, meter ID is {0}", meterId));
|
||||||
}
|
}
|
||||||
@ -144,7 +144,7 @@ namespace DataStreamInterfaceTest
|
|||||||
ShowNoMeterInterfaceMessage();
|
ShowNoMeterInterfaceMessage();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (dataStreamMeter.CloseConnection())
|
if (dataStreamMeter.CloseConnection(0))
|
||||||
{
|
{
|
||||||
framesListView.Items.Clear();
|
framesListView.Items.Clear();
|
||||||
activityLog.Print("Connection closed");
|
activityLog.Print("Connection closed");
|
||||||
@ -156,6 +156,14 @@ namespace DataStreamInterfaceTest
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void DemoMainWnd_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
|
{
|
||||||
|
if (dataStreamMeter == null)
|
||||||
|
{
|
||||||
|
dataStreamMeter.Shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void getStateButton_Click(object sender, EventArgs e)
|
private void getStateButton_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (dataStreamMeter == null)
|
if (dataStreamMeter == null)
|
||||||
@ -164,7 +172,7 @@ namespace DataStreamInterfaceTest
|
|||||||
{
|
{
|
||||||
int state;
|
int state;
|
||||||
string parameter;
|
string parameter;
|
||||||
if (dataStreamMeter.GetState(out state, out parameter))
|
if (dataStreamMeter.GetState(0, out state, out parameter))
|
||||||
{
|
{
|
||||||
activityLog.Print(string.Format("Water meter state is {0} / {1}", state, parameter));
|
activityLog.Print(string.Format("Water meter state is {0} / {1}", state, parameter));
|
||||||
}
|
}
|
||||||
@ -184,7 +192,7 @@ namespace DataStreamInterfaceTest
|
|||||||
GetStateDlg dlg = new GetStateDlg();
|
GetStateDlg dlg = new GetStateDlg();
|
||||||
if (dlg.ShowDialog() == DialogResult.OK)
|
if (dlg.ShowDialog() == DialogResult.OK)
|
||||||
{
|
{
|
||||||
if (dataStreamMeter.SetState(dlg.State, dlg.Parameter))
|
if (dataStreamMeter.SetState(0, dlg.State, dlg.Parameter))
|
||||||
{
|
{
|
||||||
activityLog.Print(string.Format("Water meter state set to {0} / {1}", dlg.State, dlg.Parameter));
|
activityLog.Print(string.Format("Water meter state set to {0} / {1}", dlg.State, dlg.Parameter));
|
||||||
}
|
}
|
||||||
@ -202,7 +210,7 @@ namespace DataStreamInterfaceTest
|
|||||||
ShowNoMeterInterfaceMessage();
|
ShowNoMeterInterfaceMessage();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (dataStreamMeter.StartMeasurement())
|
if (dataStreamMeter.StartMeasurement(0))
|
||||||
{
|
{
|
||||||
framesListView.Items.Clear();
|
framesListView.Items.Clear();
|
||||||
activityLog.Print(string.Format("Measurement started"));
|
activityLog.Print(string.Format("Measurement started"));
|
||||||
@ -220,7 +228,7 @@ namespace DataStreamInterfaceTest
|
|||||||
ShowNoMeterInterfaceMessage();
|
ShowNoMeterInterfaceMessage();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (dataStreamMeter.StopMeasurement(out storedFramesCount))
|
if (dataStreamMeter.StopMeasurement(0, out storedFramesCount))
|
||||||
{
|
{
|
||||||
framesListView.Items.Clear();
|
framesListView.Items.Clear();
|
||||||
activityLog.Print(string.Format("Measurement sopped, {0} frames acquired", storedFramesCount));
|
activityLog.Print(string.Format("Measurement sopped, {0} frames acquired", storedFramesCount));
|
||||||
@ -240,7 +248,7 @@ namespace DataStreamInterfaceTest
|
|||||||
{
|
{
|
||||||
GetFrameBoundariesDlg dlg = new GetFrameBoundariesDlg("Enter frames range boundaries", 0, storedFramesCount - 1);
|
GetFrameBoundariesDlg dlg = new GetFrameBoundariesDlg("Enter frames range boundaries", 0, storedFramesCount - 1);
|
||||||
if (dlg.ShowDialog() != DialogResult.OK) return;
|
if (dlg.ShowDialog() != DialogResult.OK) return;
|
||||||
DataFrame[] frames = dataStreamMeter.GetFrames(dlg.From, Convert.ToInt32(dlg.To - dlg.From + 1));
|
DataFrame[] frames = dataStreamMeter.GetFrames(0, dlg.From, Convert.ToInt32(dlg.To - dlg.From + 1));
|
||||||
{
|
{
|
||||||
foreach (var frame in frames)
|
foreach (var frame in frames)
|
||||||
{
|
{
|
||||||
@ -259,7 +267,7 @@ namespace DataStreamInterfaceTest
|
|||||||
GetDblValueDlg dlg = new GetDblValueDlg("Enter time in seconds");
|
GetDblValueDlg dlg = new GetDblValueDlg("Enter time in seconds");
|
||||||
if (dlg.ShowDialog() == DialogResult.OK)
|
if (dlg.ShowDialog() == DialogResult.OK)
|
||||||
{
|
{
|
||||||
Int64 id = dataStreamMeter.GetID(dlg.DblValue);
|
Int64 id = dataStreamMeter.GetID(0, dlg.DblValue);
|
||||||
activityLog.Print(string.Format("GetID({0}) returned {1}", dlg.DblValue, id));
|
activityLog.Print(string.Format("GetID({0}) returned {1}", dlg.DblValue, id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -83,7 +83,13 @@ namespace DataStreamMeter
|
|||||||
return Unit.None;
|
return Unit.None;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool OpenConnection(string connectionParameters, out string meterID)
|
|
||||||
|
public int GetMetersCount()
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool OpenConnection(int meterIx, string connectionParameters, out string meterID)
|
||||||
{
|
{
|
||||||
lock (stateChangeAndTimerTickLock)
|
lock (stateChangeAndTimerTickLock)
|
||||||
{
|
{
|
||||||
@ -107,7 +113,7 @@ namespace DataStreamMeter
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CloseConnection()
|
public bool CloseConnection(int meterIx)
|
||||||
{
|
{
|
||||||
bool closeModelessDlg = false;
|
bool closeModelessDlg = false;
|
||||||
|
|
||||||
@ -129,20 +135,35 @@ namespace DataStreamMeter
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool GetState(out int state, out string parameter)
|
public bool CloseConnectionAll()
|
||||||
|
{
|
||||||
|
return CloseConnection(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Shutdown()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool GetState(int meterIx, out int state, out string parameter)
|
||||||
{
|
{
|
||||||
state = (int)this.State;
|
state = (int)this.State;
|
||||||
parameter = this.connectionParameters;
|
parameter = this.connectionParameters;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SetState(int state, string parameter)
|
public bool SetState(int meterIx, int state, string parameter)
|
||||||
{
|
{
|
||||||
/// It's not allowed to change the satate in this demo
|
/// It's not allowed to change the satate in this demo
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool StartMeasurement()
|
public bool SetStateAll(int state, string parameter)
|
||||||
|
{
|
||||||
|
return SetState(0, state, parameter);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool StartMeasurement(int meterIx = 0)
|
||||||
{
|
{
|
||||||
lock (stateChangeAndTimerTickLock)
|
lock (stateChangeAndTimerTickLock)
|
||||||
{
|
{
|
||||||
@ -161,7 +182,12 @@ namespace DataStreamMeter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool StopMeasurement(out Int64 storedFramesCount)
|
public bool StartMeasurementAll()
|
||||||
|
{
|
||||||
|
return StartMeasurement(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool StopMeasurement(int meterIx, out Int64 storedFramesCount)
|
||||||
{
|
{
|
||||||
lock (stateChangeAndTimerTickLock)
|
lock (stateChangeAndTimerTickLock)
|
||||||
{
|
{
|
||||||
@ -196,6 +222,12 @@ namespace DataStreamMeter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool StopMeasurementAll(out Int64[] storedFramesCount)
|
||||||
|
{
|
||||||
|
storedFramesCount = new Int64[1];
|
||||||
|
return StopMeasurement(0, out storedFramesCount[0]);
|
||||||
|
}
|
||||||
|
|
||||||
public void TimerTick(double flow_m3ph)
|
public void TimerTick(double flow_m3ph)
|
||||||
{
|
{
|
||||||
lock (stateChangeAndTimerTickLock)
|
lock (stateChangeAndTimerTickLock)
|
||||||
@ -259,7 +291,7 @@ namespace DataStreamMeter
|
|||||||
/// <param name="id">First frame ID</param>
|
/// <param name="id">First frame ID</param>
|
||||||
/// <param name="count">Frames count</param>
|
/// <param name="count">Frames count</param>
|
||||||
/// <returns>Selected data frames</returns>
|
/// <returns>Selected data frames</returns>
|
||||||
public DataFrame[] GetFrames(Int64 startID, int count)
|
public DataFrame[] GetFrames(int meterIx, Int64 startID, int count)
|
||||||
{
|
{
|
||||||
DataFrame[] frames = new DataFrame[count];
|
DataFrame[] frames = new DataFrame[count];
|
||||||
|
|
||||||
@ -284,7 +316,7 @@ namespace DataStreamMeter
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="time">Time</param>
|
/// <param name="time">Time</param>
|
||||||
/// <returns>ID of the data frame at or after the pecified time</returns>
|
/// <returns>ID of the data frame at or after the pecified time</returns>
|
||||||
public Int64 GetID(double time)
|
public Int64 GetID(int meterIx, double time)
|
||||||
{
|
{
|
||||||
if (storedSamplesCount == 0) return -1;
|
if (storedSamplesCount == 0) return -1;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user