!!!易控INSPEC组态软件开发小结——-一次工程文件损坏和处理经过
从加入红橡开始熟悉和使用易控(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组态软件开发小结——-一次工程文件损坏和处理经过的更多相关文章
- 开源纯C#工控网关+组态软件
一. 前言 在园子潜水也七八年了.说来惭愧,这么多年虽然一直自称.NET铁杆粉丝,然仅限于回几个不痛不痒的贴,既没有发布过代码,也没有写过文章. 看着.NET和C#在国外风生水起,国内却日趋没落, ...
- 开源纯C#工控网关+组态软件(八)表达式编译器
一. 引子 监控画面的主要功能之一就是跟踪下位机变量变化,并将这些变化展现为动画.大部分时候,界面上一个图元组件的某个状态,与单一变量Tag绑定,比如电机的运行态,绑定一个MotorRunning ...
- 开源纯C#工控网关+组态软件(九)定制Visual Studio
一. 引子 因为最近很忙(lan),很久没发博了.不少朋友对那个右键弹出菜单和连线的功能很感兴趣,因为VS本身是不包含这种功能的. 大家想这是什么鬼,怎么我的设计器没有,其实这是一个微软黑科技 ...
- 让你提前知道软件开发(22):shell脚本文件操作
文章1部分 再了解C语言 shell脚本中的文件操作 [文章摘要] 编写shell脚本时,经常会涉及到对文件的操作,比方从文件里读取一行数据.向文件追加一行数据等. 完毕文件读写操作的方法有非常多,了 ...
- 开源纯C#工控网关+组态软件(六)图元组件
一. 图元概述 图元是构成人机界面的基本单元.如一个个的电机.设备.数据显示.仪表盘,都是图元.构建人机界面的过程就是铺排.挪移.定位图元的过程. 图元设计是绘图和编码的结合.因为图元不仅有显示和 ...
- 开源纯C#工控网关+组态软件(十)移植到.NET Core
一. 引子 写这个开源系列已经十来篇了.自从十年前注册博客园以来,关注了张善友.老赵.xiaotie.深蓝色右手等一众大牛,也围观了逗比的吉日嘎啦.精密顽石等形形色色的园友.然而整整十年一篇文章都 ...
- 开源纯C#工控网关+组态软件(七)数据采集与归档
一. 引子 在当前自动化.信息化.智能化的时代背景下,数据的作用日渐凸显.而工业发展到如今,科技含量和自动化水平均显著提高,但对数据的采集.利用才开始起步. 对工业企业而言,数据采集日益受到重视, ...
- 开源纯C#工控网关+组态软件(三)加入一个新驱动:西门子S7
一. 引子 首先感谢博客园:第一篇文章.第一个开源项目,算是旗开得胜.可以看到,项目大部分流量来自于博客园,码农乐园,名不虚传^^. 园友给了我很多支持,并提出了很好的改进意见.现加入屏幕分辨率自 ...
- 开源纯C#工控网关+组态软件(四)上下位机通讯原理
一. 网关的功能:承上启下 最近有点忙,更新慢了.感谢园友们给予的支持,现在github上已经有.目标是最好的开源组态,看来又近一步^^ 之前有提到网关是物联网的关键环节,它的作用就是承上启下. ...
随机推荐
- 简易对象垃圾回收框架 for Delphi
(一).缘起 1.1 我的一个出错程序 程序名称:呼叫处理模块的压力测试工具,分为客户端和服务端. 开发工具:Delhpi 5 相关技术:客户端通过与服务端建立Socket连接来模拟一组电话机的拨入. ...
- 你会用shuffle打乱列表吗?
在网站上我们经常会看到关键字云(Word Cloud)和标签云(Tag Cloud),用于表明这个关键字或标签是经常被查阅的,而且还可以看到这些标签的动态运动,每次刷新都会有不一样的关键字或便签,让浏 ...
- Unix/Linux环境C编程入门教程(3) Oracle Linux 环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 2010年9月,Oracle Enterprise Linux发布新版内核--Un ...
- Android 检测SD卡应用
Android 检测SD卡应用 // Environment.MEDIA_MOUNTED // sd卡在手机上正常使用状态 // ...
- PHPExcel 多工作表 导出
//浏览器输出excel header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ...
- E=MC2 - 搜搜百科
E=MC2 - 搜搜百科 1 E=MC2 质能等价理论是爱因斯坦狭义相对论的最重要的推论,即著名的方程式E=mC^2,式中E为能量,m为质量,C为光速:也就是说,一切物质都潜藏着质量乘于光速平方的能量 ...
- SQL高级查询
高级查询: 一.多表链接 1,普通查询 select * from 表名,表名 where 表名.列名 = 表名.列名 2,join链接 select * from 表名 join 表名 on 表名. ...
- 链表-Add Two Numbers
第一版代码(很挫很罗嗦,不过是第一次做,记录一下成长的脚步!继续努力!) /*struct ListNode { int val; struct ListNode *next; };*/ typede ...
- codeigniter使用mongodb/redis
ci2.x版本,使用mongodb,需要安装pecl-php-mongo扩展(github上很多扩展已不可用,找到个可用版本纪录于此),添加到php.ini中 使用如下 public function ...
- [MOC062066]背景建模资料收集整理
一.相关博客 背景建模相关资料收集,各个链接都已给出. 资料,不可能非常完整,以后不定期更新. -----------------切割线----------------- 这个哥们总结的非常好啊,看完 ...