西门子全系列PLC销售咨询请加QQ178725208留言(记得附上您的联系方式哦),我们会以最快的速度回复您的

Fri

13

Jan

2012

浅谈RS232通讯和RS485通讯

今天天气不错,挺风和日丽的。打开热线平台一看,还真没多少人。忽然间,一个客户打电话进来。
 客户:“老师(听听,多客气的客户啊—我默默的想),我接触PLC不久,对通讯这个看不见,摸不着的东西特发愁,没什么基础。”
 我:“您遇到什么问题了呢?”
 客户:“老板让我用200PLC自由口实现一个功能。希望200PLC和另外一个232设备做通讯,现在我接上线后,发现怎么也不能通讯,程序是之前项目已经使用过的,肯定是能用的。老师您能给我一些建议吗?”
 我:“那您目前硬件是怎么设置的呢?”
 客户:“硬件我都组建好了,我把那两个9针(孔)的通讯口都连好了。我很辛苦的查到200PLC的通讯口管脚定义和232设备的管脚定义。目前,硬件没有什么问题滴。”
    听的出来,俺们的客户还是很认真的在做项目。但是200的PLC是485接口,不能和232接口直接相连的啊。想到这里,我问客户:“您不应该将232和485接口直接相连的呀。”
 客户:“232?485?哦,你是说485协议吧,我们不用那个协议的,我们的要求是定时给一个232设备发送如下代码……。”
 我:“不是不是,我是说接口类型。”
 客户:“对啊,接口类型都是9针(孔)的啊,是一样的。”
 我:“这样啊,那我给您给解释一下232和485的基础知识吧。”
 客户:“老师,是这样,我在很多书上看到过你说的那个什么232,485,本来就是两个9针(孔)的东西吗,把我搞得晕晕的,您能不能直观的对比一下,我有个大概形象的理解就行,不需要很理论、很严谨、很天衣无缝。”
   看来,客户还是一个文人,看人家这排比句说的多好啊。
 我:“既然您这么想,那我们一起来看这样的一个实验:发送同样的二进制数据:看看232和485的波形有什么差别?”
 客户:“好,好,我看行!”
   恩,我看也行,于是乎我将以下示意图发给客户。
  
 
       
                    图1  232波形示意图
 客户:“您的图很好,可是我没看懂啊?”
 我:“哦,那我们一起看看图1吧。图中纵轴是电压值,横轴是时间值。蓝色是232通讯波形。我们此时显示的波形的数据是2#1000 0000 
 一般而言,232接口的高电平“1”是用-5~-15V的电压表示,低电平“0”是用+5~+15V的电压表示,结合图1,高电平“1”的电压为-10V左右,低电平“0”的电压为+10V左右。
 客户:“那485的波形有什么特点呢?”
 我:“我们一起看一下图2吧。图中纵轴是电压值,横轴是时间值。红色是485通讯波形。我们此时显示的波形的数据是2#1000 0000 ,和232接口的数据是一样的。
 

                图2  485波形示意图
 一般而言,485接口是差分输出的,高电平“1”以两线间的电压差为+(2—6)V表示;低电平“0”以两线间的电压差为-(2—6)V表示。结合图2,我们可以看出高电平“1”的电压为+5V左右,低电平“0”的电压为-5V左右。
 客户:“哦,看来二者的电平是有差别的。”
 我:“对啊。”
 客户:“哦,看来都是9针(孔)其实也是不一样的啊。”
 我:“那咱再举个形象的例子帮您理解一下吧。”
 我们使用笔记本电源时,是不是看到三孔的插座就可以连接电源呢?其实还应该考虑一下,这个三孔的插座的电压是多少?110V?22V?380V?我的笔记本电源需要的电压是多少呢?我们不能只看到接口形式基本相同就不考虑其背后的电压等具体因素。当然了,232和485还有其它的区别,比如说通讯的距离方面,232通讯距离相比485要近很多。再比如:232通讯通常不连接多个从站,而485通讯可以连接多个从站等等。这里就不一一详述了。
 客户:“谢谢,谢谢。看来,我需要重新设置硬件和接线了。谢谢。”
     这个通讯接线的问题就这样帮客户解决了,看来基础知识对于我们的通讯还是很有帮助的。 
 好了,又一个热线进来了,下次见。

