恭喜,你发布的帖子
发布于 2015-11-11 15:49:12
1楼
//异步读数据
private void btn_Read_Async_Click(object sender, EventArgs e)
{
if (MyOpcServer == null)
{
MessageBox.Show("请连接OPCServer");
return;
}
if (MyOpcGroup.IsSubscribed == false)
{
MessageBox.Show("请选择订阅");
return;
}
int[] handle = new int[ItemCount+1] { 0, ServerHandle[0], ServerHandle[1], ServerHandle[2], ServerHandle[3], ServerHandle[4], ServerHandle[5] };//注意写的方式
Array MyServerHandles = (Array)handle;
Array errors;
int cancelID;
try
{
MyOpcGroup.AsyncRead(ItemCount, ref MyServerHandles, out errors, 1, out cancelID);
}
catch (System.Exception error)
{
MessageBox.Show(error.Message, "Result - 异步读", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
//异步写数据
private void btn_Write_Async_Click(object sender, EventArgs e)
{
if (MyOpcServer == null)
{
MessageBox.Show("请连接OPCServer");
return;
}
if (MyOpcGroup.IsSubscribed == false)
{
MessageBox.Show("请选择订阅");
return;
}
int[] handle = new int[ItemCount+1] { 0, ServerHandle[0], ServerHandle[1], ServerHandle[2], ServerHandle[3], ServerHandle[4], ServerHandle[5] };
Array MyServerHandles = (Array)handle;
object[] values = new object[ItemCount+1] { "", txt_W1.Text, txt_W2.Text, txt_W3.Text, txt_W4.Text, txt_W5.Text, txt_W6.Text };
Array Myvalues = (Array)values;
Array errors;
int cancelID;
try
{
MyOpcGroup.AsyncWrite(ItemCount, ref MyServerHandles, ref Myvalues, out errors, 2, out cancelID);
}
catch (System.Exception error)
{
MessageBox.Show(error.Message, "Result - 异步写", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
GC.Collect();
}
//选择是否为订阅方式
private void chk_Subscribe_CheckedChanged(object sender, EventArgs e)
{
if (MyOpcServer == null)
{
MessageBox.Show("请连接OPCServer");
return;
}
if (chk_Subscribe.Checked)
{
MyOpcGroup.IsSubscribed = true;
}
else
{
MyOpcGroup.IsSubscribed = false;
}
}
//断开OPCServer连接
private void btn_disConn_Click(object sender, EventArgs e)
{
try
{
for (int i = 0; i < ItemCount; i++)
{
if (MyOpcItem[i] != null)
MyOpcItem[i] = null;
}
MyOpcServer.Disconnect();
}
catch (System.Exception error)
{
MessageBox.Show(error.Message, "Result - 异步写", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btn_Change_Click(object sender, EventArgs e)
{
if (MyOpcServer == null)
{
MessageBox.Show("请连接OPCServer");
return;
}
object ItemValues;
object Qualities;
object TimeStamps;
try
{
MyOpcItem[6].Read(1, out ItemValues, out Qualities, out TimeStamps);
if (String.Format("{0}", ItemValues).ToLower() == "false")
{
MyOpcItem[6].Write("true");
btn_Change.Text = "CHANGE";
}
else
{
MyOpcItem[6].Write("false");
btn_Change.Text = "UNCHANGE";
}
}
catch (System.Exception error)
{
MessageBox.Show(error.Message, "Result - 同步写", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private bool[] ByteToBool(int temp)
{
bool[] temp2 = new bool[8];
for (int k = 0; k < 8; k++)
{
if (temp % 2 == 1)
temp2[k] = true;
else
temp2[k] = false;
temp = temp / 2;
}
return temp2;
}
private void SetValue(int NumItems, System.Array ClientHandles, System.Array ItemValues, System.Array Qualities, System.Array TimeStamps)
{
for (int i = 0; i < NumItems; i++)
{
if (ItemValues.GetValue(i + 1) != null)
{
switch (Convert.ToInt32(ClientHandles.GetValue(i + 1)))
{
case 1:
txt_R1_Value.Text = ItemValues.GetValue(i + 1).ToString();
txt_R1_Quality.Text = Qualities.GetValue(i + 1).ToString();
txt_R1_TimeStamp.Text = TimeStamps.GetValue(i + 1).ToString();
break;
case 2:
txt_R2_Value.Text = ItemValues.GetValue(i + 1).ToString();
txt_R2_Quality.Text = Qualities.GetValue(i + 1).ToString();
txt_R2_TimeStamp.Text = TimeStamps.GetValue(i + 1).ToString();
break;
case 3:
txt_R3_Value.Text = ItemValues.GetValue(i + 1).ToString();
txt_R3_Quality.Text = Qualities.GetValue(i + 1).ToString();
txt_R3_TimeStamp.Text = TimeStamps.GetValue(i + 1).ToString();
break;
case 4:
txt_R4_Value.Text = ItemValues.GetValue(i + 1).ToString();
int temp = Convert.ToInt32(txt_R4_Value.Text);
bool[] temp2 = ByteToBool(temp);
btn_LED1.BackColor= temp2[0]?Color.Green:Color.White;
btn_LED2.BackColor= temp2[1]?Color.Green:Color.White;
btn_LED3.BackColor= temp2[2]?Color.Green:Color.White;
btn_LED4.BackColor= temp2[3]?Color.Green:Color.White;
btn_LED5.BackColor= temp2[4]?Color.Green:Color.White;
btn_LED6.BackColor= temp2[5]?Color.Green:Color.White;
btn_LED7.BackColor= temp2[6]?Color.Green:Color.White;
btn_LED8.BackColor= temp2[7]?Color.Green:Color.White;
txt_R4_Quality.Text = Qualities.GetValue(i + 1).ToString();
txt_R4_TimeStamp.Text = TimeStamps.GetValue(i + 1).ToString();
break;
case 5:
txt_R5_Value.Text = ItemValues.GetValue(i + 1).ToString();
txt_R5_Quality.Text = Qualities.GetValue(i + 1).ToString();
txt_R5_TimeStamp.Text = TimeStamps.GetValue(i + 1).ToString();
break;
case 6:
txt_R6_Value.Text = ItemValues.GetValue(i + 1).ToString();
txt_R6_Quality.Text = Qualities.GetValue(i + 1).ToString();
txt_R6_TimeStamp.Text = TimeStamps.GetValue(i + 1).ToString();
break;
}
}
}
}
精华帖版主置评:较完整给出OPC通信开发的步骤、示例、程序和测试,有参考和借鉴意义,封精鼓励分享。
请填写推广理由:
分享
只看
楼主