从加入红橡开始熟悉和使用易控(INSPEC)组态软件,值得赞扬的是INSPEC的开放性和对C#语言的支持,除此之外,便也没有感觉它与其他组态软件有太多优势,有人说INSPEC软件授权比国内其他同类的组态软件便宜,姑且认为这也是其中一强项吧。

海淘的东西好不好,得到货了拿到手里用过才知道,组态软件也是一个道理,作为一种开发工具,上手比较容易,具备一些开发经验的可以很快熟练,甚至“精通”。但是它作为一种组态开发工具软件,更多的还需要在实际项目开发过程中摸索,碰到石头伤着了会感到痛,因为害怕疼痛,所以下次会想着法子避让石头,这就是INSPEC,也是组态软件的特性吧,真正在使用时才会发现有很多“坑”,面对这些“坑”一定要留神,除非你决定放弃它,否则绝对不能去硬碰硬,得绕着来。

  考虑到INSPEC(组态软件)实现功能有限,未来对由组态软件开发的系统数据的开放性需求,虽然都可以在INSPEC里实现,但是存在大量的重复性工作,所以尽早的将数据、控制和业务处理部分从组态软件中提取出来,按本公司或项目的特点进行设计和开发,对于公司或项目来说意义重大。依托INSPEC提供的OPC服务器可以实现数据的实时共享,是目前普遍采用的比较直接和快捷的使用方式。当然,如果公司具备底层硬件开发基础,可以直接无视各种组态软件。

  组态软件的数据使用OPC服务器共享出来后,再利用INSPEC的OpcClient库开发OPC读写客户端软件功能,接下来就是运行高级开发语言实现数据的处理、控制和业务功能,这样就把原来在INSPEC中实现和处理的问题拿到外面来了,再使用INSPEC的Web浏览器控件在组态软件中呈现。

  而这次出现的“坑”就是跟Web浏览器控件有关,本人不排除在INSPEC提供的其他控件都存在这样的问题的可能。

  在INSPEC中内部变量、画面都是直接使用静态方法(全局)引用使用的,如内容变量使用变量组名+点号连接符+变量名,画面使用GrpManager+点号连接符+画面名称,不同之处是内部变量从工程启动开始就一直存在,不需要执行初始化操作,但是画面却需要使用Grp.Open或Grp.Hide方法预先加载,之后就可以直接使用GrpManager+点号连接符+画面名称+点号连接符+画面中成员ID,来操作画面中的元素。

  一切就是这么看来顺理成章的事,这次就出现意外,也许对于做技术的来说,亘古不变的规律和道理固然要相信,但是某一天如果真的出现意料之外的事情,不用大惊小怪,好好静下心来梳理统理,找出引起这种差异性的原因,总结经验教训。比如我们常常认为一个单线程的函数或过程的执行总是从上至下,从入口到出口的,但是node.js出现了,打破了这个规则,函数或过程中间某一句占用时间的代码在没有执行完成,下一句代码就开始并发执行,从而导致整个函数或过程实现功能出现偏离。

  临近项目开发进入里程碑结点,所有的开发任务按计划逐个实现,看着INSPEC工程文件从最初几个兆,到现在四五十兆,心底无限感慨!然而,偏偏就是在这个时刻,问题出来了。原来一直使用正常的浏览器控件突然全部报错,提示“未将对象引用设置到对象的实例”,没有错,所有浏览器控件在同一时间“集体罢工”了,在INSPEC开发环境编译也没有报错,但是运行的时候就在后台报错,而在两天前备份的档不存在这个问题。心想画面还有后台代码都是没有改动过的,突然出现这样的问题,莫非是在INSPEC中使用浏览器控件有问题,不能够这样用吗?那样的话,这个问题就太大了,不说重新在INSPEC中实现同样的功能,需要花费多少时间,还对相关联的项目造成非常大的影响!回头是万万不能的,这个问题必须要解决!

  于是乎,纠结烦人的找“虫”工作开始。首先尝试检查工程页面和代码有没有错误,试图对工程进行修复。尝试过的方法有:

  (1)删除页面中Web浏览器控件,重新添加新的Web浏览器控件,无效;

  (2)对重新添加的Web浏览器控件修改控件ID,去除中文汉字,改为英文字母,无效;

  (3)删除有问题的其中一个页面,重新添加新画面,新画面实现原画面同样的功能,问题依旧,亦无效;

  (4)启用Web浏览器控件工具栏,检查发现在运行环境,所有画面中的Web浏览器控件都是在后台代码直接赋值或提交URL地址时报错,但是在Web浏览器的地址栏中输入后台提交的地址,是能够在Web浏览器控件中显示的!?

  (5)怀疑开发环境出了问题,卸载INSPEC软件后,重启电脑后再安装之,无效;

  (6)检查上次备份的版本,备份工程中的所有Web浏览器控件功能都是正常的。

  (7)将使用Web浏览器控件的SubmitWebAddress方法改为CurrentUrl属性赋值,仍旧报错“未将对象引用设置到对象的实例”,于时开始怀疑Web浏览器控件,在后端代码检查是否为null,结果发现报错的原因竟然就是Web浏览器控件是空对象!

  (8)将在后台代码发现Web浏览器控件为空的情况,与易控技术支持沟通,对方亦不相信会有这种问题,技术支持认为我们把Web浏览器用复杂了,建议直接在浏览器中自己输地址访问,汗!应对方要求,继续做了下面两点测试。

  (9)在有问题的画面中新增按钮控件,在按钮控件点击事件中,引用该画面的Web浏览器控件并试图加载某个Url地址,仍然报错;

  (10)新增测试画面,并添加Web浏览器和按钮控件,在按钮点击事件中操作Web浏览器控件,没有报错!

  (11)据此,再次与易控技术支持沟通,基本可以推断是工程或画面出现问题了!同时对方告知,当工程意外关闭或因其他原因未正常保存的关闭/退出行为,均可能出现工程或画面损坏。

  工程出问题了,可以说是悲喜参半吧,悲的是可恨这易控软件太脆弱了,电脑出现蓝屏或者故障时,保不准那时候就开着一个易控工程,从而给项目埋下了一颗定时炸弹,运气好点只是一颗哑雷,皆大欢喜,运气不好就……就不好说了。喜的是工程出问题了,但是方案没有出问题,花点时间和精力解决这个问题就好。

  接下来就是开始工程修复和重建工作,简单的说来就是确定一个初始的存档,从这个存档开始到现在的工程,中间所有的工作重做。因为没有办法判断到底是工程哪里出了问题,所以必须随时备份,做好修改记录,反复测试修改前后工程是否存在异常,并且当出现异常时,重新定位最近的一个正常的工程备份,如此反复。

