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