285 lines
10 KiB
C#
285 lines
10 KiB
C#
|
|
using System;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Windows.Forms;
|
|||
|
|
using DataStreamInterface;
|
|||
|
|
|
|||
|
|
namespace DataStreamInterfaceTest
|
|||
|
|
{
|
|||
|
|
public partial class DemoMainWnd : Form
|
|||
|
|
{
|
|||
|
|
IDataStreamMeter dataStreamMeter;
|
|||
|
|
|
|||
|
|
ActivityLog activityLog;
|
|||
|
|
|
|||
|
|
Unit timeUnits;
|
|||
|
|
Unit volumeUnits;
|
|||
|
|
int quantitiesCount;
|
|||
|
|
string[] quantityCaption;
|
|||
|
|
Unit[] quantityUnit;
|
|||
|
|
|
|||
|
|
Int64 storedFramesCount;
|
|||
|
|
DataFrame[] transferredFrames;
|
|||
|
|
|
|||
|
|
public DemoMainWnd() : this(null) { }
|
|||
|
|
|
|||
|
|
public DemoMainWnd(IDataStreamMeter dataStreamMeter)
|
|||
|
|
{
|
|||
|
|
InitializeComponent();
|
|||
|
|
this.dataStreamMeter = dataStreamMeter;
|
|||
|
|
activityLog = new ActivityLog(logsTextBox);
|
|||
|
|
|
|||
|
|
framesListView.Columns.Add("ID", 100);
|
|||
|
|
framesListView.Columns.Add("Time", 100);
|
|||
|
|
framesListView.Columns.Add("Volume", 100);
|
|||
|
|
framesListView.Columns.Add("Additional quantities", 300);
|
|||
|
|
framesListView.ListViewItemSorter = new LviIDComparer();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void ShowNoMeterInterfaceMessage()
|
|||
|
|
{
|
|||
|
|
MessageBox.Show("No datastream meter interface");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void getTimeUnitsButton_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter == null)
|
|||
|
|
ShowNoMeterInterfaceMessage();
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
timeUnits = dataStreamMeter.GetTimeUnits();
|
|||
|
|
activityLog.Print(string.Format("Time units are {0}", timeUnits));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void getVolumeUnitsButton_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter == null)
|
|||
|
|
ShowNoMeterInterfaceMessage();
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
volumeUnits = dataStreamMeter.GetVolumeUnits();
|
|||
|
|
activityLog.Print(string.Format("Volume units are {0}", volumeUnits));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void getQuantitiesCountButton_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter == null)
|
|||
|
|
ShowNoMeterInterfaceMessage();
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int quantitesCountOri = quantitiesCount;
|
|||
|
|
quantitiesCount = dataStreamMeter.GetQuantitiesCount();
|
|||
|
|
activityLog.Print(string.Format("There are {0} additional quantites", quantitiesCount));
|
|||
|
|
|
|||
|
|
if (quantitesCountOri == 0)
|
|||
|
|
{
|
|||
|
|
quantityUnit = new Unit[quantitiesCount];
|
|||
|
|
quantityCaption = new string[quantitiesCount];
|
|||
|
|
for (int i = 0; i < quantitiesCount; i++) quantityCaption[i] = string.Empty;
|
|||
|
|
}
|
|||
|
|
else if (quantitiesCount != quantitesCountOri)
|
|||
|
|
{
|
|||
|
|
quantityUnit = new Unit[quantitiesCount];
|
|||
|
|
quantityCaption = new string[quantitiesCount];
|
|||
|
|
for (int i = 0; i < quantitiesCount; i++) quantityCaption[i] = string.Empty;
|
|||
|
|
|
|||
|
|
activityLog.Print(string.Format("Quantities count changed during operation"));
|
|||
|
|
MessageBox.Show("Quantities count changed during operation", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void getQuantityCaptionButton_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter == null)
|
|||
|
|
ShowNoMeterInterfaceMessage();
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
GetIntegerNumberDlg dlg = new GetIntegerNumberDlg(string.Format("Enter index {0} .. {1}", 0, quantitiesCount - 1), 0, quantitiesCount - 1);
|
|||
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|||
|
|
{
|
|||
|
|
quantityCaption[dlg.Number] = dataStreamMeter.GetQuantityCaption(dlg.Number);
|
|||
|
|
activityLog.Print(string.Format("Caption of quantity #{0} is {1}", dlg.Number, quantityCaption[dlg.Number]));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void getQuantityUnitsButton_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter == null)
|
|||
|
|
ShowNoMeterInterfaceMessage();
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
GetIntegerNumberDlg dlg = new GetIntegerNumberDlg(string.Format("Enter index {0} .. {1}", 0, quantitiesCount - 1), 0, quantitiesCount - 1);
|
|||
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|||
|
|
{
|
|||
|
|
quantityUnit[dlg.Number] = dataStreamMeter.GetQuantityUnits(dlg.Number);
|
|||
|
|
activityLog.Print(string.Format("Units of quantity #{0} are {1}", dlg.Number, quantityUnit[dlg.Number]));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void openConnectionButton_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter == null)
|
|||
|
|
ShowNoMeterInterfaceMessage();
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
string meterId;
|
|||
|
|
if (dataStreamMeter.OpenConnection("no connection parameters", out meterId))
|
|||
|
|
{
|
|||
|
|
activityLog.Print(string.Format("Connection established, meter ID is {0}", meterId));
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
activityLog.Print("Failed to establish a connection");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void closeConnectionButton_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter == null)
|
|||
|
|
ShowNoMeterInterfaceMessage();
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter.CloseConnection())
|
|||
|
|
{
|
|||
|
|
framesListView.Items.Clear();
|
|||
|
|
activityLog.Print("Connection closed");
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
activityLog.Print("Failed to close the connection");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void getStateButton_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter == null)
|
|||
|
|
ShowNoMeterInterfaceMessage();
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
int state;
|
|||
|
|
string parameter;
|
|||
|
|
if (dataStreamMeter.GetState(out state, out parameter))
|
|||
|
|
{
|
|||
|
|
activityLog.Print(string.Format("Water meter state is {0} / {1}", state, parameter));
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
activityLog.Print("Failed to obtain the water meter state");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void setStateButton_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter == null)
|
|||
|
|
ShowNoMeterInterfaceMessage();
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
GetStateDlg dlg = new GetStateDlg();
|
|||
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter.SetState(dlg.State, dlg.Parameter))
|
|||
|
|
{
|
|||
|
|
activityLog.Print(string.Format("Water meter state set to {0} / {1}", dlg.State, dlg.Parameter));
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
activityLog.Print(string.Format("Failed to set the water meter state to {0} / {1}", dlg.State, dlg.Parameter));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void startMeasurementButton_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter == null)
|
|||
|
|
ShowNoMeterInterfaceMessage();
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter.StartMeasurement())
|
|||
|
|
{
|
|||
|
|
framesListView.Items.Clear();
|
|||
|
|
activityLog.Print(string.Format("Measurement started"));
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
activityLog.Print("Failed to start a measurement");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void stopMeasurementButton_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter == null)
|
|||
|
|
ShowNoMeterInterfaceMessage();
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter.StopMeasurement(out storedFramesCount))
|
|||
|
|
{
|
|||
|
|
framesListView.Items.Clear();
|
|||
|
|
activityLog.Print(string.Format("Measurement sopped, {0} frames acquired", storedFramesCount));
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
activityLog.Print("Failed to stop the measurement");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void getFramesButton_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter == null)
|
|||
|
|
ShowNoMeterInterfaceMessage();
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
GetFrameBoundariesDlg dlg = new GetFrameBoundariesDlg("Enter frames range boundaries", 0, storedFramesCount - 1);
|
|||
|
|
if (dlg.ShowDialog() != DialogResult.OK) return;
|
|||
|
|
DataFrame[] frames = dataStreamMeter.GetFrames(dlg.From, Convert.ToInt32(dlg.To - dlg.From + 1));
|
|||
|
|
{
|
|||
|
|
foreach (var frame in frames)
|
|||
|
|
{
|
|||
|
|
if (frame != null) framesListView.Items.Add(GetListViewItem(frame));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void getIDButton_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dataStreamMeter == null)
|
|||
|
|
ShowNoMeterInterfaceMessage();
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
GetDblValueDlg dlg = new GetDblValueDlg("Enter time in seconds");
|
|||
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|||
|
|
{
|
|||
|
|
Int64 id = dataStreamMeter.GetID(dlg.DblValue);
|
|||
|
|
activityLog.Print(string.Format("GetID({0}) returned {1}", dlg.DblValue, id));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
ListViewItem GetListViewItem(DataFrame frame)
|
|||
|
|
{
|
|||
|
|
ListViewItem lvi = new ListViewItem(frame.ID.ToString());
|
|||
|
|
lvi.SubItems.Add(frame.Time.ToString());
|
|||
|
|
lvi.SubItems.Add(frame.Volume.ToString());
|
|||
|
|
StringBuilder sb = new StringBuilder();
|
|||
|
|
foreach (var quantity in frame.Quantity)
|
|||
|
|
{
|
|||
|
|
sb.Append(quantity.ToString());
|
|||
|
|
sb.Append(" ");
|
|||
|
|
}
|
|||
|
|
lvi.SubItems.Add(sb.ToString());
|
|||
|
|
lvi.Tag = frame;
|
|||
|
|
return lvi;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|