!!!易控INSPEC组态软件开发小结——-一次工程文件损坏和处理经过的更多相关文章

  1. 开源纯C#工控网关+组态软件

    一.   前言 在园子潜水也七八年了.说来惭愧,这么多年虽然一直自称.NET铁杆粉丝,然仅限于回几个不痛不痒的贴,既没有发布过代码,也没有写过文章. 看着.NET和C#在国外风生水起,国内却日趋没落, ...

  2. 开源纯C#工控网关+组态软件(八)表达式编译器

    一.   引子 监控画面的主要功能之一就是跟踪下位机变量变化,并将这些变化展现为动画.大部分时候,界面上一个图元组件的某个状态,与单一变量Tag绑定,比如电机的运行态,绑定一个MotorRunning ...

  3. 开源纯C#工控网关+组态软件(九)定制Visual Studio

    一.   引子 因为最近很忙(lan),很久没发博了.不少朋友对那个右键弹出菜单和连线的功能很感兴趣,因为VS本身是不包含这种功能的.   大家想这是什么鬼,怎么我的设计器没有,其实这是一个微软黑科技 ...

  4. 让你提前知道软件开发(22):shell脚本文件操作

    文章1部分 再了解C语言 shell脚本中的文件操作 [文章摘要] 编写shell脚本时,经常会涉及到对文件的操作,比方从文件里读取一行数据.向文件追加一行数据等. 完毕文件读写操作的方法有非常多,了 ...

  5. 开源纯C#工控网关+组态软件(六)图元组件

    一.   图元概述 图元是构成人机界面的基本单元.如一个个的电机.设备.数据显示.仪表盘,都是图元.构建人机界面的过程就是铺排.挪移.定位图元的过程. 图元设计是绘图和编码的结合.因为图元不仅有显示和 ...

  6. 开源纯C#工控网关+组态软件(十)移植到.NET Core

    一.   引子 写这个开源系列已经十来篇了.自从十年前注册博客园以来,关注了张善友.老赵.xiaotie.深蓝色右手等一众大牛,也围观了逗比的吉日嘎啦.精密顽石等形形色色的园友.然而整整十年一篇文章都 ...

  7. 开源纯C#工控网关+组态软件(七)数据采集与归档

    一.   引子 在当前自动化.信息化.智能化的时代背景下,数据的作用日渐凸显.而工业发展到如今,科技含量和自动化水平均显著提高,但对数据的采集.利用才开始起步. 对工业企业而言,数据采集日益受到重视, ...

  8. 开源纯C#工控网关+组态软件(三)加入一个新驱动:西门子S7

    一.   引子 首先感谢博客园:第一篇文章.第一个开源项目,算是旗开得胜.可以看到,项目大部分流量来自于博客园,码农乐园,名不虚传^^. 园友给了我很多支持,并提出了很好的改进意见.现加入屏幕分辨率自 ...

  9. 开源纯C#工控网关+组态软件(四)上下位机通讯原理

    一.   网关的功能:承上启下 最近有点忙,更新慢了.感谢园友们给予的支持,现在github上已经有.目标是最好的开源组态,看来又近一步^^ 之前有提到网关是物联网的关键环节,它的作用就是承上启下. ...