2 Comments

Fri

13

Jan

2012

西门子S7-200 PID向导中的量程如何设定

来自西门子技术支持热线的故事:PID向导中的量程设定很高兴有机会和大家在网络上进行交流,我是来自热线的工程师,主要负责PLC产品的技术支持,在热线上工作,有个特点,每天可以接触到各种各样的客户,但同时,每天面对的问题却大同小异,有可能一天有好几个客户问同一个问题,每当这时我都怀疑自己是不是打错电话了,用最近比较流行的话来说就是:“你答或者不答热线,客户就在那里,不悲不喜,你解释或者不解释原理,问题就在那里,不多不少,让客户来我这里,或者,让我住进客户心理,沟通,相知,解决,欢喜!”其实,作为热线工程师,当听到客户问题解决的时候,那种喜悦的心情是难以言表的,我们也希望能够与客户一起更多地经历这种时刻。
    希望您看完我今天讲解后,也能进入那种相知,欢喜的状态,如果是这样,千万别忘了在回帖中告诉我们。
    那我就来说说,那个一天碰到好几个人同时问的问题——PID向导量程设定。其实,用过回路表编程的客户都知道,在回路表中是需要将设定值,反馈值都转换为0.0-1.0之间的实数,这个过程比较繁琐,很容易出错,而使用向导则省略此繁琐操作,但没想到很多客户在设置时感觉比较模糊。这里大家需要注意以下几点: 
    1  设定值与反馈值从物理意义上来讲是一个量,所以他们的实际量程范围是一样的,比如在加热炉温度控制中,传感器测量的温度范围为-20°C—100°C
 那么设定值与反馈值的范围就是-20°C—100°C,那么在向导中的设定值范围如下图
 

 
   2 反馈值的量程范围要根据所使用的模块来确定
   在上面的例子中虽然反馈值的物理量范围-20°C—100°C,但送到PLC内部则有两种可能,第一种是用变送器将温度信号转换为4-20MA电流或者-10V-10V电压,然后通过测量标准信号的模拟量模块输入,比如EM231(6ES7 231--0HC22--0XA0)。如果是-10V-10V,则范围应设为双极性,-32000-32000。我们以4-20MA为例,那么此时反馈值的设置应为下图
 

 
    第二种情况,温度信号通过热电阻或热电偶模块直接送进来,那么此时量程范围应为实际值的10倍,即-200—1000,如下图:
 

   3 回路输出并无实际的物理意义
   在输出的量程设定上,并无实际物理意义,大家可以将其理解为输出的百分比,那么对应到模拟量模块的输出上就是0-32000(0-10V)或-32000—32000(-10V-10V)或6400-32000(4-20MA),我们以4-20MA输出为例,如下图:
 

   4 在调用向导子程序时,设定值可直接输入实际数值
   假如此例中,加热炉的温度需要控制在50°C,那么在SETPOINT管脚,可直接输入50.0,无需将其转换为0.0-1.0的实数。如下图:
 

 
   关于PID向导量程设置,在《西门子 S7-200 ? LOGO! ? SITOP 参考》中有详细说明http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=A0136

4 Comments

Fri

13

Jan

2012

如何用MD720-3实现发送英文字母与变量结合的短信与短信群发

来自西门子技术支持热线的故事:如何用MD720-3实现发送英文字母与变量结合的短信与短信群发

