采用自动化接口实现过程
对于自动化接口,程序相应简单些。
建立项目:Automation_RW
![](https://i-blog.csdnimg.cn/blog_migrate/413204970cfcedfa1c9818b22f5849dd.png)
测试中,对
db10.dbw0
及
db10.dbw2
读写操作,在
Form
窗口做如下设计:
Control name Text
Button: Btn_Conn Conn
Button: Btn_Read_S Read_S
Button: Btn_Read_A Read_A
Button: Btn_Write_S Write_S
Button: Btn_Write_A Write_A
Button: Btn_DisConn disConn
TextBox: Txt_R1_Value
TextBox: Txt_R1_Quality
TextBox: Txt_R1_TimeStamp
TextBox: Txt_R2_Value
TextBox: Txt_R2_Quality
TextBox: Txt_R2_TimeStamp
TextBox: Txt_W1
TextBox: Txt_W2
TextBox: Txt_ Txt_WriteStatus2
CheckBox: CHK_Btn
![](https://i-blog.csdnimg.cn/blog_migrate/64be13cd5952437694cdeead275d5d12.png)
第一步,添加下列命名空间(首先在
COM
组件中添加相应组件)
using
OPCSiemensDAAutomation;
第二步,定义
OPC
相关变量
OPCServer
MyOpcServer;
//定义OPCServer
OPCGroup
MyOpcGroup;
//定义组
OPCItem
MyOpcItem1;
//Item
OPCItem
MyOpcItem2;
//值
long
[] ServerHandle =
new long
[2];
//Item 的句柄
第三步,建立连接及对象
MyOpcServer =
new
OPCServer
();
MyOpcServer.Connect(
"OPC.SimaticNet"
,
"192.168.0.102"
);
MyOpcGroup = MyOpcServer.OPCGroups.Add(
"MyGroup1"
);
MyOpcItem1 = MyOpcGroup.OPCItems.AddItem(
"S7:[S7 connection_1]DB10,INT0"
,1);
MyOpcItem2 = MyOpcGroup.OPCItems.AddItem(
"S7:[S7 connection_1]DB10,INT2"
, 2);
ServerHandle[0] = MyOpcItem1.ServerHandle;
ServerHandle[1] = MyOpcItem2.ServerHandle;
第四步,同步读数据,
private void
Btn_Read_S_Click(
object
sender,
EventArgs
e)
//同步读数据
{
……
MyOpcItem1.Read(1,
out
ItemValues,
out
Qualities,
out
TimeStamps);
//ItemValues,Qualities,TimeStamps分别是值,质量码及时间
//也可以通过调用SyncRead函数,参数可参考异步读函数
……
}
第四步,同步写数据
private void
Btn_Write_S_Click(
object
sender,
EventArgs
e)
{
……
MyOpcItem1.Write(Txt_W1.Text);
//也可以通过调用SyncWrite函数,参数可参考异步写函数
……
}
第五步,异步事件定义,
在异步操作情况下,需要定义相应的异步事件
MyOpcGroup.DataChange +=
new
DIOPCGroupEvent_DataChangeEventHandler
(MyOpcGroup_DataChange);
//
//订阅方式下数据改变
iteComplete +=
new
DIOPCGroupEvent_AsyncWriteCompleteEventHandler
(MyOpcGroup_WriteComplete);
//写完成事件
MyOpcGroup.AsyncReadComplete +=
new
DIOPCGroupEvent_AsyncReadCompleteEventHandler
(MyOpcGroup_ReadComplete);
//读完成事件
MyOpcGroup.AsyncCancelComplete +=
new
DIOPCGroupEvent_AsyncCancelCompleteEventHandler
(MyOpcGroup_CancelComplete);
//取消操作事件
在使用中注意,其事件函数要按照特定接口:
void
MyOpcGroup_DataChange(
int
TransactionID,
int
NumItems,
ref
Array
ClientHandles,
ref
Array
ItemValues,
ref
Array
Qualities,
ref
Array
TimeStamps)
void
MyOpcGroup_WriteComplete(
int
TransactionID,
int
NumItems,
ref
Array
ClientHandles,
ref
Array
Errors)
void
MyOpcGroup_ReadComplete(
int
TransactionID,
int
NumItems,
ref
System.
Array
ClientHandles,
ref
System.
Array
ItemValues,
ref
System.
Array
Qualities,
ref
System.
Array
TimeStamps,
ref
System.
Array
Errors)
void
MyOpcGroup_CancelComplete(
int
CancelID)
第六步订阅方式读
void
MyOpcGroup_DataChange(
int
TransactionID,
int
NumItems,
ref
Array
ClientHandles,
ref
Array
ItemValues, <