SCLS/SSWCS_JXDL(2019)/SimensMpi/CGetDeviceState.cs

203 lines
6.9 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.Data;
using CommonClassLib;
using ICommLayer;
using DBFactory;
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>豸״̬<D7B4><CCAC>
/// <20><><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>Richard.Liu
/// </summary>
public class CGetDeviceState:IGetDeviceState
{
DBOperator dbo = new DBOperator();
string _commLayerError;
public string CommLayerError
{
get { return _commLayerError; }
set { _commLayerError = value; }
}
public CGetDeviceState()
{
dbo.Open();
}
//~CGetDeviceState()
//{
// dbo.Close();
//}
/// <summary>
///<2F><><EFBFBD><EFBFBD>أ<EFBFBD> 0-<2D>޻<EFBFBD>
/// 1-<2D>л<EFBFBD>
///<2F><>1<EFBFBD><31>
///<2F><><EFBFBD>´<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><><D0B4>־λ
///1-д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///2-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
///ȷ<>ϰ<EFBFBD>ť<EFBFBD><C5A5>
///1-<2D>޻<EFBFBD>ȷ<EFBFBD><C8B7>
///2-<2D>л<EFBFBD>ȷ<EFBFBD><C8B7>
/// <09><>2<EFBFBD><32>
///<2F><><EFBFBD>´<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///<2F>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD><EFBFBD>
///1-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///<2F><><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
/// <20><><EFBFBD>󳵣<EFBFBD>
///1-<2D>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD>
///2-<2D>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
///3-ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
///4-<2D><>1#λ<><CEBB>
///5-<2D><>2#λ<><CEBB>
/// <20><>
///<2F><><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
/// <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>
///1-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///2-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///3-<2D>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
///4-ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
///<2F><><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
///ȷ<>ϰ<EFBFBD>ť<EFBFBD><C5A5>
///һ<><D2BB><EFBFBD><EFBFBD><E4BBAF>ֵ<EFBFBD><D6B5>ÿȷ<C3BF><C8B7>һ<EFBFBD>Σ<EFBFBD><CEA3><EFBFBD>ֵ<EFBFBD>һ<E4BBAF>Σ<EFBFBD><CEA3>Ա<EFBFBD>־һ<D6BE><D2BB>
///<2F>µ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAF>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>
///<2F><><EFBFBD><EFBFBD><E4BBAF>
///<2F><>3<EFBFBD><33> <20><><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///<2F><>4<EFBFBD><34> <20>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD><EFBFBD>
///<2F>յ<EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <20><><EFBFBD>󳵡<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
///ǰ<><C7B0><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ֵ
/// <20><><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD>Ժ󲿷<D4BA>ֻ<EFBFBD>ԶѶ<D4B6><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///<2F><>5<EFBFBD><35> <20>յ<EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD>ظ߶ȷ<DFB6><C8B7><EFBFBD><EFBFBD><EFBFBD>
///<2F><>6<EFBFBD><36> ǰ5<C7B0><35><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ֵ
/// </summary>
/// <param name="DeviceIndex"><3E><EFBFBD><E8B1B8><EFBFBD><EFBFBD></param>
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ɹ<EFBFBD><C9B9>󣬷<EFBFBD><F3A3ACB7><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϣ<EFBFBD>󷵻<EFBFBD>6<EFBFBD><36>4<EFBFBD><34><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>״̬</returns>
public int [] GetDeviceState(int DeviceIndex, int TaskIndex)
{
try
{
int[] _Rword = new int[6];
byte[] _RRword = new byte[200];
DataSet ds = dbo.ExceSQL("SELECT F_DeviceIndex,F_DeviceKindIndex, 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)
{
if (Convert.ToDecimal(dv[0]["F_DBWGetLength"]) > 1)
{
_RRword = CSimensCP5611.DB_Read_CP5611(1, 2, Convert.ToInt16(dv[0]["F_DBWAddress"]), Convert.ToInt16(dv[0]["F_DBWGetLength"])*2);
}
else//<2F><><EFBFBD><EFBFBD><E7BFAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>λ״̬bit1--bit16
{
int add = 0;
int Bit = Convert.ToInt16(Convert.ToDecimal(dv[0]["F_DBWGetLength"]) * 16) - 1;//ת<><D7AA><EFBFBD><EFBFBD>bit0--bit15
if (Bit > 7)
{
add = 1;
Bit = Bit - 8;
}
else
{
add = 0;
}
_RRword = CSimensCP5611.DB_Read_CP5611(1, 2, Convert.ToInt16(dv[0]["F_DBWAddress"])+add, 1, Bit);
_Rword[0] = _RRword[0];
_Rword[1] = 3;//3-<2D><><EFBFBD><EFBFBD><E2BFAA>״̬
_Rword[2] = TaskIndex;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
_Rword[3] = 0;
_Rword[4] = 0;
_Rword[5] = DeviceIndex;//<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return _Rword;
}
if (_RRword == null)
{
_commLayerError = "SimensCP5611.CGetDeviceState" + ":GetDeviceState---" + CSimensCP5611.ErrorsText;
return null;
}
}
else
{
return null;
}
for (int g = 0; g <= 5; g++)
{
_Rword[g] = _RRword[(2 * g)] * 256 + _RRword[(2 * g + 1)];
}
//ds.Dispose();
int _RXor = 0;
if (_Rword != null)
{
if (Convert.ToInt16(dv[0]["F_DeviceKindIndex"]) == 1)//<2F>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
_RXor = _Rword[0];
for (int i = 1; i <= 4; i++)
{
_RXor = _RXor ^ _Rword[i];
}
//_Rword[0] == 1 && PLC<4C><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
if (_Rword[2] == TaskIndex && _RXor == _Rword[5])//(<28><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>TaskIndex<65><78><EFBFBD><EFBFBD>ϢӦ<CFA2><D3A6>)
{
_Rword[5] = DeviceIndex;//<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (_Rword[1] == 0)
{
_Rword[1] = 2;//ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>ɿڱ<C9BF><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return _Rword;
}
else
return null;
}
else if (Convert.ToInt16(dv[0]["F_DeviceKindIndex"]) == 28)//<2F><><EFBFBD><EFBFBD>زɼ<D8B2><C9BC><EFBFBD>
{
int[] rr = new int[_RRword.GetUpperBound(0) + 1];
for (int i = _RRword.GetLowerBound(0); i <= _RRword.GetUpperBound(0); i++)
{
rr[i] = Convert.ToInt32(_RRword[i]);
}
return rr;
}
else//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
{
_RXor = _Rword[0];
for (int i = 1; i <= 2; i++)
{
_RXor = _RXor ^ _Rword[i];
}
//_Rword[0] == 1 && PLC<4C><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
if (_Rword[2] == TaskIndex && _RXor == _Rword[3])//(<28><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>TaskIndex<65><78><EFBFBD><EFBFBD>ϢӦ<CFA2><D3A6>)
{
_Rword[3] = 0;
_Rword[4] = 0;
_Rword[5] = DeviceIndex;//<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return _Rword;
}
else
return null;
}
}
else
{
return null;
}
}
catch (Exception ex)
{
_commLayerError = "SimensCP5611.CGetDeviceState" + ":GetDeviceState---" +ex.Message ;
return null;
}
}
}
}