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.
241 lines
8.2 KiB
C#
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()
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|