如何用MD720-3实现发送英文字母与变量结合的短信与短信群发
 
 热线上经常遇到客户询问如何使用200PLC和无线通讯模块MD720-3实现发送短信的问题。一般情况下,参考文档A0324就可以实现发送一条固定内容的信息给某一个手机号码的基本功能。但如果我们需要发送的内容是一个变量(如温度值或者压力值等),并且需要给这个变量作一个说明,又或者我们需要把这条信息群发给多个手机号码,又如何实现呢?下面我们就这些问题进一步来讨论:
 通过对文档编号A0324的学习。
 文档编号:A0324
 下载链接:http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=A0324
 我们已经清楚的了解到SMS_init, SMS_send功能块的参数:如图1.
 &VB1001定义了:SIM卡的PIN码,默认值为1234。
 &VB1006定义了:电信运营商提供的短信中心服务号。(该号码因电信运营商的不同而不同,请您咨询您所使用的电信运营商的客服人员)
 &VB1028定义了:收信方的手机号码。
 &VB1048定义了:短信的内容。
 


 图1
 由于&VB1001和&VB1006的值是定值,为了方便,我们先将其通过数据块写入到CPU永久存储区。如图2:
 


 图2.
 
 &VB1028和&VB1048可以根据我们的实际需求进行编程,实现较复杂的功能。在编程前,先让我们复习一下它们在CPU内部的存储形式。
 
 1) &VB1048:
 如图3.,将双引号中的字符Temperature:写入VB1048起始的缓冲,观察字符串的存储格式,字节VB1048保存的是字符串的长度。
 
 

    
                                                 图3.
 由此,我们可以分别建立两段字符串,一段保存文本字符,另一段保存变量字符,连接两段字符串就可以实现合并的功能了。
 举例来说:如果想要发送的短信内容是 “Temperature:*x.x”,其中*x.x是一个变量,那么我可以先将12个文本字符(Temperature:)拷贝到VB100开始的缓冲区中。再将变量写入VD0,通过实数转字符串指令将转化后的字符拷贝到VB300开始的缓冲区中,转换指令定义的字符串长度为6。然后通过字符串连接指令和块传送指令将完整信息发送到VB1048开始的缓冲区中。合并字符串的起始字节存放的是所有字符的个数,所以在块传送指令传送个数为1+12+6=19。如图4.
 


 

                                              
        
                                            图4.
 
 2)&VB1028:
 如图5,将手机号码“+8613888888888”写入VB1028,观察字符串的存储格式,其中VB1028保存的是字符串的长度。
 

         
       
                                                 图5.
 由此我们可以通过编程,分时拷贝新的字符串(手机号码)到VB1028实现多号码发送。那么我们在什么时候给VB1028写入新的号码呢?
 通过在线监控程序,我们观察到,当一条短信发送成功后,SMS_send功能块的参数V1000.5会有一次由“1”(如图6)到“0”(如图7)的变化。利用这个下降沿我们就可以写入新的号码,启动新的发送了。
 特别注意的是,红色圆圈标注的管脚:每一个新的发送请求必须用脉冲触发。
 


                                                  图6信息发送中
 


                                               图7信息发送完成
 
 例如,假设有一个报警事件,用户希望一旦报警条件满足,就能发送一条短消息给3个手机号码,应该如何实现呢?
 


 


 


 
 
 程序解析:
 
 程序上电的第一个扫描周期,先写入第一个号码,复位发送计数标志位MB3。复位新号码触发位M0.0。当报警事件触发时,执行SMS_send。
 当V1000.5捕捉到第一个下降沿时,计数标志位自加一,并复位M0.0。下一个扫描周期,MB3=1条件满足,写入新的号码,触发位M0.0置位,再次执行SMS_send子程序。
 当V1000.5捕捉到下一个下降沿时,计数标志位自加一,并复位M0.0。下一个扫描周期,MB3=2条件满足,写入新的号码,触发位M0.0置位,再次执行SMS_send子程序。。。
 当报警事件再次触发,重复上述步骤。
 最后,需要强调的是,SMS_init; SMS_send; SMS_receive; SMS_tele_handle;这四个功能块在每一个循环周期都必须调用,且执行条件为SM0.0。
 
 
 库程序的下载链接地址:http://support.automation.siemens.com/CN/llisapi.dll?func=cslib.csSearch&objaction=cssearch&lang=zh&siteid=cseus&query=&query2=21063345&content=adsearch%2Fadsearch%2Easpx

