banboshi_V1/halftoneproject-master/Code/Device/HeightDev.cs
2023-10-31 13:19:29 +08:00

162 lines
4.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}
}