工业落地应用学习——opc 学习笔记

参考链接:1)https://blog.csdn.net/u014710355/article/details/81513590 

2)https://blog.csdn.net/han_better/article/details/81666740#commentBox   这俩是kepserverEx的使用记录,我这里主要当模拟器来用

3)https://blog.csdn.net/qq_41387812/article/details/102745688?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task 这个博主是真的赞,源码连接都给出来了,用来学习opc基础,感jio就很nice

4)https://blog.csdn.net/wanghuaihu/article/details/88794767?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param 这个是上面的简配版

5)https://blog.csdn.net/u014710355/article/details/80688325 

6)https://blog.csdn.net/qq_33278354/article/details/104993593   这俩是用VS配置OPC时候容易出的bug解决方案

7)https://blog.csdn.net/qq_41387812/article/details/102745688?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task 

 

注:这里是OPC classic的,不是OPC UA的。。。。。。其实我还是蛮倾向于用OPC UA的,毕竟可以跨平台,简直是我这种很少用win开发的福音啊,,,,,,but现在工业上的机器大多比较older,只支持 OPC DA(classic)的,就这样吧,先凑合凑合

 

一、配置记录

1)查看是否有OPCDAAuto.dll, 在C:/Windows/System32/  (32位) 或C:/Windows/SysWow64/  (64位) 下,具体多少位取决于你想整的工程。如果没有,则安装一下。  Tips:我看别人的教程里都说,安装了VS后自带,但是我重装了下,并没有。。。。。。。

这里我给出我的dll文件安装过程记录以及踩过的坑。

  • OPCAutomation 228K大小,32位系统,复制到C:\Windows\System32下,然后管理员身份打开CMD,cd C:\Windows\System32 到目录下,regsvr32.exe  OPCAutomation.dll,进行注册。如果是64位系统,要同时对System32和C:\Windows\SysWOW64两个文件夹下进行com注册,然后管理员身份打开CMD,cd到目录下,regsvr32.exe  OPCAutomation.dll,注册,注册后重启电脑。

踩坑笔记:

    很多人都是按照上面的方法成功了,但是我就是会弹窗:要么是OPCDAAuto.dll 注册失败, 要么是加载成功,但是XXXX没找到啥的......................mmp,就是在搞事情啊,后来我看到了一个大大的方法,写成了bat文件,然后管理员身份运行,ojbk,成功了,下面我贴出这个bat文件的内容

Copy /y OPCDAAuto.dll %windir%\system32\
regsvr32 C:\WINDOWS\system32\OPCDAAuto.dll

务必重启!重启!重启!

2)下载参考链接中博主给的代码,然后用vs2019打开。别怕,直接run。看看报的什么错

这里提示未定义的OPCAutomation.......如果第一步是正常的,就不会出这个问题;如果报这个错误,就说明第一步没有正常注册或者注册后没有重启。。。。。重启后在VS工程里的解决方案中,把这个OPCAutomation的引用删掉,然后重新添加。添加方式如下:

在“解决方案资源管理器”里鼠标右键单击项目,依次选择“添加”→“引用”→“COM”,然后在右上角搜索框搜索“OPC”,然后选择那个带有OPC Automation XXXX的就行了

 

嗯,然后就基本可以跑起来了,开始你的愉快旅程吧

 

二、代码学习记录

这里主要是C#的

1.连接服务器

OPCServer KepServer = new OPCServer();
KepServer.Connect(remoteServerName, remoteServerIP);

2.获取服务器状态

KepServer.ServerState == (int)OPCServerState.OPCRunning

3.绑定相关

    OPCGroups KepGroups;
    KepGroups = KepServer.OPCGroups;

4.订阅(读数据)

    KepGroup = KepGroups.Add("MyGroup"); //先添加组
    KepGroup.IsSubscribed = true; //设置属性
    KepGroup.DataChange += KepGroup_DataChange;//添加订阅事件


     //把需要订阅的项添加组
    List<string> ItemIds= new List<string>()
    {
        "S7-1200.0-166.BOOL",
        "S7-1200.0-166.BYTE",
        "S7-1200.0-166.INT",
        "S7-1200.0-166.WORD",
        "S7-1200.0-166.REAL",
    }
     for (int i = 0; i < ItemIds.Count; i++)
    {
        OPCItem myItem = KepGroup.OPCItems.AddItem(ItemIds[i], i);

    }


    //订阅函数  ,订阅的内容自定义,这里只是举个栗子
    private void KepGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
    {
        for (int i = 1; i <= NumItems; i++)//下标一定要从1开始,NumItems参数是每次事件触发时Group中实际发生数据变化的Item的数量,而不是整个Group里的Items
        {
            try{
                this.txtTagValue.Text = ItemValues.GetValue(i).ToString();
                this.txtQualities.Text = Qualities.GetValue(i).ToString();
                this.txtTimeStamps.Text = TimeStamps.GetValue(i).ToString();
           }catch(Exception e){

           }
        }
    }

 

5.异步写

    OPCItem bItem = KepItems.GetOPCItem(itmHandleServer);//获取item.itmHandleServer为addItem时返回的句柄
    int[] temp = new int[2] { 0, bItem.ServerHandle };
    Array serverHandles = (Array)temp;
    object[] valueTemp = new object[2] { "", txtWriteTagValue.Text };
    Array values = (Array)valueTemp;
    Array Errors;
    int cancelID;
    KepGroup.AsyncWrite(1, ref serverHandles, ref values, out Errors, 2009, out cancelID);

6.断开连接

    //用完后请记得断开连接
    if (KepGroup != null)
    {
        KepGroup.DataChange -= new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);
    }

    if (KepServer != null)
    {
        KepServer.Disconnect();
        KepServer = null;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值