0 Comments

Fri

13

Jan

2012

S7-200的以太网通讯模块CP243-1使用中的常见问题

来自西门子技术支持热线的故事:CP243-1的困惑
大家好,作为一个热线工程师,今天通过一个热线案例和大家聊一下S7-200的以太网通讯模块CP243-1使用中的常见问题。
 过程是这样的:
 客户:CP 243-1模块和S7-300系统通讯,为什么可以收到数据,但是不能写呢?
 me:首先检查程序块的返回值,“ETH0_XFR”块的 “Done” 和 “Error”表明了通讯的状态。
 客户:检查ing……130
 


 me: (心里活动:嗨!高兴!常见问题!好解决!)每个“ETH0_XFR”执行一个连接里的一次数据传输(读操作或写操作,每个连接下可组态多个数据传输)但是同一连接下的多个数据传输不能够同时执行,也就是说“ETH0_XFR”不能同时执行多个。第一个方法,可以编写轮询程序解决,也就是说执行完一个在执行第二个…..编程思路…..此处省去1000字;(详细内容可以参考下面文档中Modbus 主站轮询程序)口干ing,喝口水继续…第二个方法,不同连接下的数据传输可以同时执行,所以要是懒得再编程,连接资源也富裕,就再建一个连接,分别读写。(心理满足!心想肯定没问题了!)
 http://www.ad.siemens.com.cn/download
 文档编号:A0136
 客户随后就去处理,我想也应该没问题了,于是信心饱满的关掉了这个问题。可是,过了一会儿,电话再次响起:
 客户:程序修改后,报错代码变了。现在报:6号错误。
 

 Me:嗯,于是首先打开STEP7 Micro/Win 的帮助查看错误描述。一看(心理活动:晕!好抽象的描述)。
 

 (其实6号错误也是通讯过程中容易出现的问题,这是为什么呢?我们打开向导看一看,如下:)通讯对象的数据区是DB76.DBB90-DB76.DBB129 一共40个字节。于是问客户,S7-300站检查过程序吗,DB76是否存在?数据区够不够长?
 

 客户:我只是做200站,也不能确定300站那边的状况,应该没问题吧…..去联系一下对方,稍后打给你。
 Me: 好的!(心理-历史再一次证明,做通讯,什么最终要!!答:沟通)
 30分钟后,电话再次响起,是做S7-300站的工程师:
 客户:咋了!我检查哪部分?(客户有点急)
 Me:通讯的数据区您都检查了吗?都存在不?
 客户:没问题!
 Me: DB76建立了吗?
 客户:建立了!
 Me: DB76.DBB90在不?
 客户:在!
 Me:DB76.DBB129在不?
 客户:在!…..等等,没建那么长,我不用行不行?
 Me: 不行,在向导里设定的数据区必须都要存在。
 于是,经过修改,问题解决了!我想,终于解决了!但是第二天,客户又打过来了电话:
 客户:您好,我现在又增加了一个S7-300的站,为什么总连接不上,程序报错:5号。
 

 Me: 老步骤,打开帮助看错误描述。
 

       很明显,和对方的连接没有建立,于是和客户一起检查了所有的参数,都应该没有问题。所以考虑问题还是出在300站那边。对于S7单边通讯,CP343-1作为服务器会占用CP343-1的一个S7连接资源,同时,还会占用CPU的一个S7连接资源。如果组态的时候把CPU的资源硬性分配给其他通讯,可能会造成通讯资源的不足,如下:此时CPU的8个资源已经固定分配给了PG/OP/S7 basic communication,所以资源明显不够了。
 

 后来果然经过检查,果然是这个问题。于是问题就解决了!
   通过客户的这一连串的问题,我们可以看出CP243-1使用起来还是有很多细节需要注意的!而且,通讯过程中问题往往不是自己这边就能解决的,还是那句老话-作通讯神马最重要-沟通!

1 Comments

Fri

13

Jan

2012

西门子S7-200 自由口通信,小错误引发大麻烦

