AHTC/RGD/RGD.OPCClient/CCommonOPCClient.cs

1080 lines
42 KiB
C#
Raw Normal View History

2025-05-19 09:22:33 +08:00
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>
}
}