精华内容
下载资源
问答
  • 紫金桥的OPC驱动就是OPC服务器的一个客户端程序。关于紫金桥OPC驱动的一些标准用法,请查考紫金桥帮助文档,这里着重介绍如何利用紫金桥OPC驱动的特殊选项增强通讯效率和可靠性

    随着OPC规范的普及和推广,OPC接口技术已被大量用于数据采集、自动化控制及生产信息管理中。当我们的应用程序作为OPC客户端与OPC服务器进行数据交互时,OPC客户端的兼容性和对特殊情况的处理能力将直接影响应用过程能否成功。紫金桥的OPC驱动就是OPC服务器的一个客户端程序。关于紫金桥OPC驱动的一些标准用法,请查考紫金桥帮助文档,这里着重介绍如何利用紫金桥OPC驱动的特殊选项增强通讯效率和可靠性。

    如果OPC服务器是严格按着OPC规范编写,并且经过科学严密的测试,以下配制过程是不需要的。但在一些特殊情况下,运用以下功能确可以保证你们应用过程顺利进行,提高通讯可靠性。

    利用驱动冗余功能增加通讯的可靠性

    此功能通常用于在一套控制系统或数据采集系统中有多个OPC服务器,而这些OPC服务器的数据都是来源同一控制系统或监控对象。利用这一功能即可以增加通讯的可靠性也可以增加系统的可维护性。当其中一个OPC服务器出故障或者需要维护时,通讯仍可以正常运行。

    此功能设置过程如下:

    当进行OPC驱动设置时,在进入OPC设备定义对话框后单击“冗余”选项,会弹出冗余设置对话框,如下所示:

    在“冗余节点”框中输入另一个OPC服务器所在节点(计算机)的计算机名称或IP地址,“确定”后即可。

    利用数组访问能力提高通讯效率

    OPC接口是基于COM机制实现的,因此OPC服务器可以将一个数据项与一组数据相关联。例如:OPTO的OPC服务器就实现数组数据项访问方式。通过数组访问方式OPC客户程序不仅可以用一个数据项一次从OPTO的OPC服务器获得一组数据,也可以使用OPTO的OPC服务器以数据块的方式一次从控制器获得多个数据,从而增加通讯效率。

    为了充分发挥OPC服务器的性能,紫金桥OPC驱动实现了这一功能。它的设置过程如下所示:

    当使用OPC驱动进行数据项连接时,点击“增加连接项”按钮时会出现如下所示对话框:


    在“数据项”中输入数组的名称,然后在“索引”中输入当前连接在数组中的序号(序号是从零开始的),则可以对数组进行拆分与数据库中的点参数相关联。

    以上功能是紫金桥OPC驱动特有的功能,在很多项目已经实际应用过,并起到良好的效果。

     

    展开全文
  • 效率和可靠性之间挣扎

    千次阅读 2008-01-09 02:22:00
    写程序,完成功能是最基本的要求,但要应对真实世界的各种情况,则会追求多种目标,如...其中,效率和可靠性是一对矛盾,需要小心面对。举个例来说,使用asp.net从SQL Server数据库中读取数据时,我们一般会使用SqlDat
     
    写程序,完成功能是最基本的要求,但要应对真实世界的各种情况,则会追求多种目标,如性能、稳定性、可扩展性、可维护性等。然而,在某一个历史阶段,有些目标之间是相互冲突的,需要程序设计人员选择合适的策略,在冲突与矛盾中寻求平衡,以达到最佳的综合效果。其中,效率和可靠性是一对矛盾,需要小心面对。
    举个例来说,使用asp.net从SQL Server数据库中读取数据时,我们一般会使用SqlDataReader。.如: SqlDataReader reader = cmd.ExecuteReader();
    获得reader对象之后,一般采用循环语句逐条读出记录,如
    while(reader.Read())
    {
           reader[“UserName”].value.ToString();
           reader.GetString(1);
    }
    在上面的循环语句中,我采用了两种方法来读取数据。第一个语句读取记录的第1个字段:UserName,并将其转换成字符串,第二条语句直接根据索引号,返回字符串。已经有很多文章说明,用第2条语句的方法比用第1条语句的方法,效率更高(可以去理解和测试一下)。
    毫无疑问,我在程序中会追捧第2第语句的方法,即便只会带来少许的性能提高,在成千上万次数据读取中,差别就明显了。
    根据效率优先原则,我选择了第2条语句所采用的方法来读取数据。但问题犹如幽灵,总会在你得意时对你当头一棒!假设字段的内容为空(在这数据库表中大量存在)时,你将会遭遇一个错误:“数据为空。不能对空值调用此方法或属性。”这个错误会让你手足无措。
    但是,你采用第1条语句的方法,在字段值为空时,却不会有前面的错误。由此可推断,微软在实现GetString()时,并没有打算处理数据为空的情况。效率优先原则在这里遭遇了挫折。系统漏洞百出,再高的效率也没有多大意义,尤其对于面向公众的信息网站来讲,更是这样。
    是不是就放弃第2条语句的方法,全部采用第1条语句的方法呢?如果能够尽可能利用两种方法的优点就更好了。
    解决这个问题就要摒弃一刀切,根据具体情况具体分析。如果字段在定义时就不能为空的,就可以不用考虑空值的情况,采用第2条语句的方法,以提高效率。如果字段定义可以为空时,则采用第1条语句的方法,以提高可靠性。
    当然,也可以先进行空值判断,再采用第2条语句的方法,如:
    string userName = reader.IsDBNull(1)?null:reader.Getstring(1);
    这样,就可以在保证可靠性和提高效率之间都有所照顾。
    类似这样的效率与可靠性之间的矛盾,在程序中大量存在。有时可能为了应付发生概率很小的意外,却要写上大段大段的代码来进行检测、分析和处理。
    从某处看了一段使用FileUpload控件来上传图象的代码。点击浏览按钮,可以选择相应图片文件,并使文件全路径显示在控件的文本框中。然后再通过一段代码来实现上传:
                imagePath = upImage.PostedFile.FileName;
                //取得图片类型
                imageType = imagePath.Substring(imagePath.LastIndexOf(".") + 1);
                //取得图片名称
                imageName = imagePath.Substring(imagePath.LastIndexOf("//") + 1);
                string tmp = imageName.Split('.')[0];
                string hashImageName =tmp.GetHashCode().ToString() + "." + imageType;
     
                //判断是否指定图片格式
                if ("jpg" == imageType || "JPG" == imageType || "gif" == imageType || "GIF" == imageType || "bmp" == imageType || "BMP" == imageType || "Bmp" == imageType)
                {
                    imageUrl = "~/Images/" + hashImageName;
                    try
                    {
                        //建立虚拟路径
                        mPath = Server.MapPath("~/Images");
                        //保存到虚拟路径
                        upImage.PostedFile.SaveAs(mPath + "//" + hashImageName);
                        Response.Write("图片上传成功!");
                    }
                    catch(Exception err)
                    {
                        Response.Write(err.Message + ",图片上传失败!");
                    }
                }
                else
                {
                    Response.Write("<script language='javascript'> alert('对不起!请您选择jpg/bmp/gif格式的图片!');</script>");
                    return;
                }      
            }
     
    这一段代码,对文件格式进行了判断,如果格式是指定的图片格式之一,则执行上传。一般情况下,这段程序没有问题。但是,当我选择了图片之后,却人为修改了控件文本框中的路径和文件信息,修改后的文件可能并不存在,此时会发生什么呢?
    我曾以为程序不会正常运行,上传图片会失败。然后实验的结果却是显示了“图片上传成功!”。查看服务器上图片文件夹,发现确实有了指定的文件名,但图像大小为0字节。这说明这个成功的信息是个假象!(看来有必要去理解SaveAs()的真实原理)。
    为了防止原文件不存在,却能上传成功的假象出现,在进行上传之前,有必要对原文件是否存在进行验证。于是我前面的代码前加了一个判断语句:
    if (File.Exists(upImage.PostedFile.FileName))
    {
    }
    这样,就可以得到这样一个逻辑:
     逻辑图
     这一个流程图,两次判断对于大多数操作来讲,没有任何意义,如果不要这两个判断,效率会更高。但对于少数不按“规矩”办事的操作来讲,这两次判断必不可少,没有就会出现问题。
    总而言之,要做优雅的程序,需要缜密的思考,仔细应对意外情况,同时尽可能保证效率,才能使程序的最大限度地接近期望的目标。
     
    展开全文
  • TCP保证可靠性:(1)校验(2)面向连接(3)序号确认序号(4)确认应答机制 (5)超时重传机制(6)流量控制 (7)拥塞避免TCP提高效率:(1)滑动窗口(2)快重传 (3)延迟应答(4)捎带应答TCP保证数据...
    TCP保证可靠性:
    (1)校验和
    (2)面向连接
    (3)序号和确认序号
    (4)确认应答机制 
    (5)超时重传机制
    (6)流量控制 
    (7)拥塞避免
    TCP提高效率:
    (1)滑动窗口
    (2)快重传 
    (3)延迟应答
    (4)捎带应答

    TCP保证数据传输可靠性
    1. TCP面向连接——“三次握手、四次挥手”
    TCP在建立连接时需要“三次握手”建立连接,“四次挥手”断开连接
    首先看一下“三次握手、四次挥手”的过程以及客户端和服务器的状态变化

    在上图的“三次握手、四次挥手”的变化过程中,可以看到一个状态“TIMEWAIT”,那这是什么呢?
    (1)率先断开连接的一方会进入TIMEWAIT状态,一般TIMEWAIT == 2*MSL,(MSL:报文的最大传输时间)。
    不论在“三次握手”还是“四次挥手”过程中,最后一个响应报文ACK都不能够保证正常到达对端,为保证最后一个报文正常到达,率先断开连接的一方进入TIMEWAIT状态,如果在TIMEWAIT时间内,收到FIN报文,说明刚才发送的ACK发生丢包,若未收到任何报文,则说明刚才的ACK正常发送至对端。
    (2)为什么TIMEWAIT==2*MSL?
    MSL为报文传输的最大时间,2*MSL表示报文能够一来一回两次传输的最大时间。
    如果ACK报文没有丢包,则会在MSL时间内正常到达对端,之后的MSL时间内client不会受到任何报文(没有消息就是最好的消息),表明刚才的ACK对方接收到了;
    如果ACK报文丢包,则可能会在client等待的MSL时间内发送ACK,但中途丢包,之后client等待的MSL时间内,client一定会受到一个FIN,表明刚才的ACK丢包了,此时client会再次发送ACK响应。即,若丢包则一定会在2*MSL时间内重新收到一个FIN断开连接请求。
    (3)为什么是“三次握手”,不能是两次、四次、五次?
    首先我们看一下两次握手:

    三次握手:

    四次握手:
    四次握手,client率先发起建立连接请求,会导致server认为连接建立好,client认为连接没建立好,与二次握手情况相同。
    由此,我们也可以知道偶数次握手是不可以的。
    五次握手:
    五次握手与三次握手情况相同,但是三次握手已经可以解决最后一个报文丢包的问题,没必要用五次握手。

    2 确认应答机制

    3 超时重传机制
    针对在传输过程中的丢包问题,可以分为两类:一类是响应报文丢包,一类是数据报文丢包
    响应报文丢包:

    数据报文丢包:

    4 流量控制
    如果主机A 一直向主机B发送数据,不考虑主机B的接受能力,则可能导致主机B的接受缓冲区满了而无法再接受数据,从而会导致大量的数据丢包,引发重传机制。而在重传的过程中,若主机B的接收缓冲区情况仍未好转,则会将大量的时间浪费在重传数据上,降低传送数据的效率。
    所以引入流量控制机制,主机B通过告诉主机A自己接收缓冲区的大小,来使主机A控制发送的数据量。流量控制与TCP协议报头中的窗口大小有关。
    TCP报头中的16位窗口大小,指自己接收缓冲区的剩余大小

    5 拥塞控制
    在数据传输过程中,可能由于网络状态的问题,造成网络拥堵,此时引入拥塞控制机制,在保证TCP可靠性的同时,提高性能。
    拥塞控制:
    (1)慢启动:在开始发送数据时,发送少量数据,检测网络状况,以指数方式增大窗口大小,直至达到一个阈值SST1;
    (3)拥塞避免:之后一线性增长方式缓慢增大窗口大小,直至造成网络拥塞,此时窗口大小为W;
    (4)在网络拥塞后,立即将窗口大小降为1,再次进行上述过程;
    (5)慢启动:再次进入慢启动,但此时慢启动的阈值变为窗口大小最大值的一半(W/2);
    (6)拥塞避免
    (7).................

    超时重传和拥塞控制都是在数据丢包时的处理措施,但是二者在应用场景上有什么区别呢?
    超时重传:使用在有少量丢包时
    拥塞控制:使用在有大量数据丢包时

    TCP提升数据传输性能的措施
    滑动窗口
    在数据传输过程中,一次发送一个报文效率可能有些低,为了提高TCP的效率,引入滑动窗口,达到一次发送多个报文的效果。
    滑动窗口大小:是指,无需等待应答可发送报文的最大值

    2 快重传
    引入滑动窗口可以一次发送多个报文,在这多个报文中,可能出现某一个或某几个报文丢包的情况,此时引入快重传机制,在保证数据丢包后重传的可靠性的同时,提升性能。

    快重传和超时超时重传的比较:
    (1)快重传是在收到三个连续相同的确认序号之后才会触发的,若只发送一条报文,则系统只能依靠超时重传保证数据的可靠性;
    (2)快重传是在超时重传的基础上对于提高性能的改进。
    3 延迟应答
    延迟应答:在接收到数据之后并不立即应答,而是在等待一段时间时候再应答。
    若立即应答,可能会返回的窗口大小会较小;若等待一段时间,等上层将缓冲区内的数据拿走一部分,则返回的窗口大小会大一些,这样在下次传输数据时,传输的数据量也就会越大。
    窗口大小越大,网络的吞吐量越大
    4 捎带应答
    捎带应答:在主机B给出响应时并不只是向主机A发送ACK,而是将主机B想要发送的数据连同对主机A发送上一数据的应答一同发送给主机A,这样在保证TCP可靠性的同时,也提高了TCP传输数据的性能。

    展开全文
  • 可靠性/可维护性/效率

    千次阅读 2016-03-24 16:07:09
    可靠性(强制类型转换) 当目的结构的空间大于源结构的空间时,要重点关注内存访问超过源结构范围的情形,可能越界。 当目的结构的空间小于源结构的空间时,要重点关注对目的结构赋值不能完全覆盖源结构范围的情形,...

    可靠性(强制类型转换)

    • 当目的结构的空间大于源结构的空间时,要重点关注内存访问超过源结构范围的情形,可能越界。
    • 当目的结构的空间小于源结构的空间时,要重点关注对目的结构赋值不能完全覆盖源结构范围的情形,需要考虑字节序。
    • 在把某些变量或数组或结构强制转换成另一结构体时,需要考虑结构体的字节对齐问题。
    • 与结构体之间的强制类型转换相比,基本数据结构的强制类型转换更容易出现上面描述的情况,使用的时候,一定要慎之又慎。

    可维护性

    • 坏代码的特征
      • 重复代码
      • 函数行数超过50行,一个函数包含的功能太多
      • 函数入参不超过5个
      • 模块之间过度耦合
      • 逻辑表达式过于复杂
      • 函数调用层次过深
    • 如何评价可维护性
      • 可理解性
      • 可修改性
      • 可测试性
    • 圈复杂度的概念
    • 如何提高可维护性?
      • 提炼函数
      • 分解条件式
      • 针对复杂条件式引入临时性解释变量
      • 合并条件式
      • 合并重复的条件片断
      • 以卫语句替换嵌套条件
      • 重新命名函数
      • 剖析临时变量
      • 宏代替魔鬼数字
      • 查询和修改分离

    高效率

    • 从哪些地方优化?
      1. 循环体内工作量最小化
      2. 对重复的运算,应考虑将结果缓存为变量使用
      3. 避免不必要的内存拷贝
      4. 较大的结构体类型的入口参数,应使用指针传递
      5. 把最有可能性的判断放在最前面
      6. 在需要的时候才申请与释放资源
      7. 日志必须按合适级别分级打印
      8. 文件操作使用缓冲
      9. 字节对齐
    • 如何优化?
      1. 以空间换时间
      2. 使用模版赋值
      3. 减少压栈成本,宏代替函数,
      4. 改变判断顺序
      5. 应用层软件遍历查表
    展开全文
  • 健壮性和可靠性

    千次阅读 2017-05-26 16:24:00
    系统的健壮性(robustness)也称为系统的坚固性或坚实性,这是衡量一个系统能否从各种出错条件下恢复能力的一种测度。...提高可靠性的技术一般可以分为两类,一类是避免故障,在开发过程中,尽可能不让差...
  • 提高软件可靠性的方法技术

    万次阅读 2013-07-17 09:24:05
    提高软件可靠性的方法技术      1.建立以可靠性为核心的质量标准  在软件项目规划需求分析阶段就要建立以可靠性为核心的质量标准。这个质量标准包括实现的功能、可靠性、可维护性、可移植性、安全性...
  • Flume的事务机制和可靠性

    万次阅读 2018-01-11 19:10:38
    实际开发中,或者在面试中,总会碰到诸如Flume如何保证数据传输的完整?  一:Flume的事务机制  所以这就不得不提Flume的事务机制(类似数据库的事务机制):Flume使用两个独立的事务分别负责从soucrce到...
  • UDP是面向无连接的不可靠的传输控制协议,他不像TCP那样拥有众多机制来确保传输的可靠性,所以UDP传输效率更高,在网络中交互具有较小的时延。 发送方只需要将数据报发送给网络层,接收方也只需要接收数据,不需要...
  • AI 可靠性论文整理

    千次阅读 多人点赞 2019-09-25 11:35:10
    AI 可靠性论文整理鲁棒性 Robustness相关文献高优先级对抗样本设计与抵御鲁棒性评估其他鲁棒性研究次要优先级公平性 ...通过暴露和修复漏洞来确保AI系统的安全性和可靠性 识别并防御新的攻击 设计新的对抗性训练方...
  • TCP连接及可靠性提高性能详解

    千次阅读 2018-05-13 22:06:42
    一、TCP协议的特点 TCP全称为 “传输控制协议”...3、保证可靠传输(丢包重发,超时重传) 4、支持全双工通信 5、支持端口到端口的连接,每一条TCP连接只能有两个端点 二、TCP协议段格式 如下图: 解释各字段...
  • 微服务可靠性设计

    千次阅读 2017-04-18 10:51:26
    背景微服务化之后,系统分布式部署,传统单个流程的本地API调用被拆分成多个微服务之间的跨网络调用,由于引入了网络通信、序列化反序列化等操作,系统发生故障的概率提高了很多。微服务故障,有些是由于业务自身...
  • 如何提高软件可靠性

    千次阅读 2008-08-07 11:43:00
    一、软件可靠性定义 长期运行的稳定性(鲁棒性) 输出数据的正确性 异常情况的可记录性 二、影响软件可靠性的因素 1) 需求分析定义错误 由于分析失误,从开始就走上了错误的路线,向着错误的目标前进,以后实现中的...
  • 执行效率的大幅提高  ASP以源码形式存放,以解释方式运行,每次ASP网页调用都需要对源码进行解释,运行效率不高. ASP.net是把基于通用语言的程序在服务器上运行。不像以前的ASP即时解释程序,而是将程序在服务器...
  • 可靠性测试竟如此容易

    千次阅读 2019-09-06 14:06:52
    分布式系统具有廉价高效的特点,利用性能相对一般的PC横向扩展,提升服务器性能,通过软件来保障系统的高可靠性。 由于分布式系统存在API接口通信、微服务架构、节点规模大等特点,增加了系统的复杂性和出错的概率...
  • 提高代码可靠性的10个技巧!

    千次阅读 2017-12-12 21:55:15
    注释会遵循一定的标准,这就允许IDE其他工具以不同的方式来使用它们。  考虑一下这个例子:    在函数定义中添加的注释可以在使用该函数时进行查看,即使是在其他文件中使用该函数也同样可以查看注释。 ...
  • 在软件设计之前,为了提高软件可靠性开发的效率,首先要对开发活动进行策划。下图展现了软件可靠性计划制定中需要执行的活动以及每个活动的输入与输出。 软件可靠性计划制定的第一步是软件系统的概念设计。而软件...
  • 解决RabbitMQ消息丢失问题保证消息可靠性(一)

    万次阅读 多人点赞 2019-08-30 23:17:04
    工作中经常用到消息中间件来解决系统间的解耦问题或者高并发消峰问题,但是消息的可靠性如何保证一直是个很大的问题,什么情况下消息就不见了?如何防止消息丢失?下面通过这篇文章,我们就聊聊RabbitMQ 消息可靠性...
  • 系统性能评测和可靠性基础

    千次阅读 2012-09-05 17:43:54
    分析:软件可靠性是指在规定的条件下规定的时间内,软件不引起系统故障的能力。可用性是指系统在特定使用环境下为特定用户用于特定用途时,所具有的有效性、效率和用户主观满意度。可维护性是指软件能够被理解、...
  • Flume(9)flume的事务机制和可靠性

    万次阅读 2019-05-07 18:53:48
    Flume的事务机制 Flume使用两个独立的事务分别负责从soucrce到channel,以及从channel到sink的事件传递。 比如:spooling directory ...同理,事务以类似的方式处理从channel到sink的传递过程,如果因为某种原因...
  • 1、系统可靠性 系统正常运行的概率 系统平均无故障时间(MTBF)两次故障间系统能够正常工作的时间平均值,=1/失效率。 系统平均修复时间(MTRF)从故障发生到修复平均所用的时间。用于表示计算机的可维修性。 ...
  • 当producer向leader发送数据时,可以通过request.required.acks参数来设置数据可靠性的级别: 0:这意味着producer无需等待来自broker的确认而继续发送下一批消息。这种情况下数据传输效率最高, 但是数...
  • 重删系统的可扩展性和可靠性

    千次阅读 2012-06-23 16:16:42
    随着备份数据的增长,备份系统的地可扩展便是一个亟待解决的问题。NEC公司开发的HYDRAstor系统是一个可扩展的二次存储系统,并应用于企业领域。主要优势有:支持在线扩容,在线更新,同时能够容忍多个磁盘,节点或...
  • 嵌入式软件可靠性设计的一些理解

    万次阅读 多人点赞 2013-12-04 15:00:51
    这里着重谈一下作者自己对嵌入式软件可靠性设计的一些理解,通过一定的技巧方法提高软件可靠性。这里所说的嵌入式设备,是指使用单片机、ARM7、Cortex-M0,M3之类为核心的测控或工控系统。  嵌入式软件可靠性设计...
  • kafka数据可靠性深度解读

    万次阅读 多人点赞 2017-05-02 19:19:32
    Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark等都支持...
  • 以美国圣迪亚国家实验室为代表的研究机构提出的不确定性量化(Uncertainty Quantification)方法为切入点,研究其蕴含的关键理论问题,以此为基础初步建立了一套非精确概率可靠性理论,主要包括不确定性量化快速算法、...
  • 计算机网络的可靠性

    2014-04-09 17:24:55
    计算机网络的可靠性概念最早是在上世纪70年代出现,它具体是指计算机在给定的时间以及特定的环境内,保证所有业务可靠完成。计算机网络可靠性的决定因素有给定时间、特定环境以及业务完成能力,计算机网络可靠性可以对...
  • 引言 随着Web2.0的发展.信息量呈爆炸性增长.数据存储逐渐成为制约企业发展的关键...正在成为企业实现提高效率、降低成本的重要选择。HDFS是当前应用最广泛的云存储技术之一.本文详细分析HDFS云存储技术的可靠性
  • 怎样提高485总线的可靠性

    千次阅读 2006-05-20 09:25:00
     经过以上的软硬件共同处理,RS-485总线在应用系统工程中的可靠性大大提高,在通常的环境条件下,24小时连续开机,系统的通信始终处于正常状态,整机性能满足了现场工程的需要。  但是RS-485总线仍然只是一种...
  • <2>sendto ☆首先运行server,然后运行client,client向server发送消息,server收到消息: ★提高UDP的可靠性 UDP的传输效率比TCP更高一些,其在网络中交互时具有更小的延时,因为其一,发送方只要把应用字段全部...
  • 上一篇文章我们详细介绍了Queue队列Message消息,本章节我们主要聊一聊RabbitMQ使用必须考虑的问题,就是消息可靠性!在生产环境下如何确保消息的可靠性投递,我们首先需要考虑两个问题 1、生产者发送消息,是否...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 210,389
精华内容 84,155
关键字:

方式提高效率和可靠性