来自西门子技术支持热线的故事:S7-200 自由口通信,小错误引发大麻烦

 

在热线上经常能碰到客户咨询关于S7-200 PLC自由口通信的问题。200的自由口通信需要通过编程设置串口的工作模式,安排发送和接受指令的触发顺序,还要设定接收的起始和结束条件。对于刚刚开始使用200的工程师来说,的确有很多细微处易犯错误。一般碰到客户抱怨通信不上的问题,就要逐一帮客户确认编程配置是否正确。虽然麻烦,不过逐条查下去,总能查到错误所在并解决问题。但是有一次客户遇到的问题颇出人意料,还真耗费了一些时间。
 客户反应在编写了自由口通信程序之后,PLC可以发送数据给通信伙伴,但是却收不到任何伙伴方发出的数据。能发送数据给对方,说明通信端口设置没有问题。极有可能是端口被其他通信指令占用导致无法进入接收状态。比如说用常开点调用XMT,或者没有对接收的故障状态进行判断并终止接收,从而导致后续的XMT和RCV都无法被正确执行。客户表示他的程序并不存在这种情况。但是为了测试问题所在,客户下载了一个仅包含条件触发RCV的程序下去,还是接收不到数据。监控程序RCV指令已被正常执行。 
 那么是不是接收的起始条件设置不当?客户使用的是起始字符,这并无不妥。并且改成空闲线检测之后,问题依然存在。难道是对方发送的信号有问题?用串口调试软件来测试,是可以接收到的。眼见这几个常见错误都没能cover住这个问题,我只好从头一步步地跟客户确认。但是还是没能发现任何破绽。郁闷之下,只好让客户把程序发过来看看。
 第一次检查程序的时候还真没注意到问题出在哪里。等到看出来了才觉得啼笑皆非:
 


 不知道大家看出来没有?客户在设定完空闲线时间SMW90和消息定时器溢出值SMW92后,惯性地将接受地最大字符数SMB94也写成了传送字SMW94。而西门子PLC的高低字节是逆序的,也就是说SMB94为高有效字节,SMB95为低有效字节。见手册中的如下说明:
 


 结果就是最大字符数100被传给了SMB95,SMB95是神马呢?神马也不是,总之与接收条件无关。而真正最大字符数存储字节SMB94被赋值为0。最大字符数都为0了,那当然是接收不到任何数据了。小马虎一下就耽误了这许多时间,各位看官引以为戒吧!

3 Comments

Fri

13

Jan

2012

西门子PLC编程中如何使用好符号表

