SCLS/SSWCS_JXDL(2019)/CommonLibrary/CConnectTCPIP.cs

239 lines
9.5 KiB
C#
Raw Permalink Normal View History

2025-05-19 09:45:29 +08:00
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Data;
using DBFactory;
namespace CommonLibrary
{
public static class CConnectTCPIP
{
static bool _exitThread = false;
static string _tcpServerError;
static int[] _plcValues;
public static int[] PlcValues
{
get { return CConnectTCPIP._plcValues; }
set { CConnectTCPIP._plcValues = value; }
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AGV<47><56><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>
/// </summary>
public static string TcpServerError
{
get { return CConnectTCPIP._tcpServerError; }
set { CConnectTCPIP._tcpServerError = value; }
}
static string _receiveOK=null;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AGV<47><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public static string ReceiveOK
{
get { return CConnectTCPIP._receiveOK; }
set { CConnectTCPIP._receiveOK = value; }
}
static Thread mythread;
static Socket Localsocket;
static bool ConnectedServer = false;
static byte[] _GetData = new byte[6];
static CGetState agvstate = new CGetState();
static DBOperator dbo = new DBOperator();
static DBOperator dboM = new DBOperator("ManConnString", "ManDBFactory");
/// <summary>
/// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private static void BeginListen()
{
while (true)
{
if (_exitThread == true)
{
mythread.Abort();
return;
}
try
{
if (ConnectedServer == false)
{
if (ConnectTcpIPServer() == false) continue;
}
Localsocket.Listen(1);
try
{
SocketsTCPIP.CClientTCPIP.ClientSocket.Receive(_GetData);
if (_GetData[0] == 0) continue;
CommonClassLib.CCarryConvert.WriteDarkCasket("ReceiveAGV", "SocketsTCPIP.CConnectTCPIP", "Receive", "1000", _GetData);
}
catch
{
continue;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
if (_GetData != null)
{
if ((_GetData[0] == 70))
{
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AGV<47><56><EFBFBD>Ű<EFBFBD><C5B0><EFBFBD>
//int AgvNo, taskindex, MonitorIndex, taskkind;
//MonitorIndex = Convert.ToInt32(_GetData[3] * Math.Pow(2, 8) + _GetData[2]);
//AgvNo = Convert.ToInt32(_GetData[5] * Math.Pow(2, 8) + _GetData[4]);
//taskindex = ccf.GetAgvTaskIndex(MonitorIndex);
//taskkind = ccf.GetManageTaskKindIndex(MonitorIndex);
//dbo.ExceSQL("update t_base_monitor_task set f_agvno=" + AgvNo + " where f_managetaskindex=" + taskindex + " and f_managetaskkindindex=" + taskkind);
//dbo.ExceSQL("update t_base_monitor_task set f_deviceindex =" + AgvNo + " where f_managetaskindex=" + taskindex + " and f_deviceindex<=12 and f_managetaskkindindex=" + taskkind);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
agvstate.ActionComplete(Convert.ToInt32(_GetData[5] * Math.Pow(2, 8) + _GetData[4]), Convert.ToInt32(_GetData[3] * Math.Pow(2, 8) + _GetData[2]));
}
if ((_GetData[0] == 81))
{
//AGV<47>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ɡ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񡱣<EFBFBD>81<38><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ڴ<EFBFBD><DAB4><EFBFBD>PCS<43><53><EFBFBD><EFBFBD>AGV״̬readystatus<75><73>3<EFBFBD><33>Ϊ0
}
if ((_GetData[0] == 86))
{
////AGV<47><56><EFBFBD>ߣ<EFBFBD>86<38><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+AGV<47><56><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ذ<EFBFBD>AGV<47><56><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>λ
//dbo.ExceSQL("update t_base_monitor_task set F_STATUS=0 where F_STATUS>0 and F_DEVICEINDEX=" + Convert.ToInt32(_GetData[5] * Math.Pow(2, 8) + _GetData[4]));
//dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(_GetData[5] * Math.Pow(2, 8) + _GetData[4]));
}
if ((_GetData[0] == 87))
{
////AGV<47>ϱ<EFBFBD><CFB1>ر<EFBFBD><D8B1>㣨87<38><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>AGV<47><56><EFBFBD>ţ<EFBFBD><C5A3>ر<EFBFBD><D8B1><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><E3A3BD>284ʱ<34>ϱ<EFBFBD>PCS<43><EFBFBD><EBBFAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(PCS<43><53>ַ251)
////if (Convert.ToInt32(_GetData[7] * Math.Pow(2, 8) + _GetData[6]) == 284)
////{
//int fid = ccf.GetAgvTaskIndex(Convert.ToInt32(_GetData[3] * Math.Pow(2, 8) + _GetData[2]));
//dboM.ExceSQL("update agvtask set CurrentLocation=251 where taskindex=" + fid);
////}
}
else if ((_GetData[0] == 71))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
{//<2F><><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
//ccf.ActionRecordAgvNo(0, Convert.ToInt32(_GetData[3] * Math.Pow(2, 8) + _GetData[2]), Convert.ToInt32(_GetData[5] * Math.Pow(2, 8) + _GetData[4]));
}
//82 <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>ܾ<EFBFBD><DCBE><EFBFBD>0<EFBFBD><30><EFBFBD>ܣ<EFBFBD>
else if ((_GetData[4] == 1) && (_GetData[0] == 82))//AGV<47>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD>ܣ<EFBFBD>1<EFBFBD>ܾ<EFBFBD><DCBE><EFBFBD>
{
agvstate.ActionError(0, Convert.ToInt32(_GetData[3] * Math.Pow(2, 8) + _GetData[2]), 82);
}
//77 <20>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>ɵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ<EFBFBD><C8B7>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ȷ<EFBFBD><C8B7>
else if ((_GetData[4] == 0) && (_GetData[0] == 77))//0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>
{
//agvstate.ActionComplete(Convert.ToInt32(_GetData[5] * Math.Pow(2, 8) + _GetData[4]), Convert.ToInt32(_GetData[3] * Math.Pow(2, 8) + _GetData[2]));
//_receiveOK = agvstate.ActionOK;
//agvstate.ActionOK = null;
}
else if ((_GetData[4] == 1) && (_GetData[0] == 77))//1<><31><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>
{
//agvstate.ActionError(0, Convert.ToInt32(_GetData[3] * Math.Pow(2, 8) + _GetData[2]), 77);
}
}
}
catch (SocketException ex)
{
//SocketsTCPIP.CClientTCPIP.IfInit = false;
ConnectedServer = false;
_tcpServerError = "CConnectTCPIP.BeginListen:" + ex.Message;
}
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͱ󶨱<CDB0><F3B6A8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
/// </summary>
/// <returns></returns>
public static bool ConnectTcpIPServer()
{
string remoteIP; int remotePort; string localIP; int localPort;
try
{
//<2F><><EFBFBD><EFBFBD>DeviceIndex,<2C>õ<EFBFBD>SocketsͨѶ<CDA8>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
DataView dv = dbo.ExceSQL("SELECT F_DeviceIndex,F_DeviceKindIndex, F_LocalIP, F_LocalPort, F_RemoteIP, F_RemotePort FROM T_Base_Device where F_DeviceIndex=0 and F_DeviceKindIndex=6").Tables[0].DefaultView;
if (dv.Count == 0)
{
return false;
}
else
{
remoteIP = (dv[0]["F_RemoteIP"]).ToString();
localIP = (dv[0]["F_LocalIP"]).ToString();
remotePort =Convert.ToInt32 (dv[0]["F_RemotePort"]);
localPort =Convert.ToInt32 (dv[0]["F_LocalPort"]);
}
IPAddress ipAddress = IPAddress.Parse(localIP);
IPEndPoint EPlocal = new IPEndPoint(ipAddress, localPort);
// Create a TCP/IP socket.
if (Localsocket == null)
{
Localsocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
Localsocket.Bind((EndPoint)EPlocal);
}
if (SocketsTCPIP.CClientTCPIP.IfInit == false)
{
if (SocketsTCPIP.CClientTCPIP.InitClientTCPIP(remoteIP,remotePort) == false)
{
_tcpServerError = SocketsTCPIP.CClientTCPIP.TcpError;
return false;
}
}
ConnectedServer = true;
return ConnectedServer;
}
catch (Exception ex)
{
_tcpServerError = "CConnectTCPIP.ConnectTcpIPServer:" + ex.Message;
return false;
}
}
public static void EndListen()
{
_exitThread = true;
if (SocketsTCPIP.CClientTCPIP.ClientSocket != null)
{
SocketsTCPIP.CClientTCPIP.ClientSocket.Close();
}
if (mythread != null)
{
mythread.Abort();
}
}
public static void StartListen()
{
mythread = new Thread(new ThreadStart(BeginListen));
mythread.Start();
}
}
}