110,539
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Opc;
using Opc.Da;
using OpcCom;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
public static Opc.Da.Server m_server = null;//定义数据存取服务器
public static Opc.Da.Subscription subscription = null;//定义组对象(订阅者)
public static Opc.Da.SubscriptionState state = null;//定义组(订阅者)状态,相当于OPC规范中组的参数
public static Opc.IDiscovery m_discovery = new ServerEnumerator();//定义枚举基于COM服务器的接口,用来搜索所有的此类服务器。
static void Main(string[] args)
{
//StreamWriter dr = new StreamWriter(@"E:\test.txt",true, System.Text.Encoding.GetEncoding("GB2312"));
//string str = DateTime.Now.ToString();
//dr.WriteLine(str);
//dr.Flush();
//dr.Close();
//return;
StreamWriter dr = new StreamWriter(@"E:\system.log", true, System.Text.Encoding.GetEncoding("GB2312"));
try
{
Opc.Server[] servers = m_discovery.GetAvailableServers(Specification.COM_DA_20, "192.168.1.5", null);
if (servers != null)
{
foreach (Opc.Da.Server server in servers)
{
if (String.Compare(server.Name, "192.168.1.5.OPCServer.WinCC", true) == 0)//为true忽略大小写
{
m_server = server;//建立连接。
break;
}
}
}
m_server.Connect();
state = new Opc.Da.SubscriptionState();//组(订阅者)状态,相当于OPC规范中组的参数
state.Name = "newGroup";//组名
state.ServerHandle = null;//服务器给该组分配的句柄。
state.ClientHandle = Guid.NewGuid().ToString();//客户端给该组分配的句柄。
state.Active = true;//激活该组。
state.UpdateRate = 100;//刷新频率为1秒。
state.Deadband = 0;// 死区值,设为0时,服务器端该组内任何数据变化都通知组。
state.Locale = null;//不设置地区值。
subscription = (Opc.Da.Subscription)m_server.CreateSubscription(state);//创建组
string[] itemName = new string[4];
itemName[0] = "G1_YM";
itemName[1] = "G2_YM";
itemName[2] = "G3_YM";
itemName[3] = "G4_YM";
Item[] items = new Item[4];
for (int i = 0; i < 4; i++)
{
items[i] = new Item();
items[i].ClientHandle = Guid.NewGuid().ToString();
items[i].ItemPath = null;
items[i].ItemName = itemName[i];
}
subscription.AddItems(items);
ItemValueResult[] values = subscription.Read(subscription.Items);
if (values[0].Quality.Equals(Opc.Da.Quality.Good))
{
string s1 = values[0].Value.ToString();
string s2 = values[1].Value.ToString();
string s3 = values[2].Value.ToString();
string s4 = values[3].Value.ToString();
ExecSQL(s1, s2, s3, s4);
}
subscription.RemoveItems(subscription.Items);
m_server.CancelSubscription(subscription);//m_server前文已说明,通知服务器要求删除组。
subscription.Dispose();//强制.NET资源回收站回收该subscription的所有资源。
m_server.Disconnect();//
string str = DateTime.Now.ToString() + "-----------------chenggongle";
dr.WriteLine(str);
dr.Flush();
dr.Close();
}
catch (Exception ex)
{
string str = DateTime.Now.ToString() + "-----------------" + ex.Message;
dr.WriteLine(str);
dr.Flush();
dr.Close();
}
}
/// <summary>
/// 执行SQL语句,更新液位
/// </summary>
/// <returns></returns>
public static void ExecSQL(string s1, string s2, string s3, string s4)
{
string sql = "";
string time = DateTime.Now.ToString();
System.Collections.ArrayList ar = new System.Collections.ArrayList();
sql = "update xt_tc_TankIn set 当前液位='" + s1 + "',最后一次更新时间='" + time + "' where 罐号='34'";
ar.Add(sql);
sql = "update xt_tc_TankIn set 当前液位='" + s2 + "',最后一次更新时间='" + time + "' where 罐号='37'";
ar.Add(sql);
sql = "update xt_tc_TankIn set 当前液位='" + s3 + "',最后一次更新时间='" + time + "' where 罐号='40'";
ar.Add(sql);
sql = "update xt_tc_TankIn set 当前液位='" + s4 + "',最后一次更新时间='" + time + "' where 罐号='43'";
ar.Add(sql);
dosoft.DAL.DbHelperSQL.ExecuteSqlTran(ar);
}
}
}
G1_YM 等是变量名称
s1 等就是读取到的数据
项目代码 亲测可用不知道对你有没有帮助 System.Type tType = System.Type.GetTypeFromProgID("CCHMIRuntime.HMITags");
System.Reflection.PropertyInfo pit = tType.GetProperty("Read");
g_DataSourceName = pit.GetValue(tags);
object HMIRuntime = null;
System.Type oType = System.Type.GetTypeFromProgID("CCHMIRuntime.HMIRuntime");
HMIRuntime = System.Activator.CreateInstance(oType);
System.Reflection.PropertyInfo pi = oType.GetProperty("Tags");
object tags = pi.GetValue(HMIRuntime, new object[] { "@DatasourceNameRT" });
//g_DataSourceName = HMIRuntime.Tags("@DatasourceNameRT").Read;
object HMIRuntime = null;
System.Type oType = System.Type.GetTypeFromProgID("CCHMIRuntime.HMIRuntime");
HMIRuntime = System.Activator.CreateInstance(oType);
System.Reflection.MethodInfo mi = oType.GetMethod("Tags");
object tags = mi.Invoke(HMIRuntime, new object[] { "@DatasourceNameRT" });
...