在软件规范里,变量命名本身就是一门学问。
 S7-200的符号表就是做变量命名工作的,毫不夸张的说,每一个使用S7-200的人都应该熟练掌握它,如果你对它不屑一顾,觉得自己从来不用它也同样可以做得很好,那么,你还不能算一个真正的程序员。
 使用符号表,有程序可读性更好,资源分配一目了然,修改灵活,输入纠错等优点。
 不喜欢使用符号表的,我猜测原因之一可能是怕麻烦,速度慢。其实这是认识上的误区,熟练使用符号表后输入速度反而要快。不相信吧?
 1.符号表具有自动完成功能,当有几个变量频繁交替使用时,不需要记忆地址区别,只需要键入符号名的前几个字母,就会自动提示,所以输入反而要快。
 2.做过指法强化训练的人应该有体会,当一个单词或汉字编码中有连续字符需要用同一只手甚至同一个指头输入时严重的影响输入速度,如果一篇文章中的汉字大多数编码都依次分布在左右两只手上,输入速度会高很多,而且不容易出错。
 比如地址变量 VW3234,六个字符全部使用左手输入,速度慢,且易出错。直接地址出错后较难检查出来,符号名出错的话立即会有在线提示,而且编译不会通过。符号名降低出错率实际上是提高了速度。
 
 两个符号名使用的小技巧:
 一.快速修改变量地址(在另一帖中已贴过)
 1.符号名使用中(否则,先CTRL+Y切换)
 2.在符号表中直接修改符号对应的变量地址
 3.OK
 用符号表修改址有有个好处是数据块中的地址也会同时修改,这个比查找替换好用(数据块中不能选中某部分后在局部范围内全部替换)
 
 二、快速修改符号名(比如符号名 S1 已在多处使用,现在想将它改成 S2)
 1.符号名未使用(如正在使用,先CTRL+Y切换)
 2.在符号表中直接修改符号名字
 3.CTRL+Y,符号名有效
 4.OK
 注意上面两个小技巧中,符号名是否使用中的条件正好是相反的。
 
 正是因为上面两条快速修改的技巧,后期内存规划非常方便。在编程前可以不考虑内存位置安排,只定义符号名,内存地址可以随便输入(当然不要重叠),这样着重于功能实现与调试,完成后按内存规划要求,将符号名剪切粘贴调整排序,最后用Excel填充功能连续生成地址,一个程序使用到哪些内存,看看符号表一目了然。
 
 增加一个比较另类的“技巧”,有时用这个方法比搜索准确高效
 有时需要快速判断某变量或定时器是否重复使用,比如VW100
 1.假设VW100的符号名是S1(如果没用定义一个),令符号名使用中
 2.直接修改符号名为一个未用的符号(如后面随便加一个后缀)为S1_ttttt
 3.编码代码(不是全部编译),下面输出窗口提示错误数(如果为1则只存在1处引用)
 4.滚动输出窗口,双击错误提示行,可快速定位到引用处
 5.切换到符号表里撤销修改
 这个方法在需要查连续查看多个变量引用数时比较方便,界面不需要切换(用查找法会不断变化当前光标)
 

quote:以下是引用无名在2011-04-26 09:53:23的发言:
利用好符号,符号编排有规律并且整齐划一,
在“查找/替换”的时候非常有用。
相同设备做成标准的函数块,做好一个之后,
其他变量只要替换就可以了。
开始编程前,变量提前规划好,编程思路清晰,函数块标准化,
那么所谓的编程大多时候 就是“复制/粘贴”+ “查找/替换”。

这条可算是符号表应用的精髓,我经常这么干,对相同的工位,将符号表编成一样,每个工位赋以一个不同的后缀,将子程序复制一份后直接查找替换后缀即可。这个在以后修改程序时比较方便,只需要修改一个工位,同样复制后查找替换,防止漏改或手误。

 

 

本文摘自西门子工业自动化论坛

0 Comments

Fri

13

Jan

2012

西门子S7-200如何实现发送无限脉冲?

 

来自西门子技术支持热线的故事:S7-200如何实现发送无限脉冲?

