【发布时间】:2015-03-02 14:34:03
【问题描述】:
我每 10 秒从 OPC 服务器 KepServer V5 读取 OPC 项目到一个文件,但它每 10 秒读取两次!!。 (我不想每 10 秒读 2 次,但只能读 1 次!)
这是我的代码。
OPCController 类:
public void AddItems(string plcPath)
{
if (server.IsConnected || group.Active)
{
try
{
Opc.Da.Item[] items = new Opc.Da.Item[3];
items[0] = new Opc.Da.Item();
items[0].ItemName = “PLC1.Value1″;
items[1] = new Opc.Da.Item();
items[1].ItemName = “PLC1.Value2″;
items[2] = new Opc.Da.Item();
items[2].ItemName = “PLC1.Value3″;
group.AddItems(items);
}
catch (Exception e)
{
MessageBox.Show("Tags not read.");
}
}
}
public void ReadItems()
{
Opc.IRequest req;
group.Read(group.Items, 123, new Opc.Da.ReadCompleteEventHandler(ReadCompleteCallback), out req);
Console.ReadLine();
}
static void ReadCompleteCallback( object clientHandle, Opc.Da. ItemValueResult[] results)
{
Console.WriteLine( "Read complete" );
DateTime dataTimeNow = DateTime.Now;
foreach (Opc.Da.ItemValueResult readResult in results)
{
Console.WriteLine( "\Timestamp{0}\tValue:{1}" , (dataTimeNow.ToString("")), readResult.Value);
}
Console.WriteLine();
}
表单类:
private void startRead_btn_Click(object sender, EventArgs e)
{
int setTimerInterval = (int)this.numSetTimer.Value;
timer1.Enabled = true;
timer1.Interval = (setTimerInterval) * (1000);
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Start();
startRead_btn.Enabled = false;
endRead_btn.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
opcController.ReadItems();
}
输出文件:
TimeStamp: 3/2/2015 3:10:15 PM Value: 12159
TimeStamp: 3/2/2015 3:10:15 PM Value: 12162
TimeStamp: 3/2/2015 3:10:25 PM Value: 12168
TimeStamp: 3/2/2015 3:10:25 PM Value: 12169
TimeStamp: 3/2/2015 3:10:35 PM Value: 12177
TimeStamp: 3/2/2015 3:10:35 PM Value: 12178
【问题讨论】:
-
你好,我正在研究如何从 C# 连接到 Kepware OPC,你能把你的源代码发给我吗?