|
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading.Tasks;
- using System.Timers;
-
- namespace ProductionControl.Device
- {
- public class HeightDev:IDisposable
- {
- //public double HeightValue { private set; get; }
-
- public Action<WarningEnum, string> WarningEvent;
- /// <summary>
- /// 值<值>
- /// </summary>
- public Action<double> HeightEvent;
- /// <summary>
- /// 是否打开设备成功
- /// </summary>
- public bool IsInit { get; private set; } = false;
- private System.Timers.Timer timer = new System.Timers.Timer();
- private Socket socketObj;
- private double decimalNum=-1;
-
- private bool _isDebug = false;
- public HeightDev(bool isDebug)
- {
- _isDebug = isDebug;
- }
- public HeightDev()
- {
- }
- public bool start(string net_ip, int net_port)
- {
- try
- {
- // 1、创建socket对象
- socketObj = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- // 2、字符串ip转网络ip, 端口号转int
- IPAddress ip = IPAddress.Parse(net_ip);
- int port = Convert.ToInt32(net_port);
- // 3、连接服务器
- socketObj.Connect(ip, port);
-
- IsInit = true;
- if (_isDebug)
- {
- timer.Elapsed += Timer_Elapsed;
- timer.Interval = 500;
- timer.Start();
- }
- return true;
- }
- catch (Exception ex)
- {
- WarningEvent?.Invoke(WarningEnum.High,ex.Message);
- return false;
- }
- }
- public void stop()
- {
- if (!IsInit) return;
-
- //关闭客户端
- try
- {
- IsInit = false;
- if (_isDebug)
- {
- timer.Elapsed -= Timer_Elapsed;
- timer.Stop();
- }
- socketObj.Close();
- }
- catch { }
- }
- private void Timer_Elapsed(object sender, ElapsedEventArgs e)
- {
- if (!IsInit) return;
-
- timer.Stop();
- getHeight();
- timer.Start();
- }
- public double getHeight()
- {
- try
- {
- if (!IsInit) return -1;
- if (decimalNum == -1)
- {
- decimalNum = getDecimal();
- if (decimalNum < 0)
- throw new Exception("HeightDev start Err!");
- }
- // 发送消息
- socketObj.Send(Encoding.Default.GetBytes("SR,01,037\r\n"));
-
- // 接收消息
- byte[] buffer = new byte[1024];
- socketObj.Receive(buffer);
- string res = System.Text.Encoding.Default.GetString(buffer);
- if (res.IndexOf("SR,01,037,") != 0)
- return -1;
- res = res.Replace("SR,01,037,", "");
- double val;
- if (decimalNum < 1)
- val = Convert.ToDouble(res);
- else
- val = Convert.ToDouble(res) / decimalNum;
-
- val = Math.Abs(val) * 1000;
- HeightEvent?.Invoke(val);
- return val;
- }
- catch(Exception ex)
- {
- WarningEvent?.Invoke(WarningEnum.Low, ex.Message);
- return -1;
- }
- }
- private double getDecimal()
- {
- if (!IsInit) return -1;
-
- // 发送消息
- socketObj.Send(Encoding.Default.GetBytes("FR,01,037\r\n"));
-
- // 接收消息
- byte[] buffer = new byte[1024];
- socketObj.Receive(buffer);
- string res = System.Text.Encoding.Default.GetString(buffer).Split(new string[] { "\r\n" }, StringSplitOptions.None)[0];
- if (res.IndexOf("FR,01,037,") != 0)
- return -1;
- res= res.Replace("FR,01,037,","");
- return Math.Pow(10,Convert.ToInt32(res));
- }
- public bool reset()
- {
- if (!IsInit) return false;
-
- // 发送消息
- socketObj.Send(Encoding.Default.GetBytes("SW,01,001,+000000001\r\n"));
-
- // 接收消息
- byte[] buffer = new byte[1024];
- socketObj.Receive(buffer);
- string res = System.Text.Encoding.Default.GetString(buffer).Split(new string[] { "\r\n" }, StringSplitOptions.None)[0];
- return res == "SW,01,001";
- }
-
- public void Dispose()
- {
- stop();
- }
- }
- }
|