随机推荐

  1. 转: HTML5新特性之Mutation Observer

    转: HTML5新特性之Mutation Observer Mutation Observer是什么 Mutation Observer(变动观察器)是监视DOM变动的接口.当DOM对象树发生任何变动 ...

  2. COB (Chip On Board) 製程介紹/簡介/注意事項 II

    銀膠 (Silver glue) 如果晶圓有接地或是散熱需求時,一般都會採用[銀膠],如果沒有的話則會採用[厭氧膠].[厭氧膠]顧名思義就是阻隔它與空氣接觸後就會自然固化,不需要高溫烘烤.使用銀膠則需 ...

  3. Delphi中TFlowPanel实现滚动条效果

    由于TFlowPanel中没有设置滚动条的相关属性.所以我们只好另辟溪径.再加一个tscrollbox来实现. 具体操作如下: 1,先添加一个Tscrollbox,设置其align为alclient. ...

  4. WPF中的触发器简单总结

    原文 http://blog.sina.com.cn/s/blog_5f2ed5cb0100p3ab.html 触发器,从某种意义上来说它也是一种Style,因为它包含有一个Setter集合,并根据一 ...

  5. Android 学习之 开源项目PullToRefresh的使用

    首先 下载 Android-PullToRefresh-master 下载地址  https://github.com/chrisbanes/Android-PullToRefresh 下载之后将其解 ...

  6. Xcode 真机测试破解方法(转加修改)xcode 4.3 通过

    Xcode 真机测试破解方法(转加修改)xcode 4.3 通过 生成本机证书 应用程序->实用工具->钥匙串访问 菜单:钥匙串访问->证书助理->创建证书, 然后按以下图片顺 ...

  7. 深入Blocks分析

    1.简介 从iOS4开始,苹果引入了这个C语言的扩充功能"Blocks",在一些特定的场景下也是一把利刃.我前面一篇博客中初步介绍了Blocks这个东西,主要是语法的介绍(< ...

  8. background-size:的认识;

    background-size:100%;其实是元素的背景图片的宽度和元素宽度相同,高度auto: 也可理解为:background-size:100% auto; 而background:cover ...

  9. keep健身计划

    下一个月计划 1keep二周计划 2百度第一期学完 3百度前端技术学院提升

  10. 奔五的人,准备学习iOS开发

    这些年一直在java/web/android方面折腾,去年最终换成了apple的设备,本想就開始折腾iOS,却始终没能进入状态. 从今天開始,本人宣布:正式进入iOS/xcode 5的编程学习中,也希 ...