关于c#和plc这方面的问题,这段代码是一个接收硬件按钮后,网络控制器会主动推送数据过来,为什么这段代码在过一段时间后就收不到硬件推送的消息了,是代码有问题,还是硬件的问题呢
static Socket tj10clientSocket = null;
private static void ConnectToServer()
{
while (true)
{
try
{
string serverIP = "192.168.0.18";
if (ConfigUtil.device_no.IndexOf("PM") == 0)
{
serverIP = "192.168.2.18";
}
int serverPort = 50000;//按钮开关设备端口号
tj10clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(serverIP), serverPort);
tj10clientSocket.Connect(serverEndPoint);
LogUtil.Logger.Info("Connected to server at " + serverEndPoint);
// Start a background thread for receiving messages
Thread receiveThread = new Thread(tj10ReceiveMessages);
receiveThread.IsBackground = true;
receiveThread.Start();
openSemaphore();
break; // Break the loop if connected successfully
}
catch (Exception e)
{
LogUtil.Logger.Error("Connection failed: " + e.Message);
Thread.Sleep(5000); // Wait for 5 seconds before attempting reconnection
}
}
}
private static void tj10ReceiveMessages()
{
byte[] buffer = new byte[1024];
while (true)
{
try
{
int bytesRead = 0;
bytesRead = tj10clientSocket.Receive(buffer);
string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
if (bytesRead > 5 && buffer[5] == 1)
{
openGreenLight();
bool mesRet = HttpUtil.PostCuttingBordToMes();
Thread.Sleep(5000);
closeGreenLight();
if (!mesRet)
{
Thread.Sleep(500);
openYellowLight();
Thread.Sleep(5000);
closeYellowLight();
}
LogUtil.Logger.Info("科星切板成功");
}
}
catch (Exception e)
{
LogUtil.Logger.Error("Connection lost: " + e.Message);
tj10clientSocket.Close();
ConnectToServer(); // Attempt to reconnect
break;
}
}
}
public static void openGreenLight()
{
try
{
if (tj10clientSocket.Connected)
{
// 要发送的字节数组
byte[] dataToSend = new byte[] { 0xCC, 0xDD, 0xA1, 0x01, 0x00, 0x01, 0x00, 0x01, 0xA4, 0x48 };
tj10clientSocket.Send(dataToSend);
}
}
catch (Exception e)
{
LogUtil.Logger.Error("异常信息:"+e.ToString());
}
}
public static void openSemaphore()
{
try
{
if (tj10clientSocket.Connected)
{
// 要发送的字节数组
byte[] dataToSend = new byte[] { 0x55, 0xAA, 0x66, 0x02, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x55 };
tj10clientSocket.Send(dataToSend);
}
}
catch (Exception e)
{
LogUtil.Logger.Error("异常信息:" + e.ToString());
}
}
public static void closeGreenLight()
{
try
{
if (tj10clientSocket.Connected)
{
// 要发送的字节数组
byte[] dataToSend = new byte[] { 0xCC, 0xDD, 0xA1, 0x01, 0x00, 0x00, 0x00, 0x01, 0xA3, 0x46 };
tj10clientSocket.Send(dataToSend);
}
}
catch (Exception e)
{
LogUtil.Logger.Error("异常信息:" + e.ToString());
}
}
public static void openYellowLight()
{
try
{
if (tj10clientSocket.Connected)
{
// 要发送的字节数组
byte[] dataToSend = new byte[] { 0xCC, 0xDD, 0xA1, 0x01, 0x00, 0x02, 0x00, 0x02, 0xA6, 0x4C };
tj10clientSocket.Send(dataToSend);
}
}
catch (Exception e)
{
LogUtil.Logger.Error("异常信息:" + e.ToString());
}
}
public static void closeYellowLight()
{
try
{
if (tj10clientSocket.Connected)
{
// 要发送的字节数组
byte[] dataToSend = new byte[] { 0xCC, 0xDD, 0xA1, 0x01, 0x00, 0x00, 0x00, 0x02, 0xA4, 0x48 };
tj10clientSocket.Send(dataToSend);
}
}
catch (Exception e)
{
LogUtil.Logger.Error("异常信息:" + e.ToString());
}
}