热门搜索:

上海西邑电气技术有限公司成立于1996年。在西门子公司广大同仁和工控领域各界朋友的关怀下埋头发展,一路走来已成西门子合作伙伴中的佼佼者。总部设在上海,办公面积1500多平方米,员工150余人。

    西门子通信线

    更新时间:2020-09-21   浏览数:155
    所属行业:机械 电工电气 工控系统及装备
    发货地址:上海市金山区  
    产品规格:西门子通信线
    产品数量:1000.00米
    包装说明:全新原装
    单 价:面议

    西门子通信线

    信誉,客户至上是公司成立之初所确立的宗旨,在公司领导的严格要求和员工们不折不扣地贯彻执行下发展延续至今。“假一罚十”一直是我公司的主动承诺。
    承诺一:1、保证全新原装进口   
    承诺二:2、保证安全准时发货
    承诺三:3、保证售后服务质量
    流程一:1、客户确认所需采购产品型号
    流程二:2、我方会根据询价单型号查询价格以及交货期,拟一份详细正规报价单
    流程三:3,客户收到报价单并确认型号无误后订购产品
    流程四:4、报价单负责人根据客户提供型号以及数量拟份销售合同
    流程五:5、客户收到合同查阅同意后盖章回传并按照合同销售额汇款到公司开户行
    流程六:6、我公司财务查到款后,业务员安排发货并通知客户跟踪运单



    随着200CN产品的退市和200Smart产品的升级,200Smart产品的功能越来越丰富,产品的市场份额也在不断增加,尤其近的V2.4版本增加了PROFINET控制器功能、默认携带开放式通讯库,给广大中小型项目的用户带来很大福音,相信该产品的市场会越来越大。

           我们在使用200CN、200SMART的时候,是否遇到过子程序堆栈限制问题呢?我是经常遇到,系统给子程序开辟的堆栈是64个字节,真正给用户做变量来使用的其实只有60字节,如果使用四字节变量,多也就15个变量吧!

           原来使用200CN时,我尽量控制接口变量的使用数量,但是这又是矛盾的:使用接口变量,有利于子程序的标准化,将子程序中的全局变量使用数量减少,甚至全部使用接口变量,才算的上是子程序块满足标准化的条件吧!如果子程序接口变量数量达到上限,子程序编程时必须采用全局变量的话,会降低子程序标准化的可能性,只要子程序中使用一个全局变量,那么这个子程序就不是标准化的块,需要重复使用时修改其中的全局变量,防止重复的全局变量导致程序逻辑出现异常。

          上个月在调试一个200Smart项目时发现,200Smart子程序的堆栈区,除受60字节限制外,还受16个变量的限制,即使我使用超过16个BOOL变量也是不允许的,16个BOOL变量才2字节啊,为啥剩余的L区地址就不让我用了呢?估计系统是按四字节变量计算堆栈使用情况的吧,16个变量,无论你使用BOOL型还是Real型,统统按变量个数计算,超出就不能用啦。

          针对系统的这一特性,我们怎么来大化的使用好200Smart的堆栈呢?下面我来说说我规避200Smart子程序堆栈限制的几个方法,和大家一起探讨交流,不当之处请各位专家批评指正!

    方法1:

           将BOOL型变量改成WORD型变量,一个WORD型变量可以包含16个位变量,这样在子程序中结合逻辑与指令,就可以顺利取出字变量中的位,进行位逻辑判断并将位输出顺利赋值到字变量的某个位,通过两个字类型的接口变量即可实现16位的输入、输出,参考附图1中的两个字类型的接口变量:

           

                                                                      图 1

    方法2:

           对于BOOL型接口变量多的子程序,压缩成WORD型变量外,需要多个两字节、四字节变量的时候,我一般采用几个DWORD型接口变量将全局变量的地址,传送入子程序中,子程序利用这些地址,通过间接寻址、数学和逻辑运算后,将计算结果通过间接寻址直接写入全局变量中,规避了子程序堆栈字节数和变量数的限制。

          主程序中调用子程序也很简单,直接赋值WORD型实参和DWORD型地址实参即可,参考下图2:

            


                                                                 图  2

            方法2中使用了间接寻址,存在的弊端是其他人比较难读懂程序,必要时要结合交叉索引检查变量使用情况。

          如果项目允许,我尽量将子程序简化,使用少的接口参数结合接口参数数量和类型的压缩,来实现多数项目程序的编写。

    S7-200的子程序SUB,一旦写好,用在程序中之后, 是不可以修改其输入输出管脚的。 因为你一旦动了管脚接口,调用这个子程序的地方,就会报错。报错以后还没法和STEP7一样可以通过更新只更新改动部分。



    西门子通信线


    正常处理的只有把原本的调用删掉, 从头重新调用,并为每个接口逐个分配变量。

     

    这相当讨厌。

     

    比方说我一个底层的设备,如果调试中发现需要增加些功能,实在不可避免决定要增加接口。而我主程序中已经对这个设备调用了几十次, 那就必须几十个实例都重来一遍。

     

    而这还不算完。

     

    谁敢保证这一次接口的变更就是后一次了呢?下一次如果还需要修改,就需要原样再来一次。

     

    估计换谁, 都受不了这种折腾。

     

    而这也是标准化编程的大忌。

     

    貌似许多人对标准二字有误解,看到我提出的标准化,就有些不服气。你万某有何德何能提出标准,俺们智力才艺都不比你差,凭什么要遵循你提出的标准,凭什么用你的标准而不是我自己的标准?我们国家历史上因为技术标准落后一步而受制于人,吃的亏大了去了。可不能重蹈这样的覆辙!

     

    而另外有一些人,则强调没有办法做到整齐划一的标准。理由是设备配置千差万别,没有一模一样的设备, 所以做不到标准化。

     

    错啦!都是属于对标准化的误解。 我们追求的标准化,是把系统做成搭积木一样的标准模块,每个模块自成体系,逻辑互不干扰。 通过接口与其他系统模块对接,不同的系统设计, 在接口不变的情况下,只需要更换相应的模块,即可以实现快速组装。

     

    而接口,也不是一尘不变的,可以根据需要随时改进,而在接口改动的时候,也只是对接的模块之间局部变更, 不要影响到整个系统。 不会因为接口的改动,而需要系统重新调试。

     

    甚至,我现在推广了二期标准化示例项目之后,下一步的计划就是对接口的优化升级。过去,我在开发阶段,采用的接口只是借用的别人以前做的, 现在终于有精力,腾出手来,把接口改造为我满意的样子。

     

    而我和我的团队成员,丝毫不需要担心接口的更改会导致影响到已有逻辑模块的运行, 甚至带来bug。

     

    这就是标准化设计的优势。心不累。不需要和以前一样,程序中改动一点点就紧张万分,就担心把整个系统原本正常运行的功能搞崩溃。  

     

    所以,我在开发SMART 200标准化架构的时候,首先就意识到子程序(库函数)接口不能更改的这个问题很严重。并认为有可能是众多人都不愿意投入精力在SMART 200系统做标准化的主要原因。

     

    所以首当其冲必须解决这个问题。

     

    我在写文章《【万泉河】SMART200也能做标准化》时, 提到了我解决了其中一些关键细节,其实其中个便是搞定了子程序可修改的问题。原本是我打算在培训课上首先传授给学员的课的内容。 趁这次征文机会,写出来, 与大家分享。

     

    而实现方法,其实很简单。

     

    即利用程序块的导出功能,把调用被改动的子程序导出为AWL的文本文件:





    然后在文本文件的调用中,修改到符合新版本的函数的语法,再重新导入即可。

     

    这里存在的问题是,不管是导入还是导出,操作之前软件都会自动编译,编译通过后才可以进行。 所以导出必须在修改接口之前,而在修改接口之后,导入之前, 需要把相应的SUB内发红的段落先删除。

     

    因而实时的存盘备份非常重要。 千万不能上来就改接口改子程序的逻辑,改过之后发现既不能导出又不能导入,那就尴尬了。

     

    由于AWL文件中是值寻址的,所以界面非常不够友好。 我通常是在文本修改阶段,只管语法正确,比如增加的数值变量,就先填上AC0,如果是离散变量,则暂时输入L0.0,等导入成功之后,在梯形图界面下,根据实际需求,更改为正确的变量。

     

    当然啦,如果有可能,尽量直接用搜索替换比如把原有的”AC0”替换为“AC0,AC0”。速度会快很多。

     

    所以,在使用标准规范中也包含了同一个类型的设备对象,尽量在同一个SUB中调用。 这样导出修改接口的时候只搞这一个文件即可。 而不必在整个程序范围去找,去把整个程序的SUB都导出来手工修改。

     

    那样儿,仍然会很累。

    目前,工控领域繁多,国产系列,欧美系列,日韩系列,每个都有自己的组态编程软件。虽然做自动化的,编程在搞软件的人眼里只是小儿科,但是能做到对每个的都熟悉还真就不是一件容易的事儿。首先软件的应用就是一个不小的挑战。下面来分享下我之前遇到的故事。

    由于本人目前所在单位产品系列比较多,用的也比较杂,很多时间和经历不得不放在学习新的软件操作,那么问题来了,不同的软件有时候是冲突的,记得2013年的时候,电脑装了西门子的step7,结果新的项目要用AB的PLC和触摸屏,Studio5000和SE7.0。结果怎么装也装不上。现场还有其他设备需要用step7调试,也不能重新做系统啊,没办法又搞了一台电脑,专门装AB的软件。本想着就这样对付用了,没过多久新的问题又来了,现场有一个伦茨的驱动,需要用伦茨的软件诊断一下,没考虑太多,直接安装在step7那个系统里了,安装倒是挺顺利,问题也顺利解决了,再用step7的时候怎么也编译不了,报了一个匪夷所思的警告“一致性检查错误”。当时正好一个西门子的朋友来我们工厂参观,请他指导一下怎么解决,他弄了半天终通过重装step7解决的。

    2014年,用博途V13做的设备已经发到客户里,16年设备批量生产的时候博途已经是V14,驱动软件starter也从V4.3 V 4.4到现在的V5.2, 没一次安装软件视乎都是诸多不顺,不是这软件安装不上就是那个软件冲突了用不了。记忆深刻的一次是2016年批量调试10台设备,调试好了5台,中途安装了其他软件,结果“杯具”了,每次下载触摸屏程序的时候都显示“通讯错误”。由于设备工期紧,只好拿同事的电脑暂时应急。从那时起,我下定决心一定要找到一个办法解决这个事情。上网查了一下,和同事一商量,直接换高配电脑,装虚拟机,不同软件装不同虚拟机里,虚拟机定期备份(这个比较关键,即使工期比较紧的时候出现软件问题也可以直接从服务器里把备份拷贝出来)。

    和领导说明情况之后,领导也是非常开明,二话没说,该投资的必须投资,于是我们二人直接换高配电脑成功,当时这电脑配置觉得可以,现在跑博途V15也是比较流畅。

    展示下电脑主要参数:

    处理器 i7

    主频   2.7GHZ

    内存16G

    一的遗憾是128G的固态+500G机械硬盘

    目前,我的电脑里装了3个虚拟机,AB软件一个系统,博途V13一个系统,博途V14一个系统,博途V15和step7 V5.6 SCOUT5.1都装在了外面。速度说不上有多快,对于我这样水平的选手来说足够了。




    西门子通信线



    http://www.hyzdhxt.com