西门子的S7-200应用普遍,热线中大家常常就实际的应用,来问些与基本功能相关的衍生问题。
 某次我遇到客户问这样的问题,Q:S7-200如何实现发送无限脉冲?这个客户提出问题的范围较大,我只能通过询问来缩小解答范围了。
 A:您是运用CPU本体上高速脉冲输出通道来实现运动控制的吗?
 Q:是的。
 A:那您是用什么方式来发脉冲的呢?
 Q:就是输出高速脉冲啊,能有什么方式啊?
 好吧,接下来,我简单讲解了本体上高速脉冲输出,来实现运动控制的方式。
 对于S7-200 DC/DC/DC,通过Q0.0和Q0.1发送脉冲来做运动控制,一般可以采用PTO/PWM向导配置;PLS指令编程; MAP运动控制库函数实现。
 (MAP库函数:http://support.automation.siemens.com/CN/view/zh/26513850
 中文说明:http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=A0534)
 Q:哦,这么多方式,那能帮我都讲讲吗?
 ~~~~~~遇到这样的问题,我建议您参考下面的讲解:咱们现在按照上面提到的方法,分别做来看看:
 1.向导配置:
 A. 在作PTO向导配置时,选择模式:单速连续旋转。
 


 调用功能块PTOx_RUN,实现单速连续旋转,发送固定频率的脉冲,可运用Abort引脚来停止。
 


 B. 不论在向导配置时,包络选择怎样的操作模式,在向导配置完成后,调用功能块PTOx_MAN,发送无限脉冲,通过RUN位来控制开始和结束。
 


 Q:这里A和B两种方法,同样都能实现发送无限脉冲,那区别在哪里呢?
 A:您问的很好,区别就在于你需不需要更改发送脉冲的频率。方法A的脉冲频率是向导配置时设定的,无法更改,除非您再从新配置向导。方法B的脉冲频率,可以在发送脉冲的过程中,进行实时更改。
 2. PLS指令编程:
 常用到高速脉冲输出的客户了解,在PTO手动编程时,你需要先去定义PTO/PWM寄存器。不论您要实现多段或单段进行脉冲输出操作,都需要定义所要发送的脉冲个数。那么如何实现发送无限脉冲呢?有的客户就会问:在脉冲个数SMD72里的计数值是有范围的啊?
 


 若在这个问题上,您可以使用下面的方法:
 A. 使能更新脉冲计数值,同时将脉冲个数设置为:-1
 


 B. 禁用更新脉冲计数值,同时将脉冲个数设置为:0
 


 这两种方法没有本质区别,如果您想更改PTO脉冲指令的话,需要从新给控制寄存器赋值,这里主要需要再从新触发PLS指令。
 3.使用MAP运动控制库函数时,首先需要注意的是,一些输入输出点的功能被预先定义好了。
 


 应用MAP库时,选择速度控制功能块,可以让轴按照指定的方向和频率运动,即也能够实现按照某个频率发送脉冲。但这个功能块只能通过Stop Block功能块来停止轴的运动。
 

4 Comments

Fri

13

Jan

2012

PLC怎样缩短程序扫描周期

提高PLC运行效率,缩短完成相同任务时的执行时间。
 提醒:初学者不必在意本文归纳的做法,以程序易读、规范为目标,完成功能要求即可。
 1、可以用“字”的时候尽量避免用“双字”,可以用整数时,尽量避免用实数。
 2、优先使用富余的(硬件连接以外的)IB、IW、ID、QB、QW、QD,其次是M,S;
 3、尽量避免数据类型转换,不得不用时,尽量用AC存放中间变量,减少转换次数。或者编程时先预留出存储空间,比如:用VW2存整数时,VW0空出不用,就可以直接以VD0的形式来进行访问VW2中的数据;
 4、减少非必要网络扫描,把可以设条件执行的网络(特别是AIW、AQW),归类到子程序中作条件调用(例如定时中断);
 5、用XOR指令实现任意位取反(这指令略有难度,调试中更需要认真对位,编程时建议用二进制数);
 6、在保证工艺要求前提下,适当减小发生中断的频率;
 7、子程序应该尽量减少条件判断的次数,规格化子程序进出口参数,从而减少代码冗余。
 8、对于有重复性、耗时的任务,应采用分周期处理;其中包括:把初始化工作分摊到多个周期完成。令多个PID回路的采样时间略有差别,以避免在同一周期内产生多个中断调用,让扫描周期更均匀稳定。
 9、对于输入数据较少的子程序调用,可以先判断输入数据是否有变化,如果没有变化(比较方法可参考48楼),可以直接跳过子程序,从而减少扫描周期。
 10、尽量把在V区的位变量安排在V511.7内,把使用频率高的VB/VW/VD变量,安排在V4095内,可以缩短程序扫描周期。
 11、SM0.0若和其它信号串联,只增加程序大小和执行时间,没有别的作用(如果网络已经满足了左侧必须的触点,没必要再串接SM0.0);
 12、没必要共享信号时,放置在同一网络里的多条指令,会产生额外的进出栈操作(具体可以转成STL来分析),而且如果不是逻辑要求,应避免横向串联,这样至少可以减少一个“与”指令。好处仅仅是放在一个网络里,感觉紧凑一点。
 13、合理使用立即IO指令(尽量减少使用)节约PLC处理立即指令的转换时间。
 14、计算中尽量使用计算结果存储器,而不用过渡存储器。
0 Comments