You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
759 lines
35 KiB
759 lines
35 KiB
3 months ago
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Text;
|
||
|
using System.Data;
|
||
|
using System.Threading;
|
||
|
using Microsoft.VisualBasic;
|
||
|
using DBFactory;
|
||
|
using ICommLayer;
|
||
|
|
||
|
namespace SocketsTCPIP
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// ʹ��SocketsTCPIP�Ŀͻ��˽���ͨѶ
|
||
|
/// �����豸������
|
||
|
/// �����ߣ�Richard.Liu
|
||
|
/// 20110104������AGV����̨ͨѶЭ��
|
||
|
/// </summary>
|
||
|
public class CSendDeviceOrder: ISendDeviceOrder
|
||
|
{
|
||
|
string _commLayerError;
|
||
|
StringBuilder sql = new StringBuilder();
|
||
|
public string CommLayerError
|
||
|
{
|
||
|
get { return _commLayerError; }
|
||
|
set { _commLayerError = value; }
|
||
|
}
|
||
|
|
||
|
DBOperator dbo = CClientTCPIP.dbo;
|
||
|
string AGVAllowSingleFork = CommonClassLib.AppSettings.GetValue("AGVAllowSingleFork");
|
||
|
public CSendDeviceOrder()
|
||
|
{
|
||
|
dbo.Open();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
///���� ͨѶ���� ���� ͨѶ��ʽ ��ʽ˵��
|
||
|
///1 ���ص���ͨѶ���ӽ��� ���ص���->AGV����̨ 60001
|
||
|
///2 ���ص���ͨѶ���ӶϿ� ���ص���->AGV����̨ 60002
|
||
|
///3 �´����� ���ص���->AGV����̨ 60003[T1][T2][T][P][K][A] [F][C]
|
||
|
///[N1][O]
|
||
|
///[N2][O]
|
||
|
///����
|
||
|
///[CK] T1����������,T2����������;
|
||
|
///T��������;65535
|
||
|
///PΪ���ȼ�(ȡֵ��Χ2-10,Խ�����ȼ�Խ��);2
|
||
|
///K��������;65535
|
||
|
///A��������;65535
|
||
|
///FΪ����������ʶ(1-�к�������,0-��������);
|
||
|
///CΪ�ڵ�����;
|
||
|
///N1��N2Ϊ�ڵ���;
|
||
|
///OΪ�����豸����(AGV����̨�ṩ);
|
||
|
///CKУ����(�������������밴�������ӷ�)
|
||
|
///4 �´�����ȷ�� AGV����̨->���ص��� 60003[T1][T2] [CK] T1Ϊ����������,T2Ϊ����������;
|
||
|
///5 AGV������ʼ AGV����̨->���ص��� 60004[T1][T2][A] [CK] AΪ��������;
|
||
|
///6 ������ʼȷ�� ���ص���->AGV����̨ 60004[T1][T2] [CK]
|
||
|
///7 AGV�������� AGV����̨->���ص��� 60005[T1][T2] [A] [CK]
|
||
|
///8 ��������ȷ�� ���ص���->AGV����̨ 60005[T1][T2] [CK]
|
||
|
///9 ��������ɾ������ ���ص���->AGV����̨ 60006[T1][T2] [CK]
|
||
|
///10 ��������ɾ�������ظ� AGV����̨->���ص��� 60006[T1][T2][A] [CK] AΪ����״̬(0-������,1-����)
|
||
|
///11
|
||
|
///����̨����ɾ������ AGV����̨->���ص��� 60007[T1][T2] [CK]
|
||
|
///12 ����̨����ɾ������ȷ�� ���ص���->AGV����̨ 60007[T1][T2] [CK]
|
||
|
///13 ���ز�ѯAGV״̬ ���ص���->AGV����̨ 60008 [A][CK] AΪ��������;
|
||
|
///14 ��ѯAGV״̬ȷ�� AGV����̨->���ص��� 60008 [C] [CK] CΪ������Ŀ;
|
||
|
///15 ����̨�ϱ�AGV״̬ AGV����̨->���ص��� 60009[A][T1][S] [E] [W][B]
|
||
|
///[N][O][CK] A��������;
|
||
|
///T1����������;
|
||
|
///SΪ��ǰ·������;
|
||
|
///EΪ��ǰ·���յ�;
|
||
|
///WΪ����״̬��
|
||
|
///BΪ����״̬��
|
||
|
///NΪĿ���ڵ㣻
|
||
|
///OΪ�����룻
|
||
|
///16 ȷ��AGV״̬ ���ص���->AGV����̨ 60009[A] [CK] AΪ��������;
|
||
|
///17 ���ط�����Ϣ ���ص���->AGV����̨ 60007[T1][T2]
|
||
|
///18 ���ص�������ɾ�������ظ� AGV����̨->���ص��� 60006[T1][T2][A] AΪ����״̬(0-������,1-����)
|
||
|
///19 AGV�������������ڵ� AGV����̨->���ص��� 60058[N][A] NΪ�ڵ�; AΪ����
|
||
|
///20 AGV����λ��״̬ AGV����̨->���ص��� 60059[A][S][X][Y][G] AΪ����;SΪ״̬(0-������1-����);XΪX����;
|
||
|
///YΪY����;GΪ�Ƕ�
|
||
|
///21 AGV���ϱ��� AGV����̨->���ص��� 60060[T1][T2][A][C] AΪ����; CΪ���ϴ���
|
||
|
///AGV����̨�����ص���ϵͳ���͵�Ӧ���źſɸ�������ȷ��,ͨѶ��ʽΪ600xx[T1][T2],�Բ�ͬ���źŲ��ò�ͬ�ı�ʶ����Ӧ��
|
||
|
|
||
|
/// </summary>
|
||
|
/// <param name="MessageIndex">��Ϣ����</param>
|
||
|
/// <param name="TaskIndex">��������</param>
|
||
|
/// <param name="Order">AGV������</param>
|
||
|
/// <param name="DeviceIndex">�豸����</param>
|
||
|
/// <param name="StartX">[N1]:ȡ����</param>
|
||
|
/// <param name="StartY"></param>
|
||
|
/// <param name="StartZ"></param>
|
||
|
/// <param name="EndX">[N2]:����</param>
|
||
|
/// <param name="EndY"></param>
|
||
|
/// <param name="EndZ"></param>
|
||
|
/// <returns>����AGV�����Ƿ��ɹ�</returns>
|
||
|
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int Order, int DeviceIndex, int StartX, int StartY, int StartZ, int EndX, int EndY, int EndZ)
|
||
|
{
|
||
|
|
||
|
|
||
|
//StartXȡ�豸���� EndX���豸����
|
||
|
//20100413����StartX��ȡ�豸����������ǰ�����복βԶ���桢���복β������
|
||
|
//վ�ڳ�β�����н������������ҷ�����
|
||
|
//�жϹ���˫���Ƿ�ͬ������
|
||
|
char useAwayFork = '0';
|
||
|
char channelLeft = '0';
|
||
|
int AGVAddress = 0;
|
||
|
int dorder = 0;
|
||
|
int _device = GetAGVNoFromMonitor(TaskIndex);
|
||
|
int Fid = Model.CGeneralFunction.GetManageTaskIndexfromMonitor(TaskIndex);
|
||
|
byte[] _Sdata;
|
||
|
int HaveNextTask = IfHaveNextTask(TaskIndex,DeviceIndex );
|
||
|
int forkNo = 0; int ck = 0;
|
||
|
bool retvalue = false;
|
||
|
if (MessageIndex != 1)
|
||
|
{
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
try
|
||
|
{
|
||
|
switch (Order)
|
||
|
{
|
||
|
case 1://�˶����� StartXȡ�豸����
|
||
|
#region �˶�����
|
||
|
|
||
|
GetDeviceInfoFromAGVGate(StartX, ref channelLeft, ref useAwayFork, ref AGVAddress);
|
||
|
|
||
|
_Sdata = new byte[48];
|
||
|
_Sdata[0] = Convert.ToByte(60003 & 255); //֡ͷ
|
||
|
_Sdata[1] = Convert.ToByte((60003 >> 8) & 255);
|
||
|
_Sdata[2] = Convert.ToByte((60003 >> 16) & 255);
|
||
|
_Sdata[3] = Convert.ToByte((60003 >> 24) & 255);
|
||
|
_Sdata[4] = Convert.ToByte(Fid & 255);//����������
|
||
|
_Sdata[5] = Convert.ToByte((Fid >> 8) & 255);
|
||
|
_Sdata[6] = Convert.ToByte((Fid >> 16) & 255);
|
||
|
_Sdata[7] = Convert.ToByte((Fid >> 24) & 255);
|
||
|
_Sdata[8] = Convert.ToByte(TaskIndex & 255);//����������
|
||
|
_Sdata[9] = Convert.ToByte((TaskIndex >> 8) & 255);
|
||
|
_Sdata[10] = Convert.ToByte((TaskIndex >> 16) & 255);
|
||
|
_Sdata[11] = Convert.ToByte((TaskIndex >> 24) & 255);
|
||
|
_Sdata[12] = Convert.ToByte(65535 & 255);//��������
|
||
|
_Sdata[13] = Convert.ToByte((65535 >> 8) & 255);
|
||
|
_Sdata[14] = Convert.ToByte((65535 >> 16) & 255);
|
||
|
_Sdata[15] = Convert.ToByte((65535 >> 24) & 255);
|
||
|
_Sdata[16] = 2;//���ȼ�
|
||
|
_Sdata[17] = 0;
|
||
|
_Sdata[18] = 0;
|
||
|
_Sdata[19] = 0;
|
||
|
_Sdata[20] = Convert.ToByte(65535 & 255);//��������
|
||
|
_Sdata[21] = Convert.ToByte((65535 >> 8) & 255);
|
||
|
_Sdata[22] = Convert.ToByte((65535 >> 16) & 255);
|
||
|
_Sdata[23] = Convert.ToByte((65535 >> 24) & 255);
|
||
|
_Sdata[24] = Convert.ToByte(65535 & 255);//��������
|
||
|
_Sdata[25] = Convert.ToByte((65535 >> 8) & 255);
|
||
|
_Sdata[26] = Convert.ToByte((65535 >> 16) & 255);
|
||
|
_Sdata[27] = Convert.ToByte((65535 >> 24) & 255);
|
||
|
_Sdata[28] = Convert.ToByte(HaveNextTask & 255);//����������ʶ
|
||
|
_Sdata[29] = Convert.ToByte((HaveNextTask >> 8) & 255);
|
||
|
_Sdata[30] = Convert.ToByte((HaveNextTask >> 16) & 255);
|
||
|
_Sdata[31] = Convert.ToByte((HaveNextTask >> 24) & 255);
|
||
|
_Sdata[32] = 1;//�ڵ�����
|
||
|
_Sdata[33] = 0;
|
||
|
_Sdata[34] = 0;
|
||
|
_Sdata[35] = 0;
|
||
|
_Sdata[36] = Convert.ToByte(AGVAddress & 255);//�ڵ���
|
||
|
_Sdata[37] = Convert.ToByte((AGVAddress >> 8) & 255);
|
||
|
_Sdata[38] = Convert.ToByte((AGVAddress >> 16) & 255);
|
||
|
_Sdata[39] = Convert.ToByte((AGVAddress >> 24) & 255);
|
||
|
_Sdata[40] = Convert.ToByte(Order & 255);//�����豸����
|
||
|
_Sdata[41] = Convert.ToByte((Order >> 8) & 255);
|
||
|
_Sdata[42] = Convert.ToByte((Order >> 16) & 255);
|
||
|
_Sdata[43] = Convert.ToByte((Order >> 24) & 255);
|
||
|
ck = Convert.ToInt32(60003 + Fid + TaskIndex + 65535 + 2 + 65535 + 65535 + HaveNextTask + 1 + AGVAddress + Order);
|
||
|
_Sdata[44] = Convert.ToByte(ck & 255);//У����(�������������밴�������ӷ�)
|
||
|
_Sdata[45] = Convert.ToByte((ck >> 8) & 255);
|
||
|
_Sdata[46] = Convert.ToByte((ck >> 16) & 255);
|
||
|
_Sdata[47] = Convert.ToByte((ck >> 24) & 255);
|
||
|
|
||
|
retvalue= SendData(DeviceIndex, _Sdata);
|
||
|
|
||
|
#endregion
|
||
|
break;
|
||
|
case 2://ȡ������
|
||
|
#region ȡ������
|
||
|
|
||
|
GetDeviceInfoFromAGVGate(StartX, ref channelLeft, ref useAwayFork, ref AGVAddress);
|
||
|
dorder = 2;//ȡ������
|
||
|
//if (channelLeft == '1')
|
||
|
//{
|
||
|
// dorder = 1;//��ȡ
|
||
|
//}
|
||
|
//else
|
||
|
//{
|
||
|
// dorder = 3;//��ȡ
|
||
|
//}
|
||
|
if ((Model.CGeneralFunction.MutiForkIfSync(TaskIndex, DeviceIndex, 6) == null) && (AGVAllowSingleFork == "1"))//20100710
|
||
|
{//����ͬ��
|
||
|
|
||
|
if (useAwayFork == '1')//ǰ��
|
||
|
{
|
||
|
|
||
|
forkNo = 1;
|
||
|
}
|
||
|
else//����
|
||
|
{
|
||
|
forkNo = 2;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{//ͬ��
|
||
|
forkNo = 3;
|
||
|
|
||
|
}
|
||
|
_Sdata = new byte[48];
|
||
|
_Sdata[0] = Convert.ToByte(60003 & 255); //֡ͷ
|
||
|
_Sdata[1] = Convert.ToByte((60003 >> 8) & 255);
|
||
|
_Sdata[2] = Convert.ToByte((60003 >> 16) & 255);
|
||
|
_Sdata[3] = Convert.ToByte((60003 >> 24) & 255);
|
||
|
_Sdata[4] = Convert.ToByte(Fid & 255);//����������
|
||
|
_Sdata[5] = Convert.ToByte((Fid >> 8) & 255);
|
||
|
_Sdata[6] = Convert.ToByte((Fid >> 16) & 255);
|
||
|
_Sdata[7] = Convert.ToByte((Fid >> 24) & 255);
|
||
|
_Sdata[8] = Convert.ToByte(TaskIndex & 255);//����������
|
||
|
_Sdata[9] = Convert.ToByte((TaskIndex >> 8) & 255);
|
||
|
_Sdata[10] = Convert.ToByte((TaskIndex >> 16) & 255);
|
||
|
_Sdata[11] = Convert.ToByte((TaskIndex >> 24) & 255);
|
||
|
_Sdata[12] = Convert.ToByte(65535 & 255);//��������
|
||
|
_Sdata[13] = Convert.ToByte((65535 >> 8) & 255);
|
||
|
_Sdata[14] = Convert.ToByte((65535 >> 16) & 255);
|
||
|
_Sdata[15] = Convert.ToByte((65535 >> 24) & 255);
|
||
|
_Sdata[16] = 2;//���ȼ�
|
||
|
_Sdata[17] = 0;
|
||
|
_Sdata[18] = 0;
|
||
|
_Sdata[19] = 0;
|
||
|
_Sdata[20] = Convert.ToByte(65535 & 255);//��������
|
||
|
_Sdata[21] = Convert.ToByte((65535 >> 8) & 255);
|
||
|
_Sdata[22] = Convert.ToByte((65535 >> 16) & 255);
|
||
|
_Sdata[23] = Convert.ToByte((65535 >> 24) & 255);
|
||
|
_Sdata[24] = Convert.ToByte(65535 & 255);//��������
|
||
|
_Sdata[25] = Convert.ToByte((65535 >> 8) & 255);
|
||
|
_Sdata[26] = Convert.ToByte((65535 >> 16) & 255);
|
||
|
_Sdata[27] = Convert.ToByte((65535 >> 24) & 255);
|
||
|
_Sdata[28] = Convert.ToByte(HaveNextTask & 255);//����������ʶ
|
||
|
_Sdata[29] = Convert.ToByte((HaveNextTask >> 8) & 255);
|
||
|
_Sdata[30] = Convert.ToByte((HaveNextTask >> 16) & 255);
|
||
|
_Sdata[31] = Convert.ToByte((HaveNextTask >> 24) & 255);
|
||
|
_Sdata[32] = 1;//�ڵ�����
|
||
|
_Sdata[33] = 0;
|
||
|
_Sdata[34] = 0;
|
||
|
_Sdata[35] = 0;
|
||
|
_Sdata[36] = Convert.ToByte(AGVAddress & 255);//�ڵ���
|
||
|
_Sdata[37] = Convert.ToByte((AGVAddress >> 8) & 255);
|
||
|
_Sdata[38] = Convert.ToByte((AGVAddress >> 16) & 255);
|
||
|
_Sdata[39] = Convert.ToByte((AGVAddress >> 24) & 255);
|
||
|
_Sdata[40] = Convert.ToByte(dorder & 255);//�����豸����
|
||
|
_Sdata[41] = Convert.ToByte((dorder >> 8) & 255);
|
||
|
_Sdata[42] = Convert.ToByte((dorder >> 16) & 255);
|
||
|
_Sdata[43] = Convert.ToByte((dorder >> 24) & 255);
|
||
|
ck = Convert.ToInt32(60003 + Fid + TaskIndex + 65535 + 2 + 65535 + 65535 + HaveNextTask + 1 + AGVAddress + dorder);
|
||
|
_Sdata[44] = Convert.ToByte(ck & 255);//У����(�������������밴�������ӷ�)
|
||
|
_Sdata[45] = Convert.ToByte((ck >> 8) & 255);
|
||
|
_Sdata[46] = Convert.ToByte((ck >> 16) & 255);
|
||
|
_Sdata[47] = Convert.ToByte((ck >> 24) & 255);
|
||
|
//writeDark(Fid, TaskIndex, DeviceIndex, dorder, AGVAddress);
|
||
|
retvalue= SendData(DeviceIndex, _Sdata);
|
||
|
|
||
|
#endregion
|
||
|
break;
|
||
|
case 3://�ͻ�
|
||
|
#region �ͻ�
|
||
|
|
||
|
GetDeviceInfoFromAGVGate(EndX, ref channelLeft, ref useAwayFork, ref AGVAddress);
|
||
|
dorder = 3;//�ͻ�
|
||
|
//if (channelLeft == '1')
|
||
|
//{
|
||
|
// dorder = 2;//����
|
||
|
//}
|
||
|
//else
|
||
|
//{
|
||
|
// dorder = 4;//����
|
||
|
//}
|
||
|
if ((Model.CGeneralFunction.MutiForkIfSync(TaskIndex, DeviceIndex, 6) == null) && (AGVAllowSingleFork == "1"))//20100710
|
||
|
{//����ͬ��
|
||
|
|
||
|
if (useAwayFork == '1')//ǰ��
|
||
|
{
|
||
|
|
||
|
forkNo = 1;
|
||
|
}
|
||
|
else//����
|
||
|
{
|
||
|
forkNo = 2;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{//ͬ��
|
||
|
forkNo = 3;
|
||
|
|
||
|
}
|
||
|
_Sdata = new byte[48];
|
||
|
_Sdata[0] = Convert.ToByte(60003 & 255); //֡ͷ
|
||
|
_Sdata[1] = Convert.ToByte((60003 >> 8) & 255);
|
||
|
_Sdata[2] = Convert.ToByte((60003 >> 16) & 255);
|
||
|
_Sdata[3] = Convert.ToByte((60003 >> 24) & 255);
|
||
|
_Sdata[4] = Convert.ToByte(Fid & 255);//����������
|
||
|
_Sdata[5] = Convert.ToByte((Fid >> 8) & 255);
|
||
|
_Sdata[6] = Convert.ToByte((Fid >> 16) & 255);
|
||
|
_Sdata[7] = Convert.ToByte((Fid >> 24) & 255);
|
||
|
_Sdata[8] = Convert.ToByte(TaskIndex & 255);//����������
|
||
|
_Sdata[9] = Convert.ToByte((TaskIndex >> 8) & 255);
|
||
|
_Sdata[10] = Convert.ToByte((TaskIndex >> 16) & 255);
|
||
|
_Sdata[11] = Convert.ToByte((TaskIndex >> 24) & 255);
|
||
|
_Sdata[12] = Convert.ToByte(65535 & 255);//��������
|
||
|
_Sdata[13] = Convert.ToByte((65535 >> 8) & 255);
|
||
|
_Sdata[14] = Convert.ToByte((65535 >> 16) & 255);
|
||
|
_Sdata[15] = Convert.ToByte((65535 >> 24) & 255);
|
||
|
_Sdata[16] = 2;//���ȼ�
|
||
|
_Sdata[17] = 0;
|
||
|
_Sdata[18] = 0;
|
||
|
_Sdata[19] = 0;
|
||
|
_Sdata[20] = Convert.ToByte(65535 & 255);//��������
|
||
|
_Sdata[21] = Convert.ToByte((65535 >> 8) & 255);
|
||
|
_Sdata[22] = Convert.ToByte((65535 >> 16) & 255);
|
||
|
_Sdata[23] = Convert.ToByte((65535 >> 24) & 255);
|
||
|
_Sdata[24] = Convert.ToByte(65535 & 255);//��������
|
||
|
_Sdata[25] = Convert.ToByte((65535 >> 8) & 255);
|
||
|
_Sdata[26] = Convert.ToByte((65535 >> 16) & 255);
|
||
|
_Sdata[27] = Convert.ToByte((65535 >> 24) & 255);
|
||
|
_Sdata[28] = Convert.ToByte(HaveNextTask & 255);//����������ʶ
|
||
|
_Sdata[29] = Convert.ToByte((HaveNextTask >> 8) & 255);
|
||
|
_Sdata[30] = Convert.ToByte((HaveNextTask >> 16) & 255);
|
||
|
_Sdata[31] = Convert.ToByte((HaveNextTask >> 24) & 255);
|
||
|
_Sdata[32] = 1;//�ڵ�����
|
||
|
_Sdata[33] = 0;
|
||
|
_Sdata[34] = 0;
|
||
|
_Sdata[35] = 0;
|
||
|
_Sdata[36] = Convert.ToByte(AGVAddress & 255);//�ڵ���
|
||
|
_Sdata[37] = Convert.ToByte((AGVAddress >> 8) & 255);
|
||
|
_Sdata[38] = Convert.ToByte((AGVAddress >> 16) & 255);
|
||
|
_Sdata[39] = Convert.ToByte((AGVAddress >> 24) & 255);
|
||
|
_Sdata[40] = Convert.ToByte(dorder & 255);//�����豸����
|
||
|
_Sdata[41] = Convert.ToByte((dorder >> 8) & 255);
|
||
|
_Sdata[42] = Convert.ToByte((dorder >> 16) & 255);
|
||
|
_Sdata[43] = Convert.ToByte((dorder >> 24) & 255);
|
||
|
ck = Convert.ToInt32(60003 + Fid + TaskIndex + 65535 + 2 + 65535 + 65535 + HaveNextTask + 1 + AGVAddress + dorder);
|
||
|
_Sdata[44] = Convert.ToByte(ck & 255);//У����(�������������밴�������ӷ�)
|
||
|
_Sdata[45] = Convert.ToByte((ck >> 8) & 255);
|
||
|
_Sdata[46] = Convert.ToByte((ck >> 16) & 255);
|
||
|
_Sdata[47] = Convert.ToByte((ck >> 24) & 255);
|
||
|
//writeDark(Fid, TaskIndex, DeviceIndex, dorder, AGVAddress);
|
||
|
retvalue= SendData(DeviceIndex, _Sdata);
|
||
|
|
||
|
#endregion
|
||
|
break;
|
||
|
case 4://ȡ�ͻ�
|
||
|
#region ȡ�ͻ�
|
||
|
//ȡ��
|
||
|
GetDeviceInfoFromAGVGate(StartX, ref channelLeft, ref useAwayFork, ref AGVAddress);
|
||
|
if (channelLeft == '1')
|
||
|
{
|
||
|
dorder = 1;//��ȡ
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
dorder = 3;//��ȡ
|
||
|
}
|
||
|
if ((Model.CGeneralFunction.MutiForkIfSync(TaskIndex, DeviceIndex, 6) == null) && (AGVAllowSingleFork == "1"))//20100710
|
||
|
{//����ͬ��
|
||
|
|
||
|
if (useAwayFork == '1')//ǰ��
|
||
|
{
|
||
|
|
||
|
forkNo = 1;
|
||
|
}
|
||
|
else//����
|
||
|
{
|
||
|
forkNo = 2;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{//ͬ��
|
||
|
forkNo = 3;
|
||
|
|
||
|
}
|
||
|
_Sdata = new byte[56];
|
||
|
_Sdata[0] = Convert.ToByte(60003 & 255); //֡ͷ
|
||
|
_Sdata[1] = Convert.ToByte((60003 >> 8) & 255);
|
||
|
_Sdata[2] = Convert.ToByte((60003 >> 16) & 255);
|
||
|
_Sdata[3] = Convert.ToByte((60003 >> 24) & 255);
|
||
|
_Sdata[4] = Convert.ToByte(Fid & 255);//����������
|
||
|
_Sdata[5] = Convert.ToByte((Fid >> 8) & 255);
|
||
|
_Sdata[6] = Convert.ToByte((Fid >> 16) & 255);
|
||
|
_Sdata[7] = Convert.ToByte((Fid >> 24) & 255);
|
||
|
_Sdata[8] = Convert.ToByte(TaskIndex & 255);//����������
|
||
|
_Sdata[9] = Convert.ToByte((TaskIndex >> 8) & 255);
|
||
|
_Sdata[10] = Convert.ToByte((TaskIndex >> 16) & 255);
|
||
|
_Sdata[11] = Convert.ToByte((TaskIndex >> 24) & 255);
|
||
|
_Sdata[12] = Convert.ToByte(65535 & 255);//��������
|
||
|
_Sdata[13] = Convert.ToByte((65535 >> 8) & 255);
|
||
|
_Sdata[14] = Convert.ToByte((65535 >> 16) & 255);
|
||
|
_Sdata[15] = Convert.ToByte((65535 >> 24) & 255);
|
||
|
_Sdata[16] = 2;//���ȼ�
|
||
|
_Sdata[17] = 0;
|
||
|
_Sdata[18] = 0;
|
||
|
_Sdata[19] = 0;
|
||
|
_Sdata[20] = Convert.ToByte(65535 & 255);//��������
|
||
|
_Sdata[21] = Convert.ToByte((65535 >> 8) & 255);
|
||
|
_Sdata[22] = Convert.ToByte((65535 >> 16) & 255);
|
||
|
_Sdata[23] = Convert.ToByte((65535 >> 24) & 255);
|
||
|
_Sdata[24] = Convert.ToByte(65535 & 255);//��������
|
||
|
_Sdata[25] = Convert.ToByte((65535 >> 8) & 255);
|
||
|
_Sdata[26] = Convert.ToByte((65535 >> 16) & 255);
|
||
|
_Sdata[27] = Convert.ToByte((65535 >> 24) & 255);
|
||
|
_Sdata[28] = Convert.ToByte(HaveNextTask & 255);//����������ʶ
|
||
|
_Sdata[29] = Convert.ToByte((HaveNextTask >> 8) & 255);
|
||
|
_Sdata[30] = Convert.ToByte((HaveNextTask >> 16) & 255);
|
||
|
_Sdata[31] = Convert.ToByte((HaveNextTask >> 24) & 255);
|
||
|
_Sdata[32] = 2;//�ڵ�����
|
||
|
_Sdata[33] = 0;
|
||
|
_Sdata[34] = 0;
|
||
|
_Sdata[35] = 0;
|
||
|
_Sdata[36] = Convert.ToByte(AGVAddress & 255);//�ڵ���
|
||
|
_Sdata[37] = Convert.ToByte((AGVAddress >> 8) & 255);
|
||
|
_Sdata[38] = Convert.ToByte((AGVAddress >> 16) & 255);
|
||
|
_Sdata[39] = Convert.ToByte((AGVAddress >> 24) & 255);
|
||
|
_Sdata[40] = Convert.ToByte(dorder & 255);//�����豸����
|
||
|
_Sdata[41] = Convert.ToByte((dorder >> 8) & 255);
|
||
|
_Sdata[42] = Convert.ToByte((dorder >> 16) & 255);
|
||
|
_Sdata[43] = Convert.ToByte((dorder >> 24) & 255);
|
||
|
ck = Convert.ToInt32(60003 + Fid + TaskIndex + 65535 + 2 + 65535 + 65535 + HaveNextTask + 1 + AGVAddress + dorder);
|
||
|
//writeDark(Fid, TaskIndex, DeviceIndex, dorder, AGVAddress);
|
||
|
//�ͻ�
|
||
|
GetDeviceInfoFromAGVGate(EndX, ref channelLeft, ref useAwayFork, ref AGVAddress);
|
||
|
if (channelLeft == '1')
|
||
|
{
|
||
|
dorder = 2;//����
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
dorder = 4;//����
|
||
|
}
|
||
|
if ((Model.CGeneralFunction.MutiForkIfSync(TaskIndex, DeviceIndex, 6) == null) && (AGVAllowSingleFork == "1"))//20100710
|
||
|
{//����ͬ��
|
||
|
|
||
|
if (useAwayFork == '1')//ǰ��
|
||
|
{
|
||
|
|
||
|
forkNo = 1;
|
||
|
}
|
||
|
else//����
|
||
|
{
|
||
|
forkNo = 2;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{//ͬ��
|
||
|
forkNo = 3;
|
||
|
|
||
|
}
|
||
|
|
||
|
_Sdata[44] = Convert.ToByte(AGVAddress & 255);//�ڵ���
|
||
|
_Sdata[45] = Convert.ToByte((AGVAddress >> 8) & 255);
|
||
|
_Sdata[46] = Convert.ToByte((AGVAddress >> 16) & 255);
|
||
|
_Sdata[47] = Convert.ToByte((AGVAddress >> 24) & 255);
|
||
|
_Sdata[48] = Convert.ToByte(dorder & 255);//�����豸����
|
||
|
_Sdata[49] = Convert.ToByte((dorder >> 8) & 255);
|
||
|
_Sdata[50] = Convert.ToByte((dorder >> 16) & 255);
|
||
|
_Sdata[51] = Convert.ToByte((dorder >> 24) & 255);
|
||
|
ck = ck + AGVAddress + dorder;
|
||
|
_Sdata[52] = Convert.ToByte(ck & 255);//У����(�������������밴�������ӷ�)
|
||
|
_Sdata[53] = Convert.ToByte((ck >> 8) & 255);
|
||
|
_Sdata[54] = Convert.ToByte((ck >> 16) & 255);
|
||
|
_Sdata[55] = Convert.ToByte((ck >> 24) & 255);
|
||
|
|
||
|
retvalue= SendData(DeviceIndex, _Sdata);
|
||
|
|
||
|
#endregion
|
||
|
break;
|
||
|
//case 5://����AGV���أ�ʹ����ʼ������Ϊ����AGV���ص������豸
|
||
|
// #region ����AGV����
|
||
|
|
||
|
// GetDeviceInfoFromAGVGate(StartX, ref channelLeft, ref useAwayFork, ref AGVAddress);
|
||
|
// //����ʵ��ȡ�������ͻ�������F_AGVNextTask
|
||
|
// object ob = dbo.GetSingle("select F_AGVNextTask from T_Monitor_Task where F_MonitorIndex=" + TaskIndex);
|
||
|
// if (ob != null)
|
||
|
// {
|
||
|
// TaskIndex = Convert.ToInt32(ob);
|
||
|
// }
|
||
|
// _Sdata = new byte[12];
|
||
|
// _Sdata[0] = Convert.ToByte(60005 & 255); //֡ͷ
|
||
|
// _Sdata[1] = Convert.ToByte(60005 >> 8);
|
||
|
// _Sdata[2] = Convert.ToByte(Fid & 255);//����������
|
||
|
// _Sdata[3] = Convert.ToByte(Fid >> 8);
|
||
|
// _Sdata[4] = Convert.ToByte(TaskIndex & 255);//����������
|
||
|
// _Sdata[5] = Convert.ToByte(TaskIndex >> 8);
|
||
|
// _Sdata[6] = Convert.ToByte(AGVAddress & 255);//�ڵ�
|
||
|
// _Sdata[7] = Convert.ToByte(AGVAddress >> 8);
|
||
|
// _Sdata[8] = Convert.ToByte(forkNo & 255);//�����豸����
|
||
|
// _Sdata[9] = Convert.ToByte(forkNo >> 8);
|
||
|
// _Sdata[10] =Convert.ToByte(dorder & 255);//��������
|
||
|
// _Sdata[11] =Convert.ToByte(dorder >> 8);
|
||
|
|
||
|
// return SendData(DeviceIndex, _Sdata);
|
||
|
|
||
|
// #endregion
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
|
||
|
return retvalue;
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
_commLayerError = this.ToString() + ":SendDeviceOrder---" + ex.Message;
|
||
|
return false;
|
||
|
}
|
||
|
finally
|
||
|
{
|
||
|
if (retvalue == true)
|
||
|
{
|
||
|
writeDark(Fid, TaskIndex, DeviceIndex, dorder, AGVAddress);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
public void writeDark(int Fid, int TaskIndex, int DeviceIndex, int dorder, int AGVAddress)
|
||
|
{
|
||
|
|
||
|
string barcode = string.Empty;
|
||
|
StringBuilder sss = new StringBuilder("");
|
||
|
sss.Remove(0, sss.Length);
|
||
|
sss.Append("SELECT F_TxtParam FROM T_Monitor_Task WHERE (F_MonitorIndex = ").Append(TaskIndex).Append(")");
|
||
|
DataView dvb = dbo.ExceSQL(sss.ToString()).Tables[0].DefaultView;
|
||
|
if (dvb.Count > 0)
|
||
|
{
|
||
|
barcode = dvb[0]["F_TxtParam"].ToString();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
barcode = "-";
|
||
|
}
|
||
|
sss.Remove(0, sss.Length);
|
||
|
sss.Append("���룺").Append(barcode).Append("**д��־60003").Append("**����������" + Fid.ToString()).Append("**�豸ָ��������" + TaskIndex.ToString())
|
||
|
.Append("**������" + dorder.ToString()).Append("**�" + AGVAddress.ToString());
|
||
|
|
||
|
CommonClassLib.CCarryConvert.WriteDarkCasket(this.ToString(), "����AGVָ��", DeviceIndex.ToString(), sss.ToString());
|
||
|
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// ����AGV����
|
||
|
/// </summary>
|
||
|
/// <param name="MessageIndex">��Ϣ����</param>
|
||
|
/// <param name="TaskIndex">��������</param>
|
||
|
/// <param name="Order">AGV������ ������MAN֪ͨLCͨѶ���ӽ���������MAN֪ͨLCͨѶ���ӶϿ�</param>
|
||
|
/// <param name="DeviceIndex">�豸����</param>
|
||
|
/// <returns>����AGV�豸�����Ƿ��ɹ�</returns>
|
||
|
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int Order, int DeviceIndex, int ArrowDeviceIndex)
|
||
|
{
|
||
|
Model.MDevice devinfo = Model.CGetInfo.GetDeviceInfo(DeviceIndex);
|
||
|
try
|
||
|
{
|
||
|
byte[] _Sdata = new byte[2];
|
||
|
_Sdata[0] = Convert.ToByte(Order);
|
||
|
_Sdata[1] = 0;
|
||
|
_Sdata[2] = Convert.ToByte(TaskIndex & 255);//�Ͱ�λ
|
||
|
_Sdata[3] = Convert.ToByte(TaskIndex >> 8);//�߰�λ
|
||
|
|
||
|
//����DeviceIndex,�õ�SocketsͨѶ�ij�ʼ����
|
||
|
|
||
|
|
||
|
|
||
|
if (devinfo == null)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
|
||
|
CClientTCPIP.Send(devinfo.RemoteIP, devinfo.RemotePort, _Sdata);
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
_commLayerError = this.ToString() + ":SendDeviceOrder---" + ex.Message;
|
||
|
return false;
|
||
|
}
|
||
|
finally
|
||
|
{
|
||
|
devinfo = null;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// ��λ������λ���������䰴Ʒ�����ֵ���Ϣ��15�ֽ�,������ʱд��ʵ�����ݣ�����ȫ��д��
|
||
|
/// </summary>
|
||
|
/// <param name="DeviceIndex">����λ�豸������</param>
|
||
|
/// <param name="TobaccoCode">��1--13�ֽ�,������</param>
|
||
|
/// <param name="HaveFirstProjectCode">��14�ֽ�,1-��һ�Ź�����,0-��һ�Ź�����</param>
|
||
|
/// <param name="IfSmallTobacco">��15�ֽ�,1-С����,0-��������</param>
|
||
|
/// <returns></returns>
|
||
|
public bool SendDeviceOrder(int DeviceIndex, string TobaccoCode, bool HaveFirstProjectCode, bool IfSmallTobacco,int Count)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
bool SendData(int devID, byte[] _Sdata)
|
||
|
{
|
||
|
//����DeviceIndex,�õ�SocketsͨѶ�ij�ʼ����
|
||
|
Model.MDevice devinfo = Model.CGetInfo.GetDeviceInfo(devID);
|
||
|
try
|
||
|
{
|
||
|
if (devinfo == null)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
|
||
|
if (CClientTCPIP.Send(devinfo.RemoteIP, devinfo.RemotePort, _Sdata) == false)
|
||
|
{
|
||
|
if (CClientTCPIP.TcpError != null) _commLayerError = CClientTCPIP.TcpError;
|
||
|
return false;
|
||
|
}
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
finally
|
||
|
{
|
||
|
devinfo = null;
|
||
|
}
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// ��PLC��DB�������
|
||
|
/// </summary>
|
||
|
/// <param name="ItemNames">��ǩ������������</param>
|
||
|
/// <param name="ItemValues">��ǩֵ����</param>
|
||
|
/// <returns></returns>
|
||
|
public bool WriteDBData(StringBuilder[] ItemNames, StringBuilder[] ItemValues)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
public bool WriteDBData(StringBuilder[] ItemNames, StringBuilder[] ItemValues, string PLCconnectionID)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
void GetDeviceInfoFromAGVGate(int agvGateDevice,ref char channelLeft,ref char useAwayFork,ref int AGVAddress)
|
||
|
{
|
||
|
DataView dv;
|
||
|
try
|
||
|
{
|
||
|
sql.Remove(0, sql.Length);
|
||
|
sql.Append("SELECT F_Address,F_IfChannelLeft,F_UseAwayFork FROM T_Base_AGV_Gate WHERE (F_AGVGateDeviceIndex = " ).Append( agvGateDevice ).Append( ")");
|
||
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
||
|
if (dv.Count > 0)
|
||
|
{
|
||
|
channelLeft = Convert.ToChar(dv[0]["F_IfChannelLeft"]);
|
||
|
useAwayFork = Convert.ToChar(dv[0]["F_UseAwayFork"]);
|
||
|
AGVAddress = Convert.ToChar(dv[0]["F_Address"]);
|
||
|
}
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
throw ex;
|
||
|
}
|
||
|
finally
|
||
|
{
|
||
|
dv = null;
|
||
|
}
|
||
|
}
|
||
|
int GetAGVNoFromMonitor(int taskIndex)
|
||
|
{
|
||
|
|
||
|
DataView dv;
|
||
|
try
|
||
|
{
|
||
|
sql.Remove(0, sql.Length);
|
||
|
sql.Append("SELECT F_AgvNo FROM T_Monitor_Task WHERE (F_MonitorIndex = " ).Append( taskIndex ).Append( ") and (F_AgvNo is not null)");
|
||
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
||
|
if (dv.Count > 0)
|
||
|
{
|
||
|
return Convert.ToInt32(dv[0][0]);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return 65535;
|
||
|
}
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
throw ex;
|
||
|
}
|
||
|
finally
|
||
|
{
|
||
|
dv = null;
|
||
|
}
|
||
|
}
|
||
|
int GetAGVTaskFromMonitor(int taskIndex)
|
||
|
{
|
||
|
|
||
|
DataView dv;
|
||
|
try
|
||
|
{
|
||
|
sql.Remove(0, sql.Length);
|
||
|
sql.Append("SELECT F_AgvTask FROM T_Monitor_Task WHERE (F_MonitorIndex = " ).Append( taskIndex ).Append( ") and (F_AgvTask is not null)");
|
||
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
||
|
if (dv.Count > 0)
|
||
|
{
|
||
|
return Convert.ToInt32(dv[0][0]);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return 65535;
|
||
|
}
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
throw ex;
|
||
|
}
|
||
|
finally
|
||
|
{
|
||
|
dv = null;
|
||
|
}
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// �Ƿ��к���������1���У�0����
|
||
|
/// </summary>
|
||
|
/// <param name="taskindex"></param>
|
||
|
/// <returns></returns>
|
||
|
int IfHaveNextTask(int taskindex,int deviceindex)
|
||
|
{
|
||
|
int mankind = Model.CGeneralFunction.GetManageTaskKindIndexFromMonitor(taskindex);
|
||
|
int fid = Model.CGeneralFunction.GetManageTaskIndexfromMonitor(taskindex);
|
||
|
sql.Remove(0, sql.Length);
|
||
|
sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_DeviceCommandIndex <> 5) AND (F_DeviceIndex = ").Append(deviceindex).Append(") AND (F_MonitorIndex <> ").Append(taskindex).Append(") AND F_ManageTaskIndex=").Append(fid).Append(" AND F_ManageTASKKINDINDEX=").Append(mankind).Append(" ORDER BY F_MonitorIndex DESC");
|
||
|
DataView dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView ;
|
||
|
if (dv.Count > 0)
|
||
|
{
|
||
|
dv = null;
|
||
|
return 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
dv = null;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|