最近项目需要对SCADA系统的下位机采集实时数据,常见做法是两种,一种采用ModBus RTU/TCP协议直接通过支持ModBus的下位机通信,一种是通过OPC规范,使用厂商提供的OPC Server进行中转读取下位机数据。

这里的坑就是在开发连接OPC Server的客户端工具时遇到的。

使用.Net开发,最关键的是使用OPCDAAuto.dll,而且几乎只需要它即可实现最基本的数据访问功能。但是这里遇到个坑,配置OPC Server的同事告诉我PC Access SMART 配置到跨PC(俩PC应该通过TCP协议能够互访, 即同局域网或vpn等形式)可访问,说是防火墙等等需要配置,win7似乎比XP麻烦所以需要我直接在OPC Server运行的机器上开发调试。这里开发没问题,dll顺利的引用了。之后准备测试跨pc访问的时候,把代码工程搬到我的机器上了,结果发现这个OPCDAAuto的引用死活添加不上,提示检查是否有访问权限或者是否为.Net类库或已注册的COM。

说实话第一次遇到这种问题,非常懵逼。同事看了也说没遇到过,只好自己研究。显然regsvr注册也不成功。一度我怀疑是不是因为vs版本或者win10不支持这个dll。。

最后是运气好,决定看看搜索条目最多的关于这个dll注册的事情,才发现原来这个COM是个32位的,64位系统直接注册无效。

【解决方案】

首先将这个dll拷贝到C:\windows\SysWow64 下,再使用regsvr32 进行注册。

这样之后vs里就可以正常引用了,当然需要在添加引用时选择COM组件里找到这个类库。

【经验总结】

排错时应该加上对系统位数的考虑,因为忽略32位和64位的区别造成一度开发停滞也是醉了。。

【最后是吐槽】

西门子的工业技术支持网站做的真挫啊。。。。。

还有那亲爱的OPC 基金会的官网,好多bug连资源页面都进不去。。。

不知道工业自控这个领域是太封闭了导致网上几乎没什么资料还是什么原因,感觉获取靠谱信息太难了。

OPCDAAuto.dll 的一个坑的更多相关文章

  1. OPCDAAuto的一个坑

    最近项目需要对SCADA系统的下位机采集实时数据,常见做法是两种,一种采用ModBus RTU/TCP协议直接通过支持ModBus的下位机通信,一种是通过OPC规范,使用厂商提供的OPC Server ...

  2. 困扰多日的C#调用Haskell问题竟然是Windows的一个坑

    最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected memory,C# ...

  3. 关于OPC自动化接口编程(OPCDAAuto.dll)几点注意问题

    为了能够在工作中方便的应用OPC和充分的理解OPC的开发流程.内部机制,这两天正在研究开发OPC客户端程序,一般我们开发OPC客户端程序有以下几种方式: (1)       使用OPCNetAPI,需 ...

  4. 用html5的视频元素所遇到的第一个坑

    html5 有一个video标签,这个是被大家所熟知的事情.按照w3c的规范,我认真的写出如下代码: <video preload="auto" controls=" ...

  5. 监控jvm的一个坑

    监控jvm的一个坑 1,遇到的问题 我按照以往文档,在catalina.sh里追加jvm的监控api,如下 紧接着我启动 tomcat. 未报任何错误. 发现 lsof –i:12000, 12000 ...

  6. JavaScript中sort方法的一个坑(leetcode 179. Largest Number)

    在做 Largest Number 这道题之前,我对 sort 方法的用法是非常自信的.我很清楚不传比较因子的排序会根据元素字典序(字符串的UNICODE码位点)来排,如果要根据大小排序,需要传入一个 ...

  7. PHP中逻辑运算符and/or与||/&&的一个坑

    我原来以为PHP中的and和&&是一样的, 只是写法上为了可读性和美观, 事实上我错了. 这里面深藏了一个坑! 看以下代码: $bA = true; $bB = false; $b1  ...

  8. 合并多个dll为一个dll

    有时候自己写个小工具或者其它啥的物件,引用了好多第三方控件,如log4net,aspnetpager啥的,发布出去让别人看到自己竟然用了这么多的第三方DLL, 会对自己的能力产生怀疑,那有什么办法可以 ...

  9. 在VS2012中GridView的一个坑

    使用GridView的时候遇到了一个坑,一个增加一个选择按钮~貌似在某些情况下会出现一个是否允许选择的属性,貌似会默认为fals,然后就返回不了指定ID!坑,巨坑!但是今天居然找不到这个属性了,难道是 ...

随机推荐

  1. day5-subprocess模块

    一.概述 实际应用中,有些时候我们不得不跟操作系统进行指令级别的交互,如Linux中的shell.Python中早期通过os模块和commands模块来实现操作系统级别的交互,但从2.4版本开始,官方 ...

  2. 【hive】关于浮点数比较的问题

    当在hive中写下浮点数(例如:0.2) hive会把浮点数(0.2)存储为double类型 但是系统中并不能精准表示0.2这个浮点数 正确的浮点数表示 float   0.2 —> 0.200 ...

  3. System.Zip

    自XE2增加的System.Zip单元很好.注意事项: 1.文件压缩到文档后所使用的文件名会成为解压后的文件名,如果该文件名为指定文件名且无后缀名,那么解压出来的文件名也没有后缀名:

  4. (MSSQL)sp_refreshview刷新视图失败及更新Table字段失败的问题解决

    在近期工作中遇到一个任务,需要批量更改散布在很多Table中的某字段,同时刷新相关视图,但是在执行脚本时,发现了如下问题 更新字段问题 消息 ,级别 ,状态 ,第 行 对象'View_Simple' ...

  5. js判断是否是移动端(触摸屏)或者是PC

    js代码: console.log("ontouchstart" in window); 手机web浏览器,chrome模拟手机.手机APP会返回true, pc端(非手机模拟状态 ...

  6. OC-字符串、数组、字典总结

    #import <Foundation/Foundation.h> /* ∆以NSMutable开头的都是可变类型,以NSMutable开头定义的对象都是可以对数据进行修改: NSStri ...

  7. linux basename学习

    basename 用法 basename 名称 [后缀]   例子 1. $: basename /tmp/test.sh 输出: test.sh 2. $: basename /tmp/test.s ...

  8. vue.js 源代码学习笔记 ----- instance event

    /* @flow */ import { updateListeners } from '../vdom/helpers/index' import { toArray, tip, hyphenate ...

  9. 解析6种常用View 的滑动方法

    View 的滑动是Android 实现自定义控件的基础,实现View 滑动有很多种方法,在这里主要讲解6 种滑动方法,分别是layout().offsetLeftAndRight()与offsetTo ...

  10. SQL基础四(例子)

    ------------------------------------------------ --分别创建student/course/score表 Create table student ( ...