Keithley modifications.
This commit is contained in:
+3
-3
@@ -4,11 +4,11 @@
|
||||
using System.Collections.Generic;
|
||||
using TBF.BenchControl.Generic;
|
||||
|
||||
namespace TBF.BenchControl.Keithley.RS232
|
||||
namespace TBF.BenchControl.Keithley.Multimeter_2010_RS232
|
||||
{
|
||||
public class Factory : IComponentFactory
|
||||
{
|
||||
public string ClassName { get { return this.GetType().Namespace.Substring(17) + ".Multimeter"; } }
|
||||
public string ClassName { get { return GetType().Namespace.Substring(17); } }
|
||||
|
||||
public void ResetStaticProperties() { Multimeter.ResetStaticProperties(); }
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace TBF.BenchControl.Keithley.RS232
|
||||
|
||||
public IComponent GetComponent(IComponentCfg cfg, IList<IComponent> components) { return new Multimeter(cfg); }
|
||||
|
||||
public IComponentCfg DefaultConfig() { return new MultimeterCfg(this); }
|
||||
public IComponentCfg DefaultConfig() { return new MultimeterCfg(GetType().Namespace.Substring(17), this); }
|
||||
|
||||
public IComponentCfg CmpntCfgFromCmpntEntity(Config.Entities.Component component)
|
||||
{
|
||||
@@ -0,0 +1,259 @@
|
||||
///
|
||||
/// Copyright (c) 2016 Sensus Metering Systems
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO.Ports;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using log4net;
|
||||
using Config.Entities;
|
||||
using TBF.BenchControl.Generic;
|
||||
using TBF.Boxes;
|
||||
|
||||
namespace TBF.BenchControl.Keithley.Multimeter_2010_RS232
|
||||
{
|
||||
/// <summary>
|
||||
/// Root component for Modbus communication via serial port (RS485)
|
||||
/// </summary>
|
||||
public class Multimeter : ComponentBase, IDevice
|
||||
{
|
||||
private static readonly ILog log = LogManager.GetLogger(typeof(Multimeter));
|
||||
public override string ToString() { return string.Format("{0}({1})", GetType().Namespace.Substring(17), Cfg.ToString(1)); }
|
||||
|
||||
private readonly MultimeterCfg multimeterCfg;
|
||||
|
||||
|
||||
///
|
||||
/// Main result
|
||||
///
|
||||
public const int ChannelFrom = 1;
|
||||
public const int ChannelTo = 5;
|
||||
///
|
||||
public double[] Resistance; /// ChannelNr in range <ChannelFrom, ChannelTo> is used as an index to this array
|
||||
|
||||
|
||||
/// Private fields
|
||||
SerialPort serialPort;
|
||||
|
||||
IList<int> listOfReadOperations;
|
||||
IList<int> listOfChannels;
|
||||
int nextChannelIx; /// index to listOfChannels
|
||||
int currentChannel; /// current channel (ChannelFrom .. ChannelTo), 0 = invalid, updated when sending :rout:clos command
|
||||
enum ScanState
|
||||
{
|
||||
Off,
|
||||
Start_Reset,
|
||||
Reset_SwitchCh,
|
||||
SwitchCh_Read,
|
||||
Read_SwitchCh,
|
||||
}
|
||||
ScanState scanState;
|
||||
|
||||
|
||||
public Multimeter()
|
||||
{
|
||||
Resistance = new double[ChannelTo + 1];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ambient temperature / humidity / pressure meter 'Greco' connected via serial interface (RS232)
|
||||
/// Connection settings: 19200 Bd 8-bits No-parity 1-stop-bit Flow control: none or hardware.
|
||||
/// </summary>
|
||||
public Multimeter(Generic.IComponentCfg cfg)
|
||||
: base(cfg)
|
||||
{
|
||||
multimeterCfg = cfg as MultimeterCfg;
|
||||
serialPort = null;
|
||||
|
||||
Resistance = new double[ChannelTo + 1];
|
||||
for (int i = 0; i < Resistance.Length; i++) Resistance[i] = 0;
|
||||
|
||||
listOfReadOperations = new List<int>();
|
||||
listOfChannels = new List<int>();
|
||||
nextChannelIx = 0;
|
||||
currentChannel = 0; /// invalid, no :rout:clos command yet
|
||||
scanState = ScanState.Off;
|
||||
|
||||
log.Debug(this.ToString());
|
||||
}
|
||||
|
||||
~Multimeter()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Start reading temperature from specified channel
|
||||
/// </summary>
|
||||
/// <param name="channel">channel in range ChannelFrom .. ChannelTo</param>
|
||||
/// <returns>true when successful</returns>
|
||||
public bool StartReadingMultimeter(int channel)
|
||||
{
|
||||
log.DebugFormat("StartReadingMultimeter({0})", channel);
|
||||
|
||||
if (channel < ChannelFrom || channel > ChannelTo) return false; /// Invalid channel
|
||||
|
||||
listOfReadOperations.Add(channel);
|
||||
|
||||
if (!listOfChannels.Contains(channel))
|
||||
{
|
||||
listOfChannels.Add(channel);
|
||||
if (listOfChannels.Count == 1) StartScanning(); /// Count changed from 0 to 1
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stop reading temperature from specified channel
|
||||
/// </summary>
|
||||
/// <param name="channel">channel in range ChannelFrom .. ChannelTo</param>
|
||||
/// <returns>true when successful</returns>
|
||||
public bool StopReadingMultimeter(int channel)
|
||||
{
|
||||
log.DebugFormat("StopReadingMultimeter({0})", channel);
|
||||
|
||||
if (channel < ChannelFrom || channel > ChannelTo) return false; /// Invalid channel
|
||||
|
||||
if (!listOfReadOperations.Remove(channel)) return false; /// Channel not found on the list (no matching StartReading...)
|
||||
|
||||
for (int i = 0; i < listOfChannels.Count; i++)
|
||||
{
|
||||
if (listOfChannels[i] == channel)
|
||||
{
|
||||
listOfChannels.RemoveAt(i);
|
||||
if (listOfChannels.Count == 0)
|
||||
{
|
||||
StopScanning();
|
||||
}
|
||||
else if (nextChannelIx > i)
|
||||
{
|
||||
nextChannelIx--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public double ReadResistance(int channelNr)
|
||||
{
|
||||
if (channelNr < ChannelFrom || channelNr > ChannelTo) return 0;
|
||||
return Resistance[channelNr];
|
||||
}
|
||||
|
||||
|
||||
private void StartScanning()
|
||||
{
|
||||
for (int i = 0; i < Resistance.Length; i++) Resistance[i] = 0; /// Reset resistances (0 == invalid)
|
||||
///
|
||||
nextChannelIx = 0;
|
||||
currentChannel = 0; /// invalid, no :rout:clos command yet
|
||||
scanState = ScanState.Start_Reset;
|
||||
}
|
||||
|
||||
private void StopScanning()
|
||||
{
|
||||
scanState = ScanState.Off;
|
||||
}
|
||||
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
if (multimeterCfg.DebugLevel == DebugMode.Simulate)
|
||||
{
|
||||
log.FatalFormat("Simulated device {0}", ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
string comPortName = "COM" + multimeterCfg.ComPortNr.ToString();
|
||||
serialPort = new SerialPort(comPortName, multimeterCfg.BaudRate, multimeterCfg.Parity, multimeterCfg.DataBits, multimeterCfg.StopBits);
|
||||
serialPort.Handshake = multimeterCfg.Handshake;
|
||||
serialPort.Open();
|
||||
|
||||
log.FatalFormat("Successfully initialized device {0}", ToString());
|
||||
}
|
||||
|
||||
|
||||
public void SendMessage(string message)
|
||||
{
|
||||
if (multimeterCfg.DebugLevel == DebugMode.Simulate) return;
|
||||
serialPort.Write(message + "\r\n");
|
||||
log.DebugFormat("Sending message {0}", message);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>Run this device</summary>
|
||||
public void RunDeviceBefore()
|
||||
{
|
||||
if ((scanState == ScanState.Read_SwitchCh) && (currentChannel >= ChannelFrom) && (currentChannel <= ChannelTo))
|
||||
{
|
||||
string completeStr = serialPort.ReadExisting();
|
||||
int len = completeStr.Length - 2;
|
||||
if (len > 0)
|
||||
{
|
||||
string resStr = completeStr.Substring(0, len);
|
||||
log.DebugFormat("Received message {0}", resStr);
|
||||
double res;
|
||||
if (completeStr.IndexOf("\r\n") == len &&
|
||||
double.TryParse(resStr, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out res))
|
||||
{
|
||||
Resistance[currentChannel] = res;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>Run this device</summary>
|
||||
public void RunDeviceAfter()
|
||||
{
|
||||
switch (scanState)
|
||||
{
|
||||
case ScanState.Start_Reset:
|
||||
|
||||
SendMessage("*RST");
|
||||
SendMessage("*CLS");
|
||||
SendMessage(":conf:fres");
|
||||
scanState = ScanState.Reset_SwitchCh;
|
||||
return;
|
||||
|
||||
case ScanState.Reset_SwitchCh:
|
||||
case ScanState.Read_SwitchCh:
|
||||
|
||||
if (nextChannelIx >= 0 && nextChannelIx < listOfChannels.Count)
|
||||
{
|
||||
/// Update 'curentChannel'
|
||||
currentChannel = listOfChannels[nextChannelIx];
|
||||
|
||||
/// Switch to the 'curentChannel'
|
||||
SendMessage(string.Format(":rout:clos (@{0})", currentChannel));
|
||||
|
||||
/// Increase 'nextChannelIx'
|
||||
nextChannelIx++;
|
||||
if (nextChannelIx >= listOfChannels.Count) nextChannelIx = 0;
|
||||
}
|
||||
scanState = ScanState.SwitchCh_Read;
|
||||
return;
|
||||
|
||||
case ScanState.SwitchCh_Read:
|
||||
|
||||
SendMessage(":read?");
|
||||
scanState = ScanState.Read_SwitchCh;
|
||||
return;
|
||||
|
||||
default: /// Scanning is off
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>Stop this device</summary>
|
||||
public void StopDevice()
|
||||
{
|
||||
serialPort.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
+8
-8
@@ -7,7 +7,7 @@ using System.IO.Ports;
|
||||
using System.Xml.Serialization;
|
||||
using TBF.BenchControl.Generic;
|
||||
|
||||
namespace TBF.BenchControl.Keithley.RS232
|
||||
namespace TBF.BenchControl.Keithley.Multimeter_2010_RS232
|
||||
{
|
||||
public class MultimeterCfg : ComponentCfgBase, Generic.IComponentCfg
|
||||
{
|
||||
@@ -26,7 +26,13 @@ namespace TBF.BenchControl.Keithley.RS232
|
||||
/// Private parameterless constructor invoked by all other (public) constructors
|
||||
MultimeterCfg()
|
||||
{
|
||||
Name = "Keithley";
|
||||
}
|
||||
|
||||
public MultimeterCfg(string name, IComponentFactory factory)
|
||||
: this()
|
||||
{
|
||||
this.Name = name;
|
||||
this.Factory = factory;
|
||||
ParentName = string.Empty;
|
||||
ComPortNr = 5;
|
||||
BaudRate = 9600;
|
||||
@@ -36,12 +42,6 @@ namespace TBF.BenchControl.Keithley.RS232
|
||||
Handshake = System.IO.Ports.Handshake.None;
|
||||
}
|
||||
|
||||
public MultimeterCfg(IComponentFactory factory)
|
||||
: this()
|
||||
{
|
||||
this.Factory = factory;
|
||||
}
|
||||
|
||||
public string ToString(int i)
|
||||
{
|
||||
return string.Format("Name={0}, Com{1}, {2}Bd, {3}-bits, parity={4}, stopBits={5}, {6}",
|
||||
+1
-1
@@ -8,7 +8,7 @@ using log4net;
|
||||
using TBF.BenchControl.Generic;
|
||||
using TBF.Resources;
|
||||
|
||||
namespace TBF.BenchControl.Keithley.RS232
|
||||
namespace TBF.BenchControl.Keithley.Multimeter_2010_RS232
|
||||
{
|
||||
public partial class MultimeterCfgCtrl : UserControl, IComponentCfgCtrl
|
||||
{
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
///
|
||||
/// Copyright (c) 2016 Sensus Metering Systems
|
||||
///
|
||||
namespace TBF.BenchControl.Keithley.RS232
|
||||
namespace TBF.BenchControl.Keithley.Multimeter_2010_RS232
|
||||
{
|
||||
partial class MultimeterCfgCtrl
|
||||
{
|
||||
@@ -1,134 +0,0 @@
|
||||
///
|
||||
/// Copyright (c) 2016 Sensus Metering Systems
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO.Ports;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using log4net;
|
||||
using Config.Entities;
|
||||
using TBF.BenchControl.Generic;
|
||||
using TBF.Boxes;
|
||||
|
||||
namespace TBF.BenchControl.Keithley.RS232
|
||||
{
|
||||
/// <summary>
|
||||
/// Root component for Modbus communication via serial port (RS485)
|
||||
/// </summary>
|
||||
public class Multimeter : ComponentBase, IDevice, GenericDevices.IModbus
|
||||
{
|
||||
private static readonly ILog log = LogManager.GetLogger(typeof(Multimeter));
|
||||
public override string ToString() { return string.Format("Keithley.RS232.Multimeter({0})", Cfg.ToString(1)); }
|
||||
|
||||
private readonly MultimeterCfg modbusCommonCfg;
|
||||
|
||||
/// Private fields
|
||||
SerialPort serialPort;
|
||||
Thread workerThread;
|
||||
bool stopWorkerThread;
|
||||
|
||||
public Multimeter()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ambient temperature / humidity / pressure meter 'Greco' connected via serial interface (RS232)
|
||||
/// Connection settings: 19200 Bd 8-bits No-parity 1-stop-bit Flow control: none or hardware.
|
||||
/// </summary>
|
||||
public Multimeter(Generic.IComponentCfg cfg)
|
||||
: base(cfg)
|
||||
{
|
||||
modbusCommonCfg = cfg as MultimeterCfg;
|
||||
serialPort = null;
|
||||
log.Debug(this.ToString());
|
||||
}
|
||||
|
||||
~Multimeter()
|
||||
{
|
||||
}
|
||||
|
||||
public float ReadTemperature(int channelNr)
|
||||
{
|
||||
return 25.0f;
|
||||
}
|
||||
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
if (modbusCommonCfg.DebugLevel == DebugMode.Simulate)
|
||||
{
|
||||
log.FatalFormat("Simulated device {0}", ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
string comPortName = "COM" + modbusCommonCfg.ComPortNr.ToString();
|
||||
serialPort = new SerialPort(comPortName, modbusCommonCfg.BaudRate, modbusCommonCfg.Parity, modbusCommonCfg.DataBits, modbusCommonCfg.StopBits);
|
||||
serialPort.Handshake = modbusCommonCfg.Handshake;
|
||||
serialPort.Open();
|
||||
|
||||
stopWorkerThread = false;
|
||||
workerThread = new Thread(Worker);
|
||||
workerThread.Start();
|
||||
|
||||
log.FatalFormat("Successfully initialized device {0}", ToString());
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Send a modbus message.
|
||||
/// This function calculates and overwrites the last 2 bytes
|
||||
/// of the message - CRC as specified in Modbus specification.
|
||||
/// </summary>
|
||||
/// <param name="message">Message incl CRC, CRC bytes dont have to be set</param>
|
||||
public void SendMessage(byte[] message)
|
||||
{
|
||||
if (modbusCommonCfg.DebugLevel == DebugMode.Simulate) return;
|
||||
|
||||
Telegram.UpdateTelegramCRC(message);
|
||||
log.Debug(Telegram.LogTelegram("Sending message ", message));
|
||||
serialPort.Write(message, 0, message.Length);
|
||||
}
|
||||
|
||||
void Worker()
|
||||
{
|
||||
while (!stopWorkerThread)
|
||||
{
|
||||
Thread.Sleep(250);
|
||||
if (stopWorkerThread) break;
|
||||
int nrBytes = serialPort.BytesToRead;
|
||||
if (nrBytes > 0)
|
||||
{
|
||||
char[] buffer = new char[nrBytes];
|
||||
serialPort.Read(buffer, 0, nrBytes);
|
||||
string s = Telegram.LogTelegram("Received: ", new string(buffer));
|
||||
/// ODO: Add handler
|
||||
//OnQuidoReceived(this, new QuidoReceivedEventArgs(s));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>Run this device</summary>
|
||||
public void RunDeviceBefore()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>Run this device</summary>
|
||||
public void RunDeviceAfter()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>Stop this device</summary>
|
||||
public void StopDevice()
|
||||
{
|
||||
if (serialPort != null)
|
||||
{
|
||||
stopWorkerThread = true;
|
||||
workerThread.Join(2000);
|
||||
serialPort.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
{
|
||||
public class Factory : IComponentFactory
|
||||
{
|
||||
public string ClassName { get { return this.GetType().Namespace.Substring(17); } }
|
||||
public string ClassName { get { return GetType().Namespace.Substring(17); } }
|
||||
|
||||
public void ResetStaticProperties() { TempMeter.ResetStaticProperties(); }
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
|
||||
public IComponent GetComponent(IComponentCfg cfg, IList<IComponent> components) { return new TempMeter(cfg, components); }
|
||||
|
||||
public IComponentCfg DefaultConfig() { return new TempMeterCfg(this); }
|
||||
public IComponentCfg DefaultConfig() { return new TempMeterCfg(GetType().Namespace.Substring(17), this); }
|
||||
|
||||
public IComponentCfg CmpntCfgFromCmpntEntity(Config.Entities.Component component)
|
||||
{
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
using System;
|
||||
using log4net;
|
||||
using TBF.Boxes;
|
||||
using TBF.BenchControl.Keithley.RS232;
|
||||
using TBF.BenchControl.Keithley.Multimeter_2010_RS232;
|
||||
|
||||
namespace TBF.BenchControl.Keithley.TempMeter
|
||||
{
|
||||
@@ -40,7 +40,8 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
/// <summary>Start this operation</summary>
|
||||
public void Start()
|
||||
{
|
||||
temp.Val = tempMeter.ReadTemperature();
|
||||
tempMeter.Multimeter.StartReadingMultimeter(tempMeter.Channel);
|
||||
temp.Val = 0;
|
||||
}
|
||||
|
||||
/// <summary>Run this operation</summary>
|
||||
@@ -56,6 +57,7 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
/// <summary>Stop this operation</summary>
|
||||
public void Stop()
|
||||
{
|
||||
tempMeter.Multimeter.StopReadingMultimeter(tempMeter.Channel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using log4net;
|
||||
using TBF.Boxes;
|
||||
using TBF.BenchControl.Keithley.RS232;
|
||||
using TBF.BenchControl.Keithley.Multimeter_2010_RS232;
|
||||
|
||||
namespace TBF.BenchControl.Keithley.TempMeter
|
||||
{
|
||||
@@ -18,7 +18,11 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
|
||||
public readonly Multimeter Multimeter; /// parent component
|
||||
|
||||
public int Idx0 { get { return tempMtrCfg.Idx0; } } /// 0..3
|
||||
public int Channel { get { return tempMtrCfg.Channel; } } /// 1..5
|
||||
|
||||
Dictionary<FloatBox, IOperation> operations;
|
||||
Dictionary<FloatBox, IOperation> operations2;
|
||||
|
||||
|
||||
public TempMeter()
|
||||
{
|
||||
@@ -32,12 +36,22 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
Multimeter = (Multimeter)TbfComponents.FindComponent(cfg.ParentName, components);
|
||||
if (Multimeter == null) throw new Exception("Cannot find " + Name + " parent");
|
||||
|
||||
operations = new Dictionary<FloatBox, IOperation>();
|
||||
operations2 = new Dictionary<FloatBox, IOperation>();
|
||||
|
||||
log.Debug(this.ToString());
|
||||
}
|
||||
|
||||
public float ReadTemperature()
|
||||
{
|
||||
return Multimeter.ReadTemperature(Idx0);
|
||||
double resistance = Multimeter.ReadResistance(Channel);
|
||||
|
||||
return Resistance2Temperature(resistance);
|
||||
}
|
||||
|
||||
private float Resistance2Temperature(double resistance)
|
||||
{
|
||||
return 30.0F + (float)tempMtrCfg.Channel; /// TODO: implement
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -47,7 +61,17 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
/// <returns>ReadTempOp instance reference casted to IOperaton</returns>
|
||||
public IOperation ReadTempOp(ref FloatBox temp)
|
||||
{
|
||||
return new ReadTempOp(this, ref temp);
|
||||
IOperation operation;
|
||||
if (operations.TryGetValue(temp, out operation))
|
||||
{
|
||||
return operation;
|
||||
}
|
||||
else
|
||||
{
|
||||
operation = new ReadTempOp(this, ref temp);
|
||||
operations.Add(temp, operation);
|
||||
return operation;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -58,7 +82,17 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
/// <returns>ReadTempOp instance reference casted to IOperaton</returns>
|
||||
public IOperation ReadTempOp(ref FloatBox temp, Event tempDone)
|
||||
{
|
||||
return new ReadTempOp(this, ref temp, tempDone);
|
||||
IOperation operation;
|
||||
if (operations2.TryGetValue(temp, out operation))
|
||||
{
|
||||
return operation;
|
||||
}
|
||||
else
|
||||
{
|
||||
operation = new ReadTempOp(this, ref temp, tempDone);
|
||||
operations2.Add(temp, operation);
|
||||
return operation;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,28 +16,28 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
///
|
||||
/// Serialized parameters
|
||||
///
|
||||
public int Idx0; /// 0..3
|
||||
public int Channel; /// 1..5
|
||||
|
||||
/// Private parameterless constructor invoked by all other (public) constructors
|
||||
TempMeterCfg()
|
||||
{
|
||||
Name = "T";
|
||||
ParentName = "Keithley";
|
||||
Idx0 = 0;
|
||||
}
|
||||
|
||||
public TempMeterCfg(IComponentFactory factory)
|
||||
public TempMeterCfg(string name, IComponentFactory factory)
|
||||
: this()
|
||||
{
|
||||
this.Name = name;
|
||||
this.Factory = factory;
|
||||
ParentName = "Keithley.Multimeter_2010_RS232";
|
||||
Channel = 1;
|
||||
}
|
||||
|
||||
public string ToString(int i)
|
||||
{
|
||||
return string.Format("Name={0}, Parent={1}, Idx0={2}",
|
||||
return string.Format("Name={0}, Parent={1}, Channel={2}",
|
||||
Name,
|
||||
(string.IsNullOrEmpty(ParentName) ? "-" : ParentName),
|
||||
Idx0);
|
||||
Channel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+19
-19
@@ -31,8 +31,8 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.positionTextBox = new System.Windows.Forms.TextBox();
|
||||
this.positionLabel = new System.Windows.Forms.Label();
|
||||
this.channelTextBox = new System.Windows.Forms.TextBox();
|
||||
this.channelLabel = new System.Windows.Forms.Label();
|
||||
this.parentNameLabel = new System.Windows.Forms.Label();
|
||||
this.nameTextBox = new System.Windows.Forms.TextBox();
|
||||
this.nameLabel = new System.Windows.Forms.Label();
|
||||
@@ -40,22 +40,22 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
this.parentNameComboBox = new System.Windows.Forms.ComboBox();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// positionTextBox
|
||||
// channelTextBox
|
||||
//
|
||||
this.positionTextBox.Enabled = false;
|
||||
this.positionTextBox.Location = new System.Drawing.Point(130, 82);
|
||||
this.positionTextBox.Name = "positionTextBox";
|
||||
this.positionTextBox.Size = new System.Drawing.Size(46, 20);
|
||||
this.positionTextBox.TabIndex = 6;
|
||||
this.channelTextBox.Enabled = false;
|
||||
this.channelTextBox.Location = new System.Drawing.Point(130, 82);
|
||||
this.channelTextBox.Name = "channelTextBox";
|
||||
this.channelTextBox.Size = new System.Drawing.Size(46, 20);
|
||||
this.channelTextBox.TabIndex = 6;
|
||||
//
|
||||
// positionLabel
|
||||
// channelLabel
|
||||
//
|
||||
this.positionLabel.AutoSize = true;
|
||||
this.positionLabel.Location = new System.Drawing.Point(20, 85);
|
||||
this.positionLabel.Name = "positionLabel";
|
||||
this.positionLabel.Size = new System.Drawing.Size(44, 13);
|
||||
this.positionLabel.TabIndex = 5;
|
||||
this.positionLabel.Text = "Position";
|
||||
this.channelLabel.AutoSize = true;
|
||||
this.channelLabel.Location = new System.Drawing.Point(20, 85);
|
||||
this.channelLabel.Name = "channelLabel";
|
||||
this.channelLabel.Size = new System.Drawing.Size(73, 13);
|
||||
this.channelLabel.TabIndex = 5;
|
||||
this.channelLabel.Text = "Channel (1..5)";
|
||||
//
|
||||
// parentNameLabel
|
||||
//
|
||||
@@ -106,8 +106,8 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.parentNameComboBox);
|
||||
this.Controls.Add(this.positionTextBox);
|
||||
this.Controls.Add(this.positionLabel);
|
||||
this.Controls.Add(this.channelTextBox);
|
||||
this.Controls.Add(this.channelLabel);
|
||||
this.Controls.Add(this.parentNameLabel);
|
||||
this.Controls.Add(this.nameTextBox);
|
||||
this.Controls.Add(this.nameLabel);
|
||||
@@ -122,8 +122,8 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox positionTextBox;
|
||||
private System.Windows.Forms.Label positionLabel;
|
||||
private System.Windows.Forms.TextBox channelTextBox;
|
||||
private System.Windows.Forms.Label channelLabel;
|
||||
private System.Windows.Forms.Label parentNameLabel;
|
||||
private System.Windows.Forms.TextBox nameTextBox;
|
||||
private System.Windows.Forms.Label nameLabel;
|
||||
|
||||
@@ -5,7 +5,9 @@ using System;
|
||||
using System.Globalization;
|
||||
using System.Windows.Forms;
|
||||
using log4net;
|
||||
using TBF.BenchControl;
|
||||
using TBF.BenchControl.Generic;
|
||||
using TBF.Resources;
|
||||
|
||||
namespace TBF.BenchControl.Keithley.TempMeter
|
||||
{
|
||||
@@ -35,6 +37,8 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
|
||||
private void TempMeterCfgCtrl_Load(object sender, EventArgs e)
|
||||
{
|
||||
Localize();
|
||||
|
||||
parent = ParentForm as ComponentParametersDlg;
|
||||
if (parent == null) return;
|
||||
|
||||
@@ -42,7 +46,7 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
{
|
||||
foreach (var cmpnt in parent.TbfComponents)
|
||||
{
|
||||
if (TbfComponents.CmpntFactoryFromClassName(cmpnt.ClassName) is Keithley.RS232.Factory)
|
||||
if (TbfComponents.CmpntFactoryFromClassName(cmpnt.ClassName) is Keithley.Multimeter_2010_RS232.Factory)
|
||||
{
|
||||
parentNameComboBox.Items.Add(cmpnt.Name);
|
||||
}
|
||||
@@ -52,6 +56,13 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
Redraw();
|
||||
}
|
||||
|
||||
void Localize()
|
||||
{
|
||||
nameLabel.Text = Strings.Name;
|
||||
parentNameLabel.Text = Strings.Parent_name;
|
||||
channelLabel.Text = string.Format("{0} (1..5)", Strings.Channel);
|
||||
}
|
||||
|
||||
public void Closing()
|
||||
{
|
||||
}
|
||||
@@ -63,14 +74,14 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
classNameLabel.Text = config.Factory.ClassName;
|
||||
nameTextBox.Text = config.Name;
|
||||
parentNameComboBox.Text = string.IsNullOrEmpty(config.ParentName) ? "---" : config.ParentName;
|
||||
positionTextBox.Text = config.Idx0.ToString();
|
||||
channelTextBox.Text = config.Channel.ToString();
|
||||
}
|
||||
|
||||
public void Unlock()
|
||||
{
|
||||
nameTextBox.Enabled = true;
|
||||
parentNameComboBox.Enabled = true;
|
||||
positionTextBox.Enabled = true;
|
||||
channelTextBox.Enabled = true;
|
||||
}
|
||||
|
||||
public CfgUpdateFlags VerifyCfg(ref string message)
|
||||
@@ -81,12 +92,12 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
if (!parentNameComboBox.Items.Contains(parentNameComboBox.Text))
|
||||
{
|
||||
flags |= CfgUpdateFlags.Error;
|
||||
message += Environment.NewLine + "Invalid 'Parent Name'";
|
||||
message += Environment.NewLine + string.Format(Strings.Invalid_0, Strings.Parent_name);
|
||||
}
|
||||
if (!int.TryParse(positionTextBox.Text, out dummy) || dummy < 0 || dummy > 7)
|
||||
if (!int.TryParse(channelTextBox.Text, out dummy) || dummy < 1 || dummy > 5)
|
||||
{
|
||||
flags |= CfgUpdateFlags.Error;
|
||||
message += Environment.NewLine + "'Position' should be between 0 and 7";
|
||||
message += Environment.NewLine + "'Channel' should be in the range 1 .. 5";
|
||||
}
|
||||
|
||||
return flags;
|
||||
@@ -100,7 +111,7 @@ namespace TBF.BenchControl.Keithley.TempMeter
|
||||
|
||||
config.Name = nameTextBox.Text;
|
||||
config.ParentName = parentNameComboBox.Text.Equals("---") ? string.Empty : parentNameComboBox.Text;
|
||||
config.Idx0 = int.Parse(positionTextBox.Text);
|
||||
config.Channel = int.Parse(channelTextBox.Text);
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace TBF.BenchControl
|
||||
Factories.Add(new Cameras.IdcCamera.IdcCameraFactory());
|
||||
Factories.Add(new WaterMeters.iPerl.WaterMeterFactory()); /// iPerl
|
||||
Factories.Add(new TestMethods.iPerlCommunication.TestMethodFactory()); /// iPerlCommunication
|
||||
Factories.Add(new Keithley.RS232.Factory()); /// Keithley.RS232.Multimeter
|
||||
Factories.Add(new Keithley.Multimeter_2010_RS232.Factory()); /// Keithley.Multimeter_2010_RS232
|
||||
Factories.Add(new Keithley.TempMeter.Factory()); /// Keithley.TempMeter
|
||||
Factories.Add(new ResultsPrinters.LabelPrinter.PrinterFactory()); /// LabelPrinter
|
||||
Factories.Add(new TestMethods.LeakTest.TestMethodFactory());
|
||||
|
||||
+18
@@ -519,6 +519,15 @@ namespace TBF.Resources {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Channel.
|
||||
/// </summary>
|
||||
internal static string Channel {
|
||||
get {
|
||||
return ResourceManager.GetString("Channel", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Checking tank capacity.
|
||||
/// </summary>
|
||||
@@ -2265,6 +2274,15 @@ namespace TBF.Resources {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Parent name.
|
||||
/// </summary>
|
||||
internal static string Parent_name {
|
||||
get {
|
||||
return ResourceManager.GetString("Parent_name", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Part.
|
||||
/// </summary>
|
||||
|
||||
@@ -1552,4 +1552,10 @@
|
||||
<data name="Prompt" xml:space="preserve">
|
||||
<value>Prompt</value>
|
||||
</data>
|
||||
<data name="Channel" xml:space="preserve">
|
||||
<value>Channel</value>
|
||||
</data>
|
||||
<data name="Parent_name" xml:space="preserve">
|
||||
<value>Parent name</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -377,13 +377,13 @@
|
||||
<Compile Include="BenchControl\GenericDevices\IBenchInfo.cs" />
|
||||
<Compile Include="BenchControl\GenericDevices\ISimultTestMethod.cs" />
|
||||
<Compile Include="BenchControl\HeatMetersPath.cs" />
|
||||
<Compile Include="BenchControl\Keithley\RS232\Factory.cs" />
|
||||
<Compile Include="BenchControl\Keithley\RS232\Multimeter.cs" />
|
||||
<Compile Include="BenchControl\Keithley\RS232\MultimeterCfg.cs" />
|
||||
<Compile Include="BenchControl\Keithley\RS232\MultimeterCfgCtrl.cs">
|
||||
<Compile Include="BenchControl\Keithley\Multimeter_2010_RS232\Factory.cs" />
|
||||
<Compile Include="BenchControl\Keithley\Multimeter_2010_RS232\Multimeter.cs" />
|
||||
<Compile Include="BenchControl\Keithley\Multimeter_2010_RS232\MultimeterCfg.cs" />
|
||||
<Compile Include="BenchControl\Keithley\Multimeter_2010_RS232\MultimeterCfgCtrl.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="BenchControl\Keithley\RS232\MultimeterCfgCtrl.designer.cs">
|
||||
<Compile Include="BenchControl\Keithley\Multimeter_2010_RS232\MultimeterCfgCtrl.designer.cs">
|
||||
<DependentUpon>MultimeterCfgCtrl.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="BenchControl\Keithley\TempMeter\ReadTempOp.cs" />
|
||||
@@ -1682,7 +1682,7 @@
|
||||
<EmbeddedResource Include="BenchControl\Elde\Valve\ValveCfgCtrl.resx">
|
||||
<DependentUpon>ValveCfgCtrl.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="BenchControl\Keithley\RS232\MultimeterCfgCtrl.resx">
|
||||
<EmbeddedResource Include="BenchControl\Keithley\Multimeter_2010_RS232\MultimeterCfgCtrl.resx">
|
||||
<DependentUpon>MultimeterCfgCtrl.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="BenchControl\Keithley\TempMeter\TempMeterCfgCtrl.resx">
|
||||
|
||||
Reference in New Issue
Block a user