using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace BeltScaleSystem { public delegate void MeasChangedEventHandler(object sender, MeasEventArgs e);// public delegate void CalibrateChangedEventHandler(object sender, CalibrateEventArgs e); /// /// 皮带仪表类型 /// public enum StrapMeasType { SA600 = 0, ICS300 = 1, XR6000 = 2, } /// /// 仪表数据接收事件数据 /// public class MeasEventArgs : EventArgs { private MeasData _value; public MeasData Value { get { return _value; } set { this._value = value; } } public MeasEventArgs() { _value = new MeasData(); } public MeasEventArgs(MeasData value) { this._value = value; } } public class CalibrateEventArgs : EventArgs { private CalibrateData _value; public CalibrateData Value { get { return _value; } set { this._value = value; } } public CalibrateEventArgs() { _value = new CalibrateData(); } public CalibrateEventArgs(CalibrateData value) { this._value = value; } } public class CoreStrapMeas { public MeasChangedEventHandler onMeasChanged = null; public CalibrateChangedEventHandler CalibrateChanged = null; private SA600Meas _sa600 = null; private int[] _ics300DevNos = new int[] { 1 };//仪表编号,默认取第一个仪表重量 private int[] _xr6000DevNos = new int[] { 1 };//仪表编号,默认取第一个仪表重量 private Thread _measThread = null; private Thread _calibrateThread = null; public Boolean IsClose = false; private bool _isOpen = false; /// /// 仪表连接是否打开 /// public bool IsOpen { get { return _isOpen; } set { _isOpen = value; } } private bool _isReceiveMeasData = false; /// /// 设置或获取是否采集仪表数据 /// public bool IsReceiveMeasData { get { return _isReceiveMeasData; } set { _isReceiveMeasData = value; } } private StrapMeasType _measType = StrapMeasType.SA600; public CoreStrapMeas(StrapMeasType measType) { _measType = measType; } /// /// ICS300 多仪表或单仪表编号不为1时使用此函数 /// /// public bool Open(String addr, int[] devNums) { bool ret = Open(addr); _ics300DevNos = devNums; return ret; } /// /// 打开仪表连接 /// /// IPAddress|ComPortName,BaudRate,Parity,DataBits,StopBits /// public bool Open(String addr) { bool ret = true; try { switch (_measType) { case StrapMeasType.SA600: _sa600 = new SA600Meas(); _sa600.IP = addr; break; } _isReceiveMeasData = true;//开始接收仪表数据 if (ret) { _measThread = new Thread(new ThreadStart(FreshMeasData)); _measThread.Start(); } } catch (Exception ex) { ret = false; } _isOpen = ret; return ret; } public bool Close() { bool ret = true; if (_measThread != null) { _measThread.Abort(); } if (_calibrateThread != null) { _calibrateThread.Abort(); } switch (_measType) { case StrapMeasType.SA600: break; } IsClose = true; return ret; } private void FreshMeasData() { while (true) { //Thread.Sleep(500);//20210303liao Thread.Sleep(800);//20210303liao500改为800 if (_isReceiveMeasData) { MeasData measData = new MeasData(); measData.MeasType = _measType; switch (_measType) { case StrapMeasType.SA600: _sa600.ReadRing(); measData.Flow = _sa600.Flow; measData.FieldTemp = _sa600.FieldTemp; measData.Total = _sa600.Total; measData.BeltSpeed = _sa600.BeltSpeed; measData.CalibrateValue = _sa600.CalibrateValue; measData.MeterStatus = !_sa600.MeasStatus; measData.IsConnect = _sa600.IsConnect; _sa600.ReadRingbt();//20210301liao measData.StdValue = _sa600.StdValue;//20210301liao if (onMeasChanged != null) { onMeasChanged(this, new MeasEventArgs(measData)); } break; } } } } public CalibrateData[] FreshCalibrateData() { CalibrateData []cbDatas = null; CalibrateData cbData = null; switch (_measType) { case StrapMeasType.SA600: _sa600.ReadRing(); // _sa600.ReadRingbt();//20210301liaobtxx cbData = new CalibrateData(); cbData.MeasType = StrapMeasType.SA600; cbData.NewZero = _sa600.CalibrateValue; //校零数值 cbData.RemainSeconds = _sa600.ProgressTime; cbData.DevStatus = _sa600.CalibrateFlag; cbDatas = new CalibrateData[]{cbData}; break; } return cbDatas; } public void StartCalibrateZero() { _isReceiveMeasData = false; Thread.Sleep(2000); switch (_measType) { case StrapMeasType.SA600: _sa600.StartCalibrateZero(); break; } } public void ConfirmCalibrateValue() { switch (_measType) { case StrapMeasType.SA600: _sa600.SaveCalibrateValue(); break; } _isReceiveMeasData = true; } public void setMatParameter(byte[] byteArray) { switch (_measType) { case StrapMeasType.SA600: _sa600.SaveBaseValue(byteArray); break; } _isReceiveMeasData = true; } public void ConfirmCalibrateValue(int devNum) { switch (_measType) { case StrapMeasType.SA600: _sa600.SaveCalibrateValue(); break; } } public void CancelCalibrateZero() { switch (_measType) { case StrapMeasType.SA600: _sa600.StopCalibrateZero(); break; } _isReceiveMeasData = true; } public void ClearTotal() { _isReceiveMeasData = false; Thread.Sleep(2000); switch (_measType) { case StrapMeasType.SA600: _sa600.ClearTotal(); break; } _isReceiveMeasData = true; } } }