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.
Rs.DeweyTester/Rs.DeweyTester/Entitys/SimulateTesterManager.cs

241 lines
8.2 KiB
C#

using NPOI.SS.Formula.Functions;
using Rs.Framework;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Rs.MotionPlat.Entitys
{
public enum ETesterStatus
{
Idle,
Testing
}
/// <summary>
/// 模拟测试软件类
/// </summary>
public class SimulateTester
{
public bool Connected { get; set; } = false;
TcpClientHelper tcpClientHelper;
private Stopwatch testTimer;
bool _btest; //是否测试中
bool _bhome; //是否回原中
Stopwatch _start; //测试开始时间
string testResult; //测试结果
bool bRun = false;
public void Init()
{
_start = new Stopwatch();
testTimer = new Stopwatch();
tcpClientHelper = new TcpClientHelper();
tcpClientHelper.Connect("127.0.0.1", 6050);
tcpClientHelper.OnConnected += TcpClientHelper_OnConnected;
tcpClientHelper.OnDisconnected += TcpClientHelper_OnDisconnected;
tcpClientHelper.DataRecived += TcpClientHelper_DataRecived;
bRun = true;
Task.Run(() => {
while (bRun)
{
CheckTest();
Thread.Sleep(10);
}
});
}
List<byte> data = new List<byte>();
void CheckTest()
{
if (!_btest) return;
if(_start.ElapsedMilliseconds>GlobalVar.SimulateTestTime*1000)
{
_start.Stop();
_btest = false;
testResult = $"1$";
Random rnd = new Random();
int randomNumber = rnd.Next(0, 100);
int res = randomNumber < (100-GlobalVar.SimulateTestYield) ? 0 : 1;
testResult = $"Result#0#{res}#CsvInfo#FailItems#TestItems#BinInfo$";
}
}
private void TcpClientHelper_DataRecived(System.Net.Sockets.Socket arg1, byte[] arg2)
{
//在这里处理服务端发过来的数据
Task.Run(() => {
lock(this)
{
for (int i = 0; i < arg2.Length; i++)
{
if (arg2[i] != 36)
{
data.Add(arg2[i]);
}
else
{
MessageParse();
data.Clear();
}
}
}
//string content = Encoding.ASCII.GetString(arg2);
//if(content=="Status$")
//{
// if (Status == ETesterStatus.Idle)
// {
// tcpClientHelper.Send("Status#1$");
// }
// else
// {
// tcpClientHelper.Send("Status#0$");
// }
//}
//else if(content.IndexOf("StartTest")>=0)
//{
// Status = ETesterStatus.Testing;
// tcpClientHelper.Send("StartTest#1$");
// Task.Run(() => {
// Stopwatch stopwatch = new Stopwatch();
// stopwatch.Start();
// while (true)
// {
// if(stopwatch.ElapsedMilliseconds>= 45*1000)
// {
// stopwatch.Stop();
// Status = ETesterStatus.Idle;
// break;
// }
// }
// });
//}
});
}
private void MessageParse()
{
if (data != null && data.Count > 0)
{
string msg = string.Empty;
string[] items = Encoding.ASCII.GetString(data.ToArray()).Split('#');
string command = items[0];
string loginfo = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} >>> {string.Join("", items)} \r\n";
File.AppendAllText($"d:\\2\\{MachineCode}.txt",loginfo);
switch (command)
{
case "Register"://注册
return;
case "Status":
int val = IsRun() ? 0 : 1;
msg = $"Status#{val}$";
tcpClientHelper.Send(msg);
loginfo = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} <<< {msg} \r\n";
File.AppendAllText($"d:\\2\\{MachineCode}.txt", loginfo);
break;
case "StartTest":
if (IsRun())
{
msg = $"StartTest#0$";
tcpClientHelper.Send(msg);
loginfo = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} <<< {msg} \r\n";
File.AppendAllText($"d:\\2\\{MachineCode}.txt", loginfo);
}
else
{//ok
_btest = true;
testResult = "0";
_start.Restart();
msg = $"StartTest#1$";
tcpClientHelper.Send(msg);
loginfo = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} <<< {msg} \r\n";
File.AppendAllText($"d:\\2\\{MachineCode}.txt", loginfo);
}
break;
case "Result":
tcpClientHelper.Send($"{testResult}");
loginfo = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} <<< {msg} \r\n";
File.AppendAllText($"d:\\2\\{MachineCode}.txt", loginfo);
break;
case "ErrorCode":
msg = $"ErrorCode#0$";
tcpClientHelper.Send(msg);
loginfo = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} <<< {msg} \r\n";
File.AppendAllText($"d:\\2\\{MachineCode}.txt", loginfo);
break;
}
}
}
private bool IsRun()
{
return _bhome || _btest;
}
private void TcpClientHelper_OnDisconnected(System.Net.Sockets.Socket obj)
{
Connected = false;
}
private void TcpClientHelper_OnConnected(System.Net.Sockets.Socket obj)
{
Connected = true;
tcpClientHelper.Send($"Register#{MachineCode}#{Index}#machid,desc,test1,test2,date,time$");
}
/// <summary>
/// 机器编号
/// </summary>
public string MachineCode { get; set; }
/// <summary>
/// 治具标号
/// </summary>
public int Index { get; set; }
public ETesterStatus Status { get; set; } = ETesterStatus.Idle;
}
/// <summary>
/// 模拟测试软件管理类
/// </summary>
public class SimulateTesterManager
{
SimulateTester[] simulateTesters = new SimulateTester[6];
private static SimulateTesterManager instance;
public static SimulateTesterManager Instance
{
get
{
if (instance == null)
{
instance = new SimulateTesterManager();
}
return instance;
}
}
private SimulateTesterManager()
{
for(int i=1;i<=6;i++)
{
simulateTesters[i - 1]=new SimulateTester();
simulateTesters[i - 1].MachineCode = $"76100{i}";
simulateTesters[i - 1].Index = i;
simulateTesters[i - 1].Init();
}
}
public void Init()
{
}
}
}