1080 lines
42 KiB
C#
1080 lines
42 KiB
C#
|
using Opc;
|
|||
|
using Opc.Da;
|
|||
|
using RGD.Common;
|
|||
|
using RGD.DataService;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Text;
|
|||
|
|
|||
|
namespace RGD.OPCClient
|
|||
|
{
|
|||
|
public static class CCommonOPCClient
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>ί<EFBFBD><CEAF>
|
|||
|
public delegate void WimFrmNotify(int[] _RRword);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ί<EFBFBD>б<EFBFBD><D0B1><EFBFBD>
|
|||
|
public static WimFrmNotify _notifyer;
|
|||
|
|
|||
|
//public static DBOperator dbo = new DBOperator();
|
|||
|
private static RGD.Model.MDevice devinfo28;
|
|||
|
|
|||
|
private static int _connectCount = 0;
|
|||
|
|
|||
|
public static int ConnectCount
|
|||
|
{
|
|||
|
get { return CCommonOPCClient._connectCount; }
|
|||
|
set
|
|||
|
{
|
|||
|
if (value == 0)
|
|||
|
{
|
|||
|
_opcError = "";
|
|||
|
}
|
|||
|
CCommonOPCClient._connectCount = value;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static int[] _plcStates;
|
|||
|
|
|||
|
public static int[] PlcStates
|
|||
|
{
|
|||
|
get { return CCommonOPCClient._plcStates; }
|
|||
|
//set { CCommonOPCClient._plcStates = value; }
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><F3B1A8BE><EFBFBD>״̬<D7B4><CCAC>ϢӦ<CFA2><D3A6><EFBFBD>ڴ˽<DAB4><CBBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ͨ<EFBFBD><CDA8>ֵ<EFBFBD>仯<EFBFBD><E4BBAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵı<DAB5><C4B1><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
public static void OnDataChange(object subscriptionHandle, object requestHandle, ItemValueResult[] values)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
foreach (ItemValueResult item in values)
|
|||
|
{//<2F><><EFBFBD><EFBFBD>ÿһ<C3BF><D2BB>ItemValueResult
|
|||
|
if (item.ClientHandle == null)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
|
|||
|
continue;
|
|||
|
}
|
|||
|
//
|
|||
|
Array.Copy((Array)item.Value, _plcStates, _plcStates.GetLength(0));
|
|||
|
StringBuilder sb = new StringBuilder();
|
|||
|
foreach (int i in _plcStates)
|
|||
|
{
|
|||
|
sb.Append(i + ",");
|
|||
|
}
|
|||
|
LogUtil.WriteLog("", "OnDataChange<67>ص<EFBFBD>:" + sb.ToString());
|
|||
|
}
|
|||
|
|
|||
|
//kanbl <20>ص<EFBFBD>֪ͨ
|
|||
|
if (_notifyer != null)
|
|||
|
{
|
|||
|
if (values.Length <= 0 || values[0].Quality == Quality.Bad)
|
|||
|
{
|
|||
|
//kanbl
|
|||
|
System.Diagnostics.Trace.WriteLine(String.Format("OnDataChange values.Length <= 0 || values[0].Quality == Quality.Bad"));
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
byte[] itemnamevalue = new byte[(int)devinfo28.Dbw2Getlength];
|
|||
|
|
|||
|
Array.Copy((Array)values[0].Value, itemnamevalue, (int)devinfo28.Dbw2Getlength);
|
|||
|
|
|||
|
int[] _RRword = new int[(int)devinfo28.Dbw2Getlength];
|
|||
|
Array.Copy(itemnamevalue, _RRword, (int)devinfo28.Dbw2Getlength);
|
|||
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
_notifyer(_RRword);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
_opcError = "<22><>ȡOPC<50><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//WriteComplete<74>ص<EFBFBD>
|
|||
|
public static void OnWriteComplete(object requestHandle, Opc.IdentifiedResult[] values)
|
|||
|
{
|
|||
|
/*Console.WriteLine("<22><><EFBFBD><EFBFBD><EFBFBD>첽дname:{0},value:{1}", values[0].ItemName, values[0].GetType());
|
|||
|
if ((int)requestHandle == 2)
|
|||
|
Console.WriteLine("<22>¼<EFBFBD><C2BC>źž<C5BA><C5BE><EFBFBD>Ϊ{0}", requestHandle);*/
|
|||
|
}
|
|||
|
|
|||
|
private static string _PLCconnectionID = "S7:[S7 connection_1]";
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD><EFBFBD>PLC<4C><43><EFBFBD>ӵ<EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD>磺"S7:[S7 connection_1]"
|
|||
|
/// <20><><EFBFBD><EFBFBD>"S7:[@LOCALSERVER]"
|
|||
|
/// </summary>
|
|||
|
public static string PlcConnectionID
|
|||
|
{
|
|||
|
get { return CCommonOPCClient._PLCconnectionID; }
|
|||
|
set { CCommonOPCClient._PLCconnectionID = value; }
|
|||
|
}
|
|||
|
|
|||
|
private static string _opcError;
|
|||
|
private static bool _IfConnectOPCServer = false;
|
|||
|
private static string _hostname;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// OPC Server<65>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD>IP<49><50>ַ
|
|||
|
/// </summary>
|
|||
|
public static string Hostname
|
|||
|
{
|
|||
|
get { return CCommonOPCClient._hostname; }
|
|||
|
set { CCommonOPCClient._hostname = value; }
|
|||
|
}
|
|||
|
|
|||
|
private static string _progID;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// OPC Server<65>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>磺OPC.SimaticNET
|
|||
|
/// </summary>
|
|||
|
public static string ProgID
|
|||
|
{
|
|||
|
get { return CCommonOPCClient._progID; }
|
|||
|
set { CCommonOPCClient._progID = value; }
|
|||
|
}
|
|||
|
|
|||
|
public static string OpcError
|
|||
|
{
|
|||
|
get { return CCommonOPCClient._opcError; }
|
|||
|
set { CCommonOPCClient._opcError = value; }
|
|||
|
}
|
|||
|
|
|||
|
private static Opc.Da.Server m_server = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
private static Opc.Server[] servers;
|
|||
|
private static Opc.Da.Subscription subscription = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3A3A8B6><EFBFBD><EFBFBD>ߣ<EFBFBD>
|
|||
|
private static Opc.Da.SubscriptionState state = null;//<2F><><EFBFBD><EFBFBD><EFBFBD>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD>൱<EFBFBD><E0B5B1>OPC<50>淶<EFBFBD><E6B7B6><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|||
|
private static Opc.Da.Subscription _readSubscription = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3A3A8B6><EFBFBD><EFBFBD>ߣ<EFBFBD>
|
|||
|
private static Opc.Da.SubscriptionState _readstate = null;//<2F><><EFBFBD><EFBFBD><EFBFBD>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD>൱<EFBFBD><E0B5B1>OPC<50>淶<EFBFBD><E6B7B6><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|||
|
private static Opc.Da.Subscription _writeSubscription = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3A3A8B6><EFBFBD><EFBFBD>ߣ<EFBFBD>
|
|||
|
private static Opc.Da.SubscriptionState _writestate = null;//<2F><><EFBFBD><EFBFBD><EFBFBD>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD>൱<EFBFBD><E0B5B1>OPC<50>淶<EFBFBD><E6B7B6><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|||
|
private static Opc.Da.Subscription _tempSubscription = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3A3A8B6><EFBFBD><EFBFBD>ߣ<EFBFBD>
|
|||
|
private static Opc.Da.SubscriptionState _tempstate = null;//<2F><><EFBFBD><EFBFBD><EFBFBD>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD>൱<EFBFBD><E0B5B1>OPC<50>淶<EFBFBD><E6B7B6><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|||
|
|
|||
|
// static private Opc.IDiscovery m_discovery = new OpcCom.ServerEnumerator();//<2F><><EFBFBD><EFBFBD>ö<EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD>COM<4F><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľӿڣ<D3BF><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĴ<D0B5><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
private static Opc.IDiscovery m_discovery = new OpcCom.ServerEnumerator();//<2F><><EFBFBD><EFBFBD>ö<EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD>COM<4F><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľӿڣ<D3BF><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĴ<D0B5><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OPC<50><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
/// <param name="hostname"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static List<string> GetOpcServers(string hostname)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
servers = m_discovery.GetAvailableServers(Specification.COM_DA_20, hostname, null);
|
|||
|
//daver<65><72>ʾ<EFBFBD><CABE><EFBFBD>ݴ<EFBFBD>ȡ<EFBFBD>淶<EFBFBD>汾<EFBFBD><E6B1BE>Specification.COMDA_20<32><30><EFBFBD><EFBFBD>2.0<EFBFBD>汾<EFBFBD><EFBFBD>
|
|||
|
//hostΪ<74><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>null<6C><6C>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ҫ<EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD>簲ȫ<E7B0B2><C8AB>֤<EFBFBD><D6A4>
|
|||
|
if (servers != null)
|
|||
|
{
|
|||
|
List<string> ser = new List<string>(); ;
|
|||
|
foreach (Opc.Da.Server server in servers)
|
|||
|
{
|
|||
|
ser.Add(server.Name);
|
|||
|
}
|
|||
|
return ser;
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
_opcError = "<22><>ȡOPC<50><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OPC<50><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
/// <param name="hostname"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
/// <param name="ProgID">OPC<50><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>磺"OPC.SimaticNET"</param>
|
|||
|
/// <returns></returns>
|
|||
|
public static bool ConnectOPCServer(string hostname, string ProgID)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
GetOpcServers(hostname);
|
|||
|
//if (ProgID.Contains(hostname) == false)
|
|||
|
//{
|
|||
|
// ProgID = hostname + "." + ProgID;
|
|||
|
//}
|
|||
|
|
|||
|
foreach (Opc.Da.Server server in servers)
|
|||
|
{
|
|||
|
//server<65><72>Ϊ<EFBFBD><CEAA>Ҫ<EFBFBD><D2AA><EFBFBD>ӵ<EFBFBD>OPC<50><43><EFBFBD>ݴ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (String.Compare(server.Name, ProgID, true) == 0)//Ϊtrue<75><65><EFBFBD>Դ<EFBFBD>Сд
|
|||
|
{
|
|||
|
m_server = server;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD>
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
//<2F><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (m_server != null)//<2F>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
m_server.Connect();
|
|||
|
_IfConnectOPCServer = true;
|
|||
|
CreateItemGroup();
|
|||
|
return true;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
_opcError = "<22><><EFBFBD><EFBFBD>OPC<50><43><EFBFBD>ݴ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD><EFBFBD>OPC<50>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
/// <param name="groupname">OPC<50>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
/// <param name="itemnames">ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>"S7:[S7 connection_1]DB1,INT1"</param>
|
|||
|
/// <returns></returns>
|
|||
|
public static Opc.Da.Subscription CreateItemGroup(string groupname, string[] itemnames)
|
|||
|
{
|
|||
|
string[] itemName;
|
|||
|
//<2F><><EFBFBD><EFBFBD>item<65>б<EFBFBD>
|
|||
|
Item[] items;
|
|||
|
ItemResult[] irs;
|
|||
|
try
|
|||
|
{
|
|||
|
if (_IfConnectOPCServer == false)
|
|||
|
{
|
|||
|
if (ConnectOPCServer(_hostname, _progID) == false) return null;
|
|||
|
}
|
|||
|
//<2F>趨<EFBFBD><E8B6A8>״̬
|
|||
|
state = new Opc.Da.SubscriptionState();//<2F>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD>൱<EFBFBD><E0B5B1>OPC<50>淶<EFBFBD><E6B7B6><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|||
|
state.Name = groupname;//<2F><><EFBFBD><EFBFBD>
|
|||
|
state.ServerHandle = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
state.ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
state.Active = true;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>顣
|
|||
|
state.UpdateRate = 100;//ˢ<><CBA2>Ƶ<EFBFBD><C6B5>Ϊ100<30><30><EFBFBD>롣
|
|||
|
state.Deadband = 0;// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊ0ʱ<30><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD>ݱ仯<DDB1><E4BBAF>֪ͨ<CDA8>顣
|
|||
|
state.Locale = null;//<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
subscription = (Opc.Da.Subscription)m_server.CreateSubscription(state);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>Item<65>б<EFBFBD>
|
|||
|
//<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϊ:{Byte,Byte,Char,Short,String,Word,Boolean}
|
|||
|
itemName = itemnames;//{ "S7:[S7 connection_1]DB1,INT1", "S7:[@LOCALSERVER]DB1,INT20", "S7:[@LOCALSERVER]DB1,INT30", "S7:[@LOCALSERVER]DB1,INT50" };
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>item<65>б<EFBFBD>
|
|||
|
items = new Item[itemName.Length];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC>item
|
|||
|
int i;
|
|||
|
for (i = 0; i < items.Length; i++)//item<65><6D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֵ
|
|||
|
{
|
|||
|
items[i] = new Item();//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[i].ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[i].ItemPath = null; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
|||
|
items[i].ItemName = itemName[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>֡<EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>Item
|
|||
|
irs = subscription.AddItems(items);
|
|||
|
return subscription;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
//{
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
//}
|
|||
|
_opcError = "<22><><EFBFBD><EFBFBD>OPC<50><43>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
return null;
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
itemName = null;
|
|||
|
//<2F><><EFBFBD><EFBFBD>item<65>б<EFBFBD>
|
|||
|
items = null;
|
|||
|
irs = null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD><EFBFBD>OPC<50>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
/// <param name="groupname">OPC<50>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static Opc.Da.Subscription CreateItemGroup(string groupname)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (_IfConnectOPCServer == false)
|
|||
|
{
|
|||
|
if (ConnectOPCServer(_hostname, _progID) == false) return null;
|
|||
|
}
|
|||
|
//<2F>趨<EFBFBD><E8B6A8>״̬
|
|||
|
state = new Opc.Da.SubscriptionState();//<2F>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD>൱<EFBFBD><E0B5B1>OPC<50>淶<EFBFBD><E6B7B6><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|||
|
state.Name = groupname;//<2F><><EFBFBD><EFBFBD>
|
|||
|
state.ServerHandle = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
state.ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
state.Active = true;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>顣
|
|||
|
state.UpdateRate = 100;//ˢ<><CBA2>Ƶ<EFBFBD><C6B5>Ϊ100<30><30><EFBFBD>롣
|
|||
|
state.Deadband = 0;// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊ0ʱ<30><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD>ݱ仯<DDB1><E4BBAF>֪ͨ<CDA8>顣
|
|||
|
state.Locale = null;//<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
subscription = (Opc.Da.Subscription)m_server.CreateSubscription(state);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
return subscription;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
//{
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
//}
|
|||
|
_opcError = "<22><><EFBFBD><EFBFBD>OPC<50><43>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD>飺read<61><64>write<74><65><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>д<EFBFBD><D0B4>tempGroup
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public static void CreateItemGroup()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
//if (_IfConnectOPCServer == false)
|
|||
|
//{
|
|||
|
// if (ConnectOPCServer(_hostname, _progID) == false) return ;
|
|||
|
//}
|
|||
|
|
|||
|
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><EFBFBD>
|
|||
|
|
|||
|
devinfo28 = BaseDeviceService.GetDeviceInfo(65534);
|
|||
|
|
|||
|
//<2F>趨<EFBFBD><E8B6A8>ȡ<EFBFBD><C8A1>״̬
|
|||
|
_readstate = new Opc.Da.SubscriptionState();//<2F>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD>൱<EFBFBD><E0B5B1>OPC<50>淶<EFBFBD><E6B7B6><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|||
|
_readstate.Name = "readopc";//<2F><><EFBFBD><EFBFBD>
|
|||
|
_readstate.ServerHandle = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
_readstate.ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
_readstate.Active = true;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>顣
|
|||
|
_readstate.UpdateRate = 5000;//ˢ<><CBA2>Ƶ<EFBFBD><C6B5>Ϊ100<30><30><EFBFBD>롣
|
|||
|
_readstate.Deadband = 0;// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊ0ʱ<30><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD>ݱ仯<DDB1><E4BBAF>֪ͨ<CDA8>顣
|
|||
|
_readstate.Locale = null;//<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
//<2F><><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>
|
|||
|
_readSubscription = (Opc.Da.Subscription)m_server.CreateSubscription(_readstate);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
|||
|
//20100221
|
|||
|
string[] itemName = new string[1] { _PLCconnectionID + "DB2,byte" + devinfo28.Dbw2Address.ToString() + "," + ((int)devinfo28.Dbw2Getlength).ToString() + "" };//{ "S7:[S7 connection_1]DB1,INT1", "S7:[@LOCALSERVER]DB1,INT20", "S7:[@LOCALSERVER]DB1,INT30", "S7:[@LOCALSERVER]DB1,INT50" };
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>item<65>б<EFBFBD>
|
|||
|
Item[] items = new Item[itemName.Length];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC>item
|
|||
|
int i;
|
|||
|
for (i = 0; i < items.Length; i++)//item<65><6D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֵv
|
|||
|
{
|
|||
|
items[i] = new Item();//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[i].ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[i].ItemPath = null; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
|||
|
items[i].ItemName = itemName[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>֡<EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD>Ӷ<EFBFBD>Item
|
|||
|
ItemResult[] irs = _readSubscription.AddItems(items);
|
|||
|
_plcStates = new int[System.Convert.ToInt32(devinfo28.Dbw2Getlength)];
|
|||
|
_readSubscription.DataChanged += new Opc.Da.DataChangedEventHandler(OnDataChange);
|
|||
|
|
|||
|
#endregion <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><EFBFBD>
|
|||
|
|
|||
|
//<2F>趨д<E8B6A8><D0B4>״̬
|
|||
|
_writestate = new Opc.Da.SubscriptionState();//<2F>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD>൱<EFBFBD><E0B5B1>OPC<50>淶<EFBFBD><E6B7B6><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|||
|
_writestate.Name = "writeopc";//<2F><><EFBFBD><EFBFBD>
|
|||
|
_writestate.ServerHandle = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
_writestate.ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
_writestate.Active = true;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>顣
|
|||
|
_writestate.UpdateRate = 100;//ˢ<><CBA2>Ƶ<EFBFBD><C6B5>Ϊ100<30><30><EFBFBD>롣
|
|||
|
_writestate.Deadband = 0;// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊ0ʱ<30><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD>ݱ仯<DDB1><E4BBAF>֪ͨ<CDA8>顣
|
|||
|
_writestate.Locale = null;//<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
|||
|
_writeSubscription = (Opc.Da.Subscription)m_server.CreateSubscription(_writestate);//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
//<2F>趨<EFBFBD><E8B6A8>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>״̬
|
|||
|
_tempstate = new Opc.Da.SubscriptionState();//<2F>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD>൱<EFBFBD><E0B5B1>OPC<50>淶<EFBFBD><E6B7B6><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|||
|
_tempstate.Name = "opctemp";//<2F><><EFBFBD><EFBFBD>
|
|||
|
_tempstate.ServerHandle = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
_tempstate.ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
_tempstate.Active = true;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>顣
|
|||
|
_tempstate.UpdateRate = 100;//ˢ<><CBA2>Ƶ<EFBFBD><C6B5>Ϊ100<30><30><EFBFBD>롣
|
|||
|
_tempstate.Deadband = 0;// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊ0ʱ<30><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD>ݱ仯<DDB1><E4BBAF>֪ͨ<CDA8>顣
|
|||
|
_tempstate.Locale = null;//<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
|||
|
_tempSubscription = (Opc.Da.Subscription)m_server.CreateSubscription(_tempstate);//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
//{
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
//}
|
|||
|
_opcError = "<22><><EFBFBD><EFBFBD>OPC<50><43>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD><EFBFBD>OPC<50>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
/// <param name="plcConnectionID"><3E><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>PLC<4C><43><EFBFBD>ӵı<D3B5>ʶ</param>
|
|||
|
/// <param name="groupname">OPC<50>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
/// <param name="itemnames">ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>"DB1,INT1"</param>
|
|||
|
/// <returns></returns>
|
|||
|
public static Opc.Da.Subscription CreateItemGroup(string plcConnectionID, string groupname, string[] itemnames)
|
|||
|
{
|
|||
|
string[] itemName;
|
|||
|
//<2F><><EFBFBD><EFBFBD>item<65>б<EFBFBD>
|
|||
|
Item[] items;
|
|||
|
ItemResult[] irs;
|
|||
|
try
|
|||
|
{
|
|||
|
if (_IfConnectOPCServer == false)
|
|||
|
{
|
|||
|
if (ConnectOPCServer(_hostname, _progID) == false) return null;
|
|||
|
}
|
|||
|
//<2F>趨<EFBFBD><E8B6A8>״̬
|
|||
|
state = new Opc.Da.SubscriptionState();//<2F>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD>൱<EFBFBD><E0B5B1>OPC<50>淶<EFBFBD><E6B7B6><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|||
|
state.Name = groupname;//<2F><><EFBFBD><EFBFBD>
|
|||
|
state.ServerHandle = null;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
state.ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
state.Active = true;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>顣
|
|||
|
state.UpdateRate = 100;//ˢ<><CBA2>Ƶ<EFBFBD><C6B5>Ϊ100<30><30><EFBFBD>롣
|
|||
|
state.Deadband = 0;// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊ0ʱ<30><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD>ݱ仯<DDB1><E4BBAF>֪ͨ<CDA8>顣
|
|||
|
state.Locale = null;//<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
subscription = (Opc.Da.Subscription)m_server.CreateSubscription(state);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>Item<65>б<EFBFBD>
|
|||
|
//<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϊ:{Byte,Byte,Char,Short,String,Word,Boolean}
|
|||
|
itemName = itemnames;//{ "S7:[S7 connection_1]DB1,INT1", "S7:[@LOCALSERVER]DB1,INT20", "S7:[@LOCALSERVER]DB1,INT30", "S7:[@LOCALSERVER]DB1,INT50" };
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>item<65>б<EFBFBD>
|
|||
|
items = new Item[itemName.Length];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC>item
|
|||
|
int i;
|
|||
|
for (i = 0; i < items.Length; i++)//item<65><6D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֵ
|
|||
|
{
|
|||
|
items[i] = new Item();//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[i].ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[i].ItemPath = null; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
|||
|
items[i].ItemName = plcConnectionID + itemName[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>֡<EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>Item
|
|||
|
irs = subscription.AddItems(items);
|
|||
|
return subscription;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
//{
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
//}
|
|||
|
_opcError = "<22><><EFBFBD><EFBFBD>OPC<50><43>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
return null;
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
itemName = null;
|
|||
|
//<2F><><EFBFBD><EFBFBD>item<65>б<EFBFBD>
|
|||
|
items = null;
|
|||
|
irs = null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// ͬ<><CDAC><EFBFBD><EFBFBD>ȡȫ<C8A1><C8AB>OPC<50><43><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>List<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+ ":" +<2B><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|||
|
/// </summary>
|
|||
|
/// <param name="subscription">OPC<50><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static List<string> SyncReadAllItems(Opc.Da.Subscription subscription)
|
|||
|
{
|
|||
|
ItemValueResult[] values;
|
|||
|
List<string> itemnamevalue;
|
|||
|
try
|
|||
|
{
|
|||
|
if (_IfConnectOPCServer == false)
|
|||
|
{
|
|||
|
if (ConnectOPCServer(_hostname, _progID) == false) return null;
|
|||
|
}
|
|||
|
itemnamevalue = new List<string>();
|
|||
|
//ע<><D7A2><EFBFBD>ص<EFBFBD><D8B5>¼<EFBFBD>
|
|||
|
//subscription.DataChanged += new Opc.Da.DataChangedEventHandler(OnDataChange);
|
|||
|
|
|||
|
//<2F><><EFBFBD>²<EFBFBD><C2B2><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>
|
|||
|
//<2F><><EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
values = subscription.Read(subscription.Items);
|
|||
|
foreach (ItemValueResult value in values)
|
|||
|
{
|
|||
|
itemnamevalue.Add(value.ItemName + ":" + value.Value);
|
|||
|
}
|
|||
|
//subscription.RemoveItems(subscription.Items);
|
|||
|
//subscription.Dispose();
|
|||
|
return itemnamevalue;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
//{
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
//}
|
|||
|
_opcError = "ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
return null;
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
values = null;
|
|||
|
itemnamevalue = null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩֵ<C7A9><D6B5><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
/// <param name="itemnames"><3E><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static List<string> SyncReadAllItems(string[] itemnames)
|
|||
|
{
|
|||
|
Subscription subs;
|
|||
|
List<string> itemnamevalue;
|
|||
|
ItemValueResult[] values;
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
if (_IfConnectOPCServer == false)
|
|||
|
{
|
|||
|
if (ConnectOPCServer(_hostname, _progID) == false) return null;
|
|||
|
}
|
|||
|
subs = CreateItemGroup(_PLCconnectionID, Guid.NewGuid().ToString(), itemnames);
|
|||
|
itemnamevalue = new List<string>();
|
|||
|
|
|||
|
values = subs.Read(subs.Items);
|
|||
|
foreach (ItemValueResult value in values)
|
|||
|
{
|
|||
|
itemnamevalue.Add(System.Convert.ToString(value.Value));
|
|||
|
}
|
|||
|
subs.Dispose();
|
|||
|
return itemnamevalue;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
//{
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
//}
|
|||
|
_opcError = "ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
return null;
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
itemnamevalue = null;
|
|||
|
values = null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
/// <param name="itemname"><3E><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static string SyncReadItemValue(string itemname)
|
|||
|
{
|
|||
|
string[] items = new string[1] { itemname };
|
|||
|
Subscription subs = CreateItemGroup(_PLCconnectionID, Guid.NewGuid().ToString(), items);
|
|||
|
string itemnamevalue = "";
|
|||
|
ItemValueResult[] values = subs.Read(subs.Items);
|
|||
|
try
|
|||
|
{
|
|||
|
if (_IfConnectOPCServer == false)
|
|||
|
{
|
|||
|
if (ConnectOPCServer(_hostname, _progID) == false) return null;
|
|||
|
}
|
|||
|
|
|||
|
if (values.Length > 0)
|
|||
|
{
|
|||
|
if (values[0].Value != null)
|
|||
|
{
|
|||
|
itemnamevalue = values[0].Value.ToString();
|
|||
|
}
|
|||
|
}
|
|||
|
subs.RemoveItems(subs.Items);
|
|||
|
subs.Dispose();
|
|||
|
return itemnamevalue;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
//{
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
//}
|
|||
|
_opcError = "ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
return null;
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
items = null;
|
|||
|
subs = null;
|
|||
|
itemnamevalue = null;
|
|||
|
values = null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//20100221
|
|||
|
|
|||
|
#region ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>дOPC
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>_readSubscription<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public static byte[] SyncReadAllItems()
|
|||
|
{
|
|||
|
ItemValueResult[] values;
|
|||
|
byte[] itemnamevalue;
|
|||
|
try
|
|||
|
{
|
|||
|
if (_IfConnectOPCServer == false)
|
|||
|
{
|
|||
|
if (ConnectOPCServer(_hostname, _progID) == false) return null;
|
|||
|
}
|
|||
|
//List<string> itemnamevalue = new List<string>();
|
|||
|
//ע<><D7A2><EFBFBD>ص<EFBFBD><D8B5>¼<EFBFBD>
|
|||
|
//subscription.DataChanged += new Opc.Da.DataChangedEventHandler(OnDataChange);
|
|||
|
|
|||
|
//<2F><><EFBFBD>²<EFBFBD><C2B2><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>
|
|||
|
//<2F><><EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (ConnectCount > 3)
|
|||
|
{
|
|||
|
_opcError = "ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>OPC Serverû<72><C3BB><EFBFBD>ӵ<EFBFBD>PLC<4C><43><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>!<21><><EFBFBD>ȹر<C8B9><D8B1><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6>·<EFBFBD><C2B7>ȷ<EFBFBD>Ϻ<EFBFBD><CFBA><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>";
|
|||
|
return null;
|
|||
|
}
|
|||
|
values = _readSubscription.Read(_readSubscription.Items);
|
|||
|
if (values.Length <= 0)
|
|||
|
{
|
|||
|
_opcError = "ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>OPC Serverû<72><C3BB><EFBFBD>ӵ<EFBFBD>PLC!";
|
|||
|
return null;
|
|||
|
}
|
|||
|
if (values[0].Quality == Quality.Bad)
|
|||
|
{
|
|||
|
ConnectCount++;
|
|||
|
_opcError = "ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>OPC Serverû<72><C3BB><EFBFBD>ӵ<EFBFBD>PLC!";
|
|||
|
return null;
|
|||
|
}
|
|||
|
itemnamevalue = new byte[(int)devinfo28.Dbw2Getlength];
|
|||
|
|
|||
|
Array.Copy((Array)values[0].Value, itemnamevalue, (int)devinfo28.Dbw2Getlength);
|
|||
|
//subscription.RemoveItems(subscription.Items);
|
|||
|
//subscription.Dispose();
|
|||
|
return itemnamevalue;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
//{
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
//}
|
|||
|
_opcError = "ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
return null;
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
itemnamevalue = null;
|
|||
|
values = null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20>Ӽ<EFBFBD><D3BC><EFBFBD>ָ<EFBFBD><D6B8>OPC<50><43>ǩ<EFBFBD><C7A9>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>_writeSubscription<6F>飩<EFBFBD><E9A3A9><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4>
|
|||
|
/// </summary>
|
|||
|
/// <param name="itemnames"></param>
|
|||
|
/// <param name="itemvalue"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static bool SyncWriteAllItemValue(string[] itemnames, string[] itemvalue)
|
|||
|
{
|
|||
|
Item[] items;
|
|||
|
ItemValue[] itemvalues;
|
|||
|
IdentifiedResult[] ir;
|
|||
|
try
|
|||
|
{
|
|||
|
if (_IfConnectOPCServer == false)
|
|||
|
{
|
|||
|
if (ConnectOPCServer(_hostname, _progID) == false) return false;
|
|||
|
}
|
|||
|
if (ConnectCount > 1)
|
|||
|
{
|
|||
|
_opcError = "ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>OPC Serverû<72><C3BB><EFBFBD>ӵ<EFBFBD>PLC<4C><43><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>!<21><><EFBFBD>ȹر<C8B9><D8B1><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6>·<EFBFBD><C2B7>ȷ<EFBFBD>Ϻ<EFBFBD><CFBA><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>";
|
|||
|
return false;
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD>item<65>б<EFBFBD>
|
|||
|
items = new Item[itemnames.Length];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC>item
|
|||
|
int i;
|
|||
|
for (i = 0; i < items.Length; i++)//item<65><6D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֵ
|
|||
|
{
|
|||
|
items[i] = new Item();//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[i].ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[i].ItemPath = null; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
|||
|
items[i].ItemName = _PLCconnectionID + itemnames[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>֡<EFBFBD>
|
|||
|
}
|
|||
|
_writeSubscription.AddItems(items);
|
|||
|
if (_writeSubscription.Items.Length==8)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
itemvalues = new ItemValue[_writeSubscription.Items.Length];
|
|||
|
for (int ii = 0; ii < _writeSubscription.Items.Length; ii++)
|
|||
|
{
|
|||
|
itemvalues[ii] = new ItemValue((ItemIdentifier)_writeSubscription.Items[ii]);
|
|||
|
itemvalues[ii].Value = itemvalue[ii];
|
|||
|
}
|
|||
|
|
|||
|
ir = _writeSubscription.Write(itemvalues);
|
|||
|
|
|||
|
_writeSubscription.RemoveItems(_writeSubscription.Items);
|
|||
|
//_writeSubscription.Dispose();
|
|||
|
//GC.Collect();
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
//{
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
//}
|
|||
|
_opcError = "ͬ<><CDAC>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
return false;
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
items = null;
|
|||
|
itemvalues = null;
|
|||
|
ir = null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>byte<74><65><EFBFBD><EFBFBD>20110515 һ<>Զ<EFBFBD>д<EFBFBD><D0B4>
|
|||
|
/// </summary>
|
|||
|
/// <param name="itemnames"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ע<>⣺ֻ<E2A3BA><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
/// <param name="itemvalue">Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>byte<74><65><EFBFBD><EFBFBD></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static bool SyncWriteAllItemValue(string[] itemnames, byte[] itemvalue)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (_IfConnectOPCServer == false)
|
|||
|
{
|
|||
|
if (ConnectOPCServer(_hostname, _progID) == false) return false;
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD>item<65>б<EFBFBD>
|
|||
|
Item[] items = new Item[itemnames.Length];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC>item
|
|||
|
int i;
|
|||
|
for (i = 0; i < items.Length; i++)//item<65><6D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֵ
|
|||
|
{
|
|||
|
items[0] = new Item();//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[0].ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[0].ItemPath = null; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
|||
|
items[0].ItemName = _PLCconnectionID + itemnames[0]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>֡<EFBFBD>
|
|||
|
}
|
|||
|
_writeSubscription.AddItems(items);
|
|||
|
ItemValue[] itemvalues = new ItemValue[itemnames.Length];
|
|||
|
for (int ii = 0; ii < itemnames.Length; ii++)//ii<69><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
|||
|
{
|
|||
|
itemvalues[ii] = new ItemValue((ItemIdentifier)_writeSubscription.Items[ii]);
|
|||
|
itemvalues[ii].Value = itemvalue;//<2F><><EFBFBD><EFBFBD>object<63><74><EFBFBD><EFBFBD>20110515
|
|||
|
}
|
|||
|
|
|||
|
IdentifiedResult[] ir = _writeSubscription.Write(itemvalues);
|
|||
|
|
|||
|
_writeSubscription.RemoveItems(_writeSubscription.Items);
|
|||
|
//_writeSubscription.Dispose();
|
|||
|
GC.Collect();
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
//{
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
//}
|
|||
|
_opcError = "ͬ<><CDAC>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static bool SyncWriteAllItemValue(StringBuilder[] itemnames, StringBuilder[] itemvalue)
|
|||
|
{
|
|||
|
Item[] items;
|
|||
|
ItemValue[] itemvalues;
|
|||
|
IdentifiedResult[] ir;
|
|||
|
try
|
|||
|
{
|
|||
|
if (_IfConnectOPCServer == false)
|
|||
|
{
|
|||
|
if (ConnectOPCServer(_hostname, _progID) == false) return false;
|
|||
|
}
|
|||
|
if (ConnectCount > 1)
|
|||
|
{
|
|||
|
_opcError = "ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>OPC Serverû<72><C3BB><EFBFBD>ӵ<EFBFBD>PLC<4C><43><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>!<21><><EFBFBD>ȹر<C8B9><D8B1><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6>·<EFBFBD><C2B7>ȷ<EFBFBD>Ϻ<EFBFBD><CFBA><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>";
|
|||
|
return false;
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD>item<65>б<EFBFBD>
|
|||
|
items = new Item[itemnames.Length];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC>item
|
|||
|
int i;
|
|||
|
for (i = 0; i < items.Length; i++)//item<65><6D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֵ
|
|||
|
{
|
|||
|
items[i] = new Item();//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[i].ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[i].ItemPath = null; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
|||
|
items[i].ItemName = itemnames[i].ToString(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>֡<EFBFBD>
|
|||
|
}
|
|||
|
_writeSubscription.AddItems(items);
|
|||
|
itemvalues = new ItemValue[_writeSubscription.Items.Length];
|
|||
|
for (int ii = 0; ii < _writeSubscription.Items.Length; ii++)
|
|||
|
{
|
|||
|
itemvalues[ii] = new ItemValue((ItemIdentifier)_writeSubscription.Items[ii]);
|
|||
|
itemvalues[ii].Value = itemvalue[ii];
|
|||
|
}
|
|||
|
|
|||
|
ir = _writeSubscription.Write(itemvalues);
|
|||
|
|
|||
|
_writeSubscription.RemoveItems(_writeSubscription.Items);
|
|||
|
//_writeSubscription.Dispose();
|
|||
|
//GC.Collect();
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
//{
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
//}
|
|||
|
_opcError = "ͬ<><CDAC>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
return false;
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
items = null;
|
|||
|
itemvalues = null;
|
|||
|
ir = null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// <20>Ӽ<EFBFBD><D3BC><EFBFBD>ȡָ<C8A1><D6B8>OPC<50><43>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>_tempSubscription<6F>飩
|
|||
|
/// </summary>
|
|||
|
/// <param name="itemnames"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static object[] SyncReadItemValues(string[] itemnames)
|
|||
|
{
|
|||
|
Item[] items;
|
|||
|
ItemResult[] irs;
|
|||
|
ItemValueResult[] values;
|
|||
|
object[] itemnamevalue;
|
|||
|
try
|
|||
|
{
|
|||
|
//string ss; string ss1;
|
|||
|
//ss = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
|
|||
|
if (_IfConnectOPCServer == false)
|
|||
|
{
|
|||
|
if (ConnectOPCServer(_hostname, _progID) == false) return null;
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD>item<65>б<EFBFBD>
|
|||
|
items = new Item[itemnames.Length];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC>item
|
|||
|
int i;
|
|||
|
for (i = 0; i < items.Length; i++)//item<65><6D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֵ
|
|||
|
{
|
|||
|
items[i] = new Item();//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[i].ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
items[i].ItemPath = null; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
|||
|
items[i].ItemName = _PLCconnectionID + itemnames[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>֡<EFBFBD>
|
|||
|
}
|
|||
|
irs = _tempSubscription.AddItems(items);
|
|||
|
|
|||
|
values = _tempSubscription.Read(_tempSubscription.Items);
|
|||
|
if (values[0].Quality == Quality.Bad)
|
|||
|
{
|
|||
|
_opcError = "ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>OPC Serverû<72><C3BB><EFBFBD>ӵ<EFBFBD>PLC!";
|
|||
|
return null;
|
|||
|
}
|
|||
|
itemnamevalue = new object[values.Length];
|
|||
|
int k = 0;
|
|||
|
foreach (ItemValueResult value in values)
|
|||
|
{
|
|||
|
itemnamevalue[k] = value.Value;
|
|||
|
k++;
|
|||
|
}
|
|||
|
//Array.Copy(values.[0].Value, itemnamevalue, values.Length);
|
|||
|
_tempSubscription.RemoveItems(_tempSubscription.Items);
|
|||
|
//_tempSubscription.Dispose();
|
|||
|
//GC.Collect();
|
|||
|
//ss1 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
|
|||
|
return itemnamevalue;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
//{
|
|||
|
_IfConnectOPCServer = false;
|
|||
|
//}
|
|||
|
_opcError = "ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
return null;
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
items = null;
|
|||
|
irs = null;
|
|||
|
values = null;
|
|||
|
itemnamevalue = null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>дOPC
|
|||
|
|
|||
|
//20100221
|
|||
|
//#region <20>Ӽ<EFBFBD>ͬ<EFBFBD><CDAC>д<EFBFBD><D0B4><EFBFBD>첽<EFBFBD><ECB2BD>OPC
|
|||
|
//static byte[] AsyncReadAllItemNameValue= new byte[(int)devinfo28.Dbw2Getlength];
|
|||
|
//static bool AsyncReadOK=false ;
|
|||
|
///// <summary>
|
|||
|
///// <20>Ӽ<EFBFBD><D3BC>첽<EFBFBD><ECB2BD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>_readSubscription<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
///// </summary>
|
|||
|
///// <returns></returns>
|
|||
|
//public static void AsyncReadAllItems()
|
|||
|
//{
|
|||
|
// try
|
|||
|
// {
|
|||
|
// if (_IfConnectOPCServer == false)
|
|||
|
// {
|
|||
|
// if (ConnectOPCServer(_hostname, _progID) == false) return ;
|
|||
|
// }
|
|||
|
|
|||
|
// IRequest quest=null ;
|
|||
|
// _readSubscription.Read(_readSubscription.Items, Guid.NewGuid().ToString(), OnReadComplete,out quest);
|
|||
|
|
|||
|
// }
|
|||
|
// catch (Exception ex)
|
|||
|
// {
|
|||
|
// //if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
// //{
|
|||
|
// _IfConnectOPCServer = false;
|
|||
|
// //}
|
|||
|
// _opcError = "<22>첽<EFBFBD><ECB2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
// AsyncReadOK = false;
|
|||
|
// return ;
|
|||
|
// }
|
|||
|
// finally
|
|||
|
// {
|
|||
|
// }
|
|||
|
//}
|
|||
|
///// <summary>
|
|||
|
///// <20>Ӽ<EFBFBD><D3BC><EFBFBD>ָ<EFBFBD><D6B8>OPC<50><43>ǩ<EFBFBD><C7A9>ͬ<EFBFBD><CDAC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>_writeSubscription<6F>飩
|
|||
|
///// </summary>
|
|||
|
///// <param name="itemnames"></param>
|
|||
|
///// <param name="itemvalue"></param>
|
|||
|
///// <returns></returns>
|
|||
|
//public static bool SyncWriteGroupItemValue(string[] itemnames, string[] itemvalue)
|
|||
|
//{
|
|||
|
// Item[] items;
|
|||
|
// ItemValue[] itemvalues;
|
|||
|
// IdentifiedResult[] ir;
|
|||
|
// try
|
|||
|
// {
|
|||
|
// if (AsyncReadOK == false) return false;
|
|||
|
// if (_IfConnectOPCServer == false)
|
|||
|
// {
|
|||
|
// if (ConnectOPCServer(_hostname, _progID) == false) return false;
|
|||
|
// }
|
|||
|
// //<2F><><EFBFBD><EFBFBD>item<65>б<EFBFBD>
|
|||
|
// items = new Item[itemnames.Length];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC>item
|
|||
|
// int i;
|
|||
|
// for (i = 0; i < items.Length; i++)//item<65><6D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ֵ
|
|||
|
// {
|
|||
|
// items[i] = new Item();//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Item<65><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// items[i].ClientHandle = Guid.NewGuid().ToString();//<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// items[i].ItemPath = null; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
|||
|
// items[i].ItemName = _PLCconnectionID + itemnames[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>֡<EFBFBD>
|
|||
|
// }
|
|||
|
// _writeSubscription.AddItems(items);
|
|||
|
// itemvalues = new ItemValue[_writeSubscription.Items.Length];
|
|||
|
// for (int ii = 0; ii < _writeSubscription.Items.Length; ii++)
|
|||
|
// {
|
|||
|
// itemvalues[ii] = new ItemValue((ItemIdentifier)_writeSubscription.Items[ii]);
|
|||
|
// itemvalues[ii].Value = itemvalue[ii];
|
|||
|
// }
|
|||
|
|
|||
|
// ir = _writeSubscription.Write(itemvalues);
|
|||
|
|
|||
|
// _writeSubscription.RemoveItems(_writeSubscription.Items);
|
|||
|
// //_writeSubscription.Dispose();
|
|||
|
// GC.Collect();
|
|||
|
// return true;
|
|||
|
// }
|
|||
|
// catch (Exception ex)
|
|||
|
// {
|
|||
|
// //if ((m_server == null) || (m_server.IsConnected == false))
|
|||
|
// //{
|
|||
|
// _IfConnectOPCServer = false;
|
|||
|
// //}
|
|||
|
// _opcError = "ͬ<><CDAC>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>" + ex.Message;
|
|||
|
// return false;
|
|||
|
// }
|
|||
|
// finally
|
|||
|
// {
|
|||
|
// items = null;
|
|||
|
// itemvalues = null;
|
|||
|
// ir = null;
|
|||
|
// }
|
|||
|
//}
|
|||
|
////ReadComplete<74>ص<EFBFBD>
|
|||
|
//public static void OnReadComplete(object requestHandle, Opc.Da.ItemValueResult[] values)
|
|||
|
//{
|
|||
|
// /*Console.WriteLine("<22><><EFBFBD><EFBFBD><EFBFBD>첽<EFBFBD><ECB2BD>name:{0},value:{1}", values[0].ItemName, values[0].Value);
|
|||
|
// if ((int)requestHandle == 1)
|
|||
|
// Console.WriteLine("<22>¼<EFBFBD><C2BC>źž<C5BA><C5BE><EFBFBD>Ϊ{0}", requestHandle);*/
|
|||
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>OPC<50><43><EFBFBD><EFBFBD>
|
|||
|
// try
|
|||
|
// {
|
|||
|
// if (values.Length <= 0)
|
|||
|
// {
|
|||
|
// _opcError = "<22>첽<EFBFBD><ECB2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>OPC Serverû<72><C3BB><EFBFBD>ӵ<EFBFBD>PLC!";
|
|||
|
// AsyncReadOK = false;
|
|||
|
// return ;
|
|||
|
// }
|
|||
|
// if (values[0].Quality == Quality.Bad)
|
|||
|
// {
|
|||
|
// _opcError = "<22>첽<EFBFBD><ECB2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>OPC Serverû<72><C3BB><EFBFBD>ӵ<EFBFBD>PLC!";
|
|||
|
// AsyncReadOK = false;
|
|||
|
// return ;
|
|||
|
// }
|
|||
|
|
|||
|
// Array.Copy((Array)values[0].Value, AsyncReadAllItemNameValue, AsyncReadAllItemNameValue.GetLength(0));// (int)devinfo28.Dbw2Getlength
|
|||
|
// AsyncReadOK = true;
|
|||
|
// }
|
|||
|
// catch (Exception ex)
|
|||
|
// {
|
|||
|
// _opcError = "<22>첽<EFBFBD><ECB2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>"+ex.Message ;
|
|||
|
// AsyncReadOK = false;
|
|||
|
// return;
|
|||
|
// }
|
|||
|
// finally
|
|||
|
// {
|
|||
|
// values = null;
|
|||
|
// }
|
|||
|
//}
|
|||
|
//#endregion
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// ͬ<><CDAC><EFBFBD><EFBFBD>OPC<50><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ֵ
|
|||
|
/// </summary>
|
|||
|
/// <param name="subscription">OPC<50><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
/// <param name="itemvalue">ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ</param>
|
|||
|
/// <returns></returns>
|
|||
|
}
|
|||
|
}
|