You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

440 lines
11 KiB
C#

1 year ago
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Timers;
namespace Mesnac.Basic
{
[Serializable]
public class Variable
{
#region 定义委托
public delegate void RefreshControlValue(Variable sender);
public event RefreshControlValue Refresh;
#endregion
#region value define
private string mName;
private string mAddr;
private string mDescription;
private object mValue;
private object mOldValue;
private string mDevice;
private TypeCode mValuetype;
private float mStep;
private string mVarway;
private string mDateStamp;
private float mMinvalue;
private float mMaxvalue;
private uint mTime;
private uint counter;
private bool bUse;
private string _sExpress1;
private string _sExpress2;
private string _sType;
private bool _isRun = false; //是否运行
[NonSerialized]
private System.Timers.Timer mTimer;
#endregion
public string sExpress1
{
get
{
return _sExpress1;
}
set
{
_sExpress1 = value;
}
}
public string sExpress2
{
get
{
return _sExpress2;
}
set
{
_sExpress2 = value;
}
}
public string sType
{
get
{
return _sType;
}
set
{
_sType = value;
}
}
private string _sVbs;
public string sVbs
{
get
{
return _sVbs;
}
set
{
_sVbs = value;
}
}
public Variable()
{
Name = "";
Addr = "";
Description = "";
Device = "";
Varway = "";
Value = 0;
OldValue = 0;
Valuetype = TypeCode.Empty;
nCounter = 0;
MTime = 0;
_sExpress1 = "";
_sExpress2 = "";
_sType = "";
mbUse = false;
_sVbs = "";
}
public bool mbUse
{
get
{
return bUse;
}
set
{
bUse = value;
}
}
public void Stop()
{
try
{
this.mTimer.Stop();
this._isRun = false;
this.mTimer.Elapsed -= new ElapsedEventHandler(mTimer_Elapsed);
}
catch
{
}
}
public void Start(uint ntime)
{
if (this._isRun)
{
this.Stop();
}
this.mTimer = new System.Timers.Timer();
if (ntime < 10)
ntime = 10;
this.mTimer.Interval = ntime;
this.mTimer.Elapsed += new ElapsedEventHandler(mTimer_Elapsed);
this.mTimer.Start();
this._isRun = true;
}
//public event EventHandler<EventArgs> OnVirDataChanged;
void mTimer_Elapsed(object sender, ElapsedEventArgs e)
{
GenerateVarValue();
}
public void GenerateVarValue()
{
//Monitor.Enter(this);
try
{
DateTime dt = new DateTime();
dt = DateTime.Now;
DateStamp = dt.ToString();
switch (Varway)
{
case "循环变化":
if (!mbUse)
{
Value = Minvalue;
mbUse = true;
}
else
{
Value = Convert.ToSingle(Value) + Step;
if (Convert.ToSingle(Value) >= Maxvalue)
{
Value = Maxvalue;
mbUse = false;
}
}
break;
case "正向一周":
Valuetype = TypeCode.Single;
if (!mbUse)
{
Value = Minvalue;
mbUse = true;
}
else
{
Value = Convert.ToSingle(Value) + Step;
if (Convert.ToSingle(Value) >= Maxvalue)
{
Value = Maxvalue;
//mbUse = false;
}
}
break;
case "BOOL变化":
if (!mbUse)
{
Value = 0;
mbUse = true;
}
else
{
Value = 1;
mbUse = false;
}
break;
case "X^2变化":
Valuetype = TypeCode.Single;
if (!mbUse)
{
mOldValue = Minvalue;
mbUse = true;
}
else
{
mOldValue = Convert.ToSingle(mOldValue) + Step;
Value = Convert.ToSingle(mOldValue) * Convert.ToSingle(mOldValue);
if (Convert.ToSingle(mOldValue) >= Maxvalue)
{
mOldValue = Maxvalue;
mbUse = false;
}
}
break;
case "SIN变化":
Valuetype = TypeCode.Single;
if (!mbUse)
{
mOldValue = Minvalue;
mbUse = true;
}
else
{
mOldValue = Convert.ToSingle(mOldValue) + Step;
Value = Math.Sin(Convert.ToSingle(mOldValue));
if (Convert.ToSingle(mOldValue) >= Maxvalue)
{
mOldValue = Maxvalue;
mbUse = false;
}
}
break;
case "随机变化":
Random d = new Random();
Value = d.Next(Convert.ToInt32(Maxvalue));
Valuetype = TypeCode.UInt32;
break;
case "中间变量":
Valuetype = TypeCode.Single;
break;
}
//激活时间
if (Refresh != null)
{
Refresh(this);
}
}
finally
{
//Monitor.Exit(this);
}
}
public uint nCounter
{
get
{
return counter;
}
set
{
counter = value;
}
}
public uint MTime
{
get
{
return mTime;
}
set
{
mTime = value;
}
}
public string Name
{
get
{
return this.mName;
}
set
{
this.mName = value;
}
}
public string Addr
{
get
{
return this.mAddr;
}
set
{
this.mAddr = value;
}
}
public string Description
{
get
{
return this.mDescription;
}
set
{
this.mDescription = value;
}
}
public object Value
{
get
{
return this.mValue;
}
set
{
this.mValue = value;
}
}
public object OldValue
{
get
{
return this.mOldValue;
}
set
{
this.mOldValue = value;
}
}
public string Device
{
get
{
return this.mDevice;
}
set
{
this.mDevice = value;
}
}
public TypeCode Valuetype
{
get
{
return this.mValuetype;
}
set
{
this.mValuetype = value;
}
}
public float Step
{
get
{
return this.mStep;
}
set
{
this.mStep = value;
}
}
public string Varway
{
get
{
return this.mVarway;
}
set
{
this.mVarway = value;
}
}
public string DateStamp
{
get
{
return this.mDateStamp;
}
set
{
this.mDateStamp = value;
}
}
public float Minvalue
{
get
{
return this.mMinvalue;
}
set
{
this.mMinvalue = value;
}
}
public float Maxvalue
{
get
{
return this.mMaxvalue;
}
set
{
this.mMaxvalue = value;
}
}
/// <summary>
/// 虚拟设备是否处于运行状态
/// </summary>
public bool IsRun
{
get { return this._isRun; }
}
}
}