279 lines
9.8 KiB
C#
279 lines
9.8 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Text;
|
|||
|
using System.Data;
|
|||
|
using System.Threading;
|
|||
|
using ICommLayer;
|
|||
|
using DBFactory;
|
|||
|
using CommonClassLib;
|
|||
|
namespace SimensCP5611
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>CP5611<31><31>ʵ<EFBFBD><CAB5>Profibus<75><73><EFBFBD>߷<EFBFBD>ʽ<EFBFBD><CABD>ͨѶ<CDA8>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>Richard.Liu
|
|||
|
/// </summary>
|
|||
|
public class CSendDeviceOrder: ISendDeviceOrder
|
|||
|
{
|
|||
|
string _commLayerError;
|
|||
|
|
|||
|
public string CommLayerError
|
|||
|
{
|
|||
|
get { return _commLayerError; }
|
|||
|
set { _commLayerError = value; }
|
|||
|
}
|
|||
|
DBOperator dbo = new DBOperator();
|
|||
|
public CSendDeviceOrder()
|
|||
|
{
|
|||
|
dbo.Open();
|
|||
|
}
|
|||
|
//~CSendDeviceOrder()
|
|||
|
//{
|
|||
|
// dbo.Close();
|
|||
|
//}
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD>ͶѶ<CDB6><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
/// <param name="MessageIndex"><3E><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD></param>
|
|||
|
/// <param name="TaskIndex"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
/// <param name="Order"><3E>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
///<2F><><EFBFBD>浥<EFBFBD><E6B5A5><EFBFBD>죺
|
|||
|
///1-<2D><>λ
|
|||
|
///2-<2D><>ȡ
|
|||
|
///3-<2D><><EFBFBD><EFBFBD>
|
|||
|
///4-ȡ<><C8A1>
|
|||
|
///5-<2D>Ż<EFBFBD>
|
|||
|
///6-ȡ<>Ż<EFBFBD>
|
|||
|
///˫<>浥<EFBFBD><E6B5A5><EFBFBD>죺
|
|||
|
///1-<2D><>λ
|
|||
|
///2-<2D><>ȡ
|
|||
|
///3-<2D><><EFBFBD><EFBFBD>
|
|||
|
///4-<2D><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
|||
|
///5-<2D><><EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD>
|
|||
|
///6-<2D><><EFBFBD><EFBFBD>ȡ<EFBFBD>Ż<EFBFBD>
|
|||
|
///14-<2D>Ҳ<EFBFBD>ȡ<EFBFBD><C8A1>
|
|||
|
///15-<2D>Ҳ<EFBFBD><D2B2>Ż<EFBFBD>
|
|||
|
///16-<2D>Ҳ<EFBFBD>ȡ<EFBFBD>Ż<EFBFBD>
|
|||
|
///24-˫<><CBAB>ȡ<EFBFBD><C8A1>
|
|||
|
///25-˫<><CBAB><EFBFBD>Ż<EFBFBD>
|
|||
|
///26-˫<><CBAB>ȡ<EFBFBD>Ż<EFBFBD>
|
|||
|
///<2F><><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD>죺
|
|||
|
///1-<2D><>λ
|
|||
|
///2-<2D><>ȡ
|
|||
|
///3-<2D><><EFBFBD><EFBFBD>
|
|||
|
///4-<2D><>λȡ<CEBB><C8A1>
|
|||
|
///5-<2D><>λ<EFBFBD>Ż<EFBFBD>
|
|||
|
///6-<2D><>λȡ<CEBB>Ż<EFBFBD>
|
|||
|
///14-Զλȡ<CEBB><C8A1>
|
|||
|
///15-Զλ<D4B6>Ż<EFBFBD>
|
|||
|
///16-Զλȡ<CEBB>Ż<EFBFBD>
|
|||
|
/// <param name="DeviceIndex"><3E>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD></param>
|
|||
|
/// <param name="StartX"><3E><>ʼx<CABC><78><EFBFBD>꣬<EFBFBD><EAA3AC>-<2D>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
/// <param name="StartY"><3E><>ʼy<CABC><79><EFBFBD>꣬<EFBFBD><EAA3AC>-<2D>߶ȷ<DFB6><C8B7><EFBFBD></param>
|
|||
|
/// <param name="StartZ"><3E><>ʼz<CABC><7A><EFBFBD>꣬<EFBFBD><EAA3AC>-<2D><><EFBFBD><EFBFBD><EFBFBD>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壬1-<2D><><EFBFBD>࣬2-<2D>Ҳ<EFBFBD></param>
|
|||
|
/// <param name="EndX">Ŀ<><C4BF>x<EFBFBD><78><EFBFBD>꣬<EFBFBD><EAA3AC>-<2D>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
/// <param name="EndY">Ŀ<><C4BF>y<EFBFBD><79><EFBFBD>꣬<EFBFBD><EAA3AC>-<2D>߶ȷ<DFB6><C8B7><EFBFBD></param>
|
|||
|
/// <param name="EndZ">Ŀ<><C4BF>z<EFBFBD><7A><EFBFBD>꣬<EFBFBD><EAA3AC>-<2D><><EFBFBD><EFBFBD><EFBFBD>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壬1-<2D><><EFBFBD>࣬2-<2D>Ҳ<EFBFBD></param>
|
|||
|
/// <returns><3E><><EFBFBD>ͶѶ<CDB6><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD></returns>
|
|||
|
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int Order, int DeviceIndex, int StartX, int StartY, int StartZ, int EndX, int EndY, int EndZ)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
int[] _word = new int[10];
|
|||
|
byte[] _byte = new byte[20];
|
|||
|
byte[] _temp = new byte[2];
|
|||
|
_word[0] = 1;
|
|||
|
_word[1] = Order;
|
|||
|
_word[2] = TaskIndex;
|
|||
|
_word[3] = StartX;
|
|||
|
_word[4] = StartY;
|
|||
|
_word[5] = StartZ;
|
|||
|
_word[6] = EndX;
|
|||
|
_word[7] = EndY;
|
|||
|
_word[8] = EndZ;
|
|||
|
//////////////////////////
|
|||
|
|
|||
|
_word[9] = _word[0];
|
|||
|
for (int i = 1; i <= 8; i++)
|
|||
|
{
|
|||
|
_word[9] = _word[9] ^ _word[i];
|
|||
|
}
|
|||
|
for (int h = 0; h <= 9; h++)
|
|||
|
{
|
|||
|
_temp = CCarryConvert.GetByteFromInt16(Convert.ToUInt16(_word[h]));
|
|||
|
_byte[(2 * h)] = _temp[0];
|
|||
|
_byte[(2 * h + 1)] = _temp[1];
|
|||
|
}
|
|||
|
byte[] _RRword = new byte[12];
|
|||
|
int[] _Rword = new int[6];
|
|||
|
DataSet ds = dbo.ExceSQL("SELECT F_DeviceIndex, F_DBWAddress, F_DBWSendLength, F_DBWGetLength FROM T_Base_Device where F_DeviceIndex=" + DeviceIndex);
|
|||
|
DataView dv = ds.Tables[0].DefaultView;
|
|||
|
if (ds.Tables[0].DefaultView.Count > 0)
|
|||
|
{
|
|||
|
|
|||
|
bool rr= CSimensCP5611.DBwrite_CP5611(1, 1, Convert.ToInt16(dv[0]["F_DBWAddress"]), Convert.ToInt16(dv[0]["F_DBWSendLength"])*2, _byte);
|
|||
|
if (rr == false)
|
|||
|
{
|
|||
|
_commLayerError = "SimensCP5611.CSendDeviceOrder" + ":SendDeviceOrder---" + CSimensCP5611.ErrorsText;
|
|||
|
return false;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return true;
|
|||
|
}
|
|||
|
//Thread.Sleep(300);
|
|||
|
//_RRword = CSimensCP5611.DB_Read_CP5611(1, 2, Convert.ToInt16(dv[0]["F_DBWAddress"]), Convert.ToInt16(dv[0]["F_DBWGetLength"]));
|
|||
|
//if (_RRword == null)
|
|||
|
//{
|
|||
|
// _commLayerError = "SimensCP5611.CSendDeviceOrder" + ":SendDeviceOrder---" + CSimensCP5611.ErrorsText;
|
|||
|
// return false;
|
|||
|
//}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
//ds.Dispose();
|
|||
|
//for (int g = 0; g <= 5; g++)
|
|||
|
//{
|
|||
|
// _Rword[g] = _RRword[(2 * g)] * 256 + _RRword[(2 * g + 1)];
|
|||
|
//}
|
|||
|
//int _RXor = 0;
|
|||
|
//if (_Rword != null)
|
|||
|
//{
|
|||
|
// _RXor = _Rword[0];
|
|||
|
// for (int i = 1; i <= 4; i++)
|
|||
|
// {
|
|||
|
// _RXor = _RXor ^ _Rword[i];
|
|||
|
// }
|
|||
|
// //_Rword[0] == 2 &&
|
|||
|
// if (_Rword[2] == TaskIndex && _RXor == _Rword[5])//(<28><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>TaskIndex<65><78><EFBFBD><EFBFBD>ϢӦ<CFA2><D3A6>)
|
|||
|
// {
|
|||
|
// return true;
|
|||
|
// }
|
|||
|
// else
|
|||
|
// return false;
|
|||
|
//}
|
|||
|
//else
|
|||
|
//{
|
|||
|
// return false;
|
|||
|
//}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
_commLayerError = "SimensCP5611.CSendDeviceOrder" + ":SendDeviceOrder---" + ex.Message;
|
|||
|
return false;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD>ͶѶ<CDB6><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
/// <param name="MessageIndex"><3E><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD></param>
|
|||
|
/// <param name="TaskIndex"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
/// <param name="Order"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>
|
|||
|
///1-<2D><>λ
|
|||
|
///2-<2D><><EFBFBD>ӻ<EFBFBD>
|
|||
|
///3-<2D><><EFBFBD>ͻ<EFBFBD>
|
|||
|
///4-<2D>ҽӻ<D2BD>
|
|||
|
///5-<2D><><EFBFBD>ͻ<EFBFBD>
|
|||
|
///6-ֹͣ
|
|||
|
///7-<2D>˶<EFBFBD><CBB6><EFBFBD>1#λ<><CEBB>
|
|||
|
///8-<2D>˶<EFBFBD><CBB6><EFBFBD>2#λ<><CEBB>
|
|||
|
/// <20><>
|
|||
|
///<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>
|
|||
|
///1-<2D><><EFBFBD>⣨<EFBFBD><E2A3A8><EFBFBD><EFBFBD><EFBFBD>⣩
|
|||
|
/// 2-<2D><><EFBFBD>⣨<EFBFBD><E2A3A8><EFBFBD><EFBFBD><EFBFBD>⣩
|
|||
|
/// 3-<2D>ͻ<EFBFBD>
|
|||
|
/// 4-ֹͣ
|
|||
|
/// <param name="DeviceIndex"><3E>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD></param>
|
|||
|
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD></returns>
|
|||
|
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int Order, int DeviceIndex)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
byte[] _byte = new byte[8];
|
|||
|
byte[] _temp = new byte[2];
|
|||
|
int[] _word = new int[4];
|
|||
|
_word[0] = 1;
|
|||
|
_word[1] = Order;
|
|||
|
_word[2] = TaskIndex;
|
|||
|
_word[3] = _word[0];
|
|||
|
for (int i = 1; i <= 2; i++)
|
|||
|
{
|
|||
|
_word[3] = _word[3] ^ _word[i];
|
|||
|
}
|
|||
|
|
|||
|
for (int h = 0; h <= 3; h++)
|
|||
|
{
|
|||
|
_temp = CCarryConvert.GetByteFromInt16(Convert.ToUInt16(_word[h]));
|
|||
|
_byte[(2 * h)] = _temp[0];
|
|||
|
_byte[(2 * h + 1)] = _temp[1];
|
|||
|
}
|
|||
|
byte[] _RRword = new byte[8];
|
|||
|
int[] _Rword = new int[4];
|
|||
|
DataSet ds = dbo.ExceSQL("SELECT F_DeviceIndex, F_DBWAddress, F_DBWSendLength, F_DBWGetLength FROM T_Base_Device where F_DeviceIndex=" + DeviceIndex);
|
|||
|
DataView dv = ds.Tables[0].DefaultView;
|
|||
|
if (ds.Tables[0].DefaultView.Count > 0)
|
|||
|
{
|
|||
|
|
|||
|
bool rr= CSimensCP5611.DBwrite_CP5611(1, 1, Convert.ToInt16(dv[0]["F_DBWAddress"]), Convert.ToInt16(dv[0]["F_DBWSendLength"])*2, _byte);
|
|||
|
if (rr == false)
|
|||
|
{
|
|||
|
_commLayerError = "SimensCP5611.CSendDeviceOrder" + ":SendDeviceOrder---" + CSimensCP5611.ErrorsText;
|
|||
|
return false;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return true;
|
|||
|
}
|
|||
|
//Thread.Sleep(300);
|
|||
|
//_RRword = CSimensCP5611.DB_Read_CP5611(1, 2, Convert.ToInt16(dv[0]["F_DBWAddress"]), Convert.ToInt16(dv[0]["F_DBWGetLength"]));
|
|||
|
//if (_RRword == null)
|
|||
|
//{
|
|||
|
// _commLayerError = "SimensCP5611.CSendDeviceOrder" + ":SendDeviceOrder---" + CSimensCP5611.ErrorsText;
|
|||
|
// return false;
|
|||
|
//}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
//ds.Dispose();
|
|||
|
|
|||
|
//for (int g = 0; g <= 3; g++)
|
|||
|
//{
|
|||
|
// _Rword[g] = _RRword[(2 * g)] * 256 + _RRword[(2 * g + 1)];
|
|||
|
//}
|
|||
|
//int _RXor = 0;
|
|||
|
//if (_Rword != null)
|
|||
|
//{
|
|||
|
// _RXor = _Rword[0];
|
|||
|
// for (int i = 1; i <= 2; i++)
|
|||
|
// {
|
|||
|
// _RXor = _RXor ^ _Rword[i];
|
|||
|
// }
|
|||
|
// if (_Rword[0] == 2 && _Rword[2] == TaskIndex && _RXor == _Rword[3])//PLC<4C><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ(<28><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>TaskIndex<65><78><EFBFBD><EFBFBD>ϢӦ<CFA2><D3A6>)
|
|||
|
// {
|
|||
|
// return true;
|
|||
|
// }
|
|||
|
// else
|
|||
|
// return false;
|
|||
|
//}
|
|||
|
//else
|
|||
|
//{
|
|||
|
// return false;
|
|||
|
//}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
_commLayerError = "SimensCP5611.CSendDeviceOrder" + ":SendDeviceOrder---" + ex.Message;
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|