162 lines
4.8 KiB
C#
162 lines
4.8 KiB
C#
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();
|
||
}
|
||
}
|
||
}
|