S7-300问题解答 点击:3238 | 回复:36



ye_w

    
  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-23 12:43:04
楼主
关于上升沿和下降沿中使用L缓存的问题
s7 300,在使用上升沿下降沿的时候遇到一个奇怪的问题下面是例程:
      A     M     20.1
      FP    L     20.0
      JNB   _001
      L     1
      L     MW   900
      +I    
      T     MW   900
_001: NOP   0
这个是用lad编写转换成stl的语句,本意是m20.1上升沿让mw900加1,但是实际上却发生了只要m20.1为1的时候,mw900就一直累加,好像根本没有判断上升沿。后来我把FP改成了FN,判断下降沿,但是发现无论如何开关m20.1,mw900完全不累加。最后我实在没办法,把L20.0换成了M20.0,居然就一切正常了,无论是使用FN还是FP都跟想象的一样。我的整个程序就这么点,不存在L20.0交叉使用问题,不知这是怎么一回事?多谢大家!
问题补充:谢谢大家的回答,但是我还是比较疑惑,做一些补充:
1.这个程序是一个子程序,在ob1里调用的,ob1里完全没有其他语句,只有call fc1,所以肯定不存在其他地方使用了L20.0的可能。
2.这段程序是在仿真的时候发现有问题的,我觉得仿真过不了到了实际cpu上肯定也过不了。
3.从语句上来看,这个FP L20.0并没有想保存L20.0状态的意思,所以也不存在L缓冲区保持不了的问题。用FP和FN好像都是在同一个周期就可以处理完的事情,并不需要等到第二个周期,所以好像也没有下个周期丢失数据的问题。我翻了半天西门子的帮助以及其他资料,好像都没有说使用了L缓冲区有什么注意事项,而且很多无论是西门子的官方文件还是其他参考书中很多FN和FP例程都用了L缓冲区,所以比较奇怪为啥我这里就不能用。
4.补充个问题, Rossi84说临时变量需要在之前赋值,是在FP前面一条语句赋值?这样会不会导致FP更不能用了?
 
答:1.这个程序是一个子程序,在ob1里调用的,ob1里完全没有其他语句,只有call fc1,所以肯定不存在其他地方使用了L20.0的可能。

这个说明很重要,如果真想你所说L20.0没有被用到其他地方的话,按照你的程序是可以达到控制要求的,因为临时变量不是主动释放的,而是被占用的。

2.这段程序是在仿真的时候发现有问题的,我觉得仿真过不了到了实际cpu上肯定也过不了。
这句话也很重要,但是你使用的是PLCSIM进行仿真的吗?还是其他仿真软件,建议还是使用西门子s7300的官方仿真软件PLCSIM比较正式也比较真石。之所以这么说,是因为你的程序我也仿真 了一下,并且使用了OB1调用了FC,但是仿真结果是正常的 即当m20.1状态由0改变为1时,mw900加1。

用FP和FN好像都是在同一个周期就可以处理完的事情,并不需要等到第二个周期,所以好像也没有下个周期丢失数据的问题。

不对,边沿脉冲指令时一定需要两个周期才能判断前面的逻辑结果是否可以产生上升沿或者下降沿的一个周期是不可能完成的,因为改指令的原理是将存起来 并且与新的状态进行比较。一个周期只能采集一个状态,所以最少两个周期才能实现是否检测到上升或者下降沿。在这说的状态就是指该指令前面的逻辑运算结果。
所以说如果L20.0在这会有可能被其他指令所用的话,是存在丢失数据的问题的楼上几个所说是有一定道理的。

而且很多无论是西门子的官方文件还是其他参考书中很多FN和FP例程都用了L缓冲区,所以比较奇怪为啥我这里就不能用。
有一本书叫STEP7编程技巧,在本网站可以换取,里面有一节正好是将你所说的问题的,并且是不建议使用L作为存储位的。理由已经叙述过,你有兴趣可以找来看一看,网上也有这本书相关的电子资料。

补充个问题, Rossi84说临时变量需要在之前赋值,是在FP前面一条语句赋值?这样会不会导致FP更不能用了?

个人感觉是不需要的!在实践中证明也是不需要的,所以感觉你还是在尝试一下吧!反正我在仿真的时候显示的是正确的结果。




ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-23 12:47:33
1楼
信号时间?
发送模块如FB8,如果发送成功,发送成功信号DONE持续多长时间,是一个扫描周期吗?如果是一个扫描周期,那么这个持续时间,是从发送成功开始到这个扫描结束这段时间,还是从发送成功开始到下次扫描到该处整整一个扫描周期时间。
 
答:FB8执行需要经过多个循环扫描周期,当第n次扫描FB8时CPU检查到发送完成,这时FB8置位DONE,当第n+1次扫描到FB8时,FB8复位DONE。
所以说DONE在1个扫描周期内有效(FB8置位DONE之后到FB8复位DONE之前,DONE=1),同样error,status均为一个扫描周期有效。
如果需要查看status状态字可增加以下程序段
     A error            //故障位变量
          JCN   _000
          L status         //状态字变量
          T MW100      //保存状态字到中间变量
_000:nop 0

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-23 13:00:09
2楼
关于一个指令的问题
在书上看到一条指令是这样的L     D[AR1,P#2.0]书上讲这条指令的作用是取指针内数据区起始地址。但我不知道这个指令中的D是什么意思是不是有什么字符省略了,翻了半天书也没有看到书上有关它的介绍,所以特来向高手请教?
 
答:这个问题其实很多人都问过了。很奇怪的一条指令。简单点说,由于这条指令的对象是指针地址,而指针地址是存放在V区里的。所以你这里这个D就是指的是VD。这个D应该是调用V区用的。下面的英文是一个国外工程师对于这个问题的回答原文,你也可以参考下。
it is actually neither MD nor DBD in the particular example of  the  D.
So called "area-crossing indirect addressing" is used which is a fancy way for saying that the memory area (e.g. DB, M, I , Q etc.) is contained in the most significant Byte of the (4 Byte long) Adress Register, rather than being explicitly specified in the instruction.

Here is (a bit of a silly) example to outline the differences between "Area-crossing" and "Area-internal" addressing:  
LAR1  P#I 7.0          // Load AR1 with Area-crossing pointer to I 7.0
LAR2  P#7.1           // Load AR2 with Area-internal pointer to address 7.1
A      [AR1,P#0.0]    // = "A I 7.0" (AR1 value is "I 7.0") 
A    I [AR2,P#0.0]    // = "A I 7.1" (AR2 value is "7.1", "I" is part of instruction) 
=    Q [AR2,P#0.0]  // = "= Q 7.1" (AR2 value is "7.1", "Q" is part of instruction)
=    Q [AR1,P#0.0]  // = "= Q 7.0" (even though AR1 contains value of "I 7.0", the instruction explictly specifies "Q" which "overrules" the "I" memory area in AR1)

And here are the hex values in use to nominate the Memory area (in the most significant Byte of the Adress Register):
Hexadecimal Code
 Memory Area
 Description
 
b#16#81
 I
 Input area
 
b#16#82
 Q
 Output area
 
b#16#83
 M
 Bit memory area
 
b#16#84
 DB
 Data block
 
b#16#85
 DI
 Instance data block
 
b#16#86
 L
 Local data (L stack)
 
b#16#87
 V
 Previous local data
 

And now to the question which D is used in your example:
Since "Address" is declared as an IN parameter of type Pointer for a Function, it is actually the so called "V" memory area (Local data of the calling block) to which the access take place (the Pointer values are stored in "invisible" TEMP variables of the Block from which you call your Function).
So I guess you would have to call it "VD"

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-27 19:30:52
3楼
在线的时候删除块问题
打开Blocks,在线的时候除了自己下载到MMC卡中,FC,OB,DB块等,还有许多SFB,SFC等,这些SFB,SFC是在MMC卡中的吗?为什么在线的时候会有这些SFB,SFC?这些系统功能和系统功能块能不能删除?删除了有什么影响?另外删除这些块和格式化MMC卡有什么区别?
 
答:1.系统功能块不在MMC卡中。
2.系统功能块是CPU自带的块,MMC卡存储用户程序,如果在用户程序中调用了系统功能块的话,这些被调用的系统块可以删除。
3.在线不能删除系统块,即使你想删除,系统也会提示你不能删除。
4.删除块只是删除了项目中的程序块,如果删除了system data那就连硬件配置信息也删除了。但是如果格式化MMC卡的话,那卡就被清空了。

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-27 19:32:05
4楼
S7-300 FB41 PID如何设置参数
我在做水处理项目,用反馈的溶氧浓度(0-10mg/L)来控制风机的频率(0-50HZ),请问我需要设置FB41块的哪些参数?并且所有参数必须传给上位机设置(组态王),如何能发给我程序更好了,谢谢!
问题补充:谢谢你回答得这么详细,你说设定值和死区都整定到0-100.0的范围,那测量值是否也需要整定成0-100.0?我是这样理解的啊.那设定值,死区和测量值是否可以采用实际的工程范围?因为这三个量纲是一样的.

另外,我想在FC中调用PID指令FB41,应该也可以的吧?因为OB35我已经设为1S,用于流量累积.

 

答:PID 没有例程和经验值可参考, 每个设备都不同,都需要根据现场的设备去调试。有时同样的两套设备P、I、D参数都会不同。 所以PID 的参数也需要根据实际情况一点点试。
  下面的步骤供你参考。
  PID的调用要在OB35中完成.
  在ob35里面插入FB41,方框顶上会有红字,输入一个DB块如“DB20”。系统会问你要不要生成这个DB,选yes就可以。
  大部分参数不要填,默认就行,下面是常用参数,用变量连接:

  1、MAN_ON:用一个bool量,如m0.0,为true则手动,为false则自动;
  2、cycle:T#100MS,这个值与ob35默认的100ms一致;
  3、SP_INT:MD2,是hmi发下来的设定值,0-100.0的范围,real型;
  4、PV_IN:MD6,实际测量值,比如反馈的氧浓度,要从piw×××转换为实际的工程量(使用FC105);
  5、MAN:MD10 (该地址也可以是从上位机设定的地址),是手动状态下的输入值,real型。手动设多少输出将为多少。
  6、GAIN: MD100(该地址也可以是从上位机设定的地址如DB 块的地址,这样可以从上位机设P 参数了),默认写1-2吧(系统默认是2),调试的时候再改。
  7、TI:MW120, 默认可以写T#30S吧,调试的时候改;
  8、DEAD_W:MD122,死区,就是sp和pv的偏差死区,0-100.0的范围,默认0,调试的时候改;
  输出:
  9、LMN:MD126,把MD126再用fc106转换到pqw××,如果pid运算结果不再有工艺条件其他限制可以用LMN_PER更简单就不用fc106了。
  三、用plcsim模拟
  1、手动
  man_on=true,看输出是否等于man;
  2、自动
  man_on=false,调整pv或者sp,使得有偏差大于死区,看输出变化,这里的模拟只能说明pid工作了,不能测试实际调节效果啊。

 COM_RST: BOOL: 重新启动PID:当该位TURE时:PID执行重启动功能,复位PID内部参数到默认值;通常可以不用,因为一旦参数设定好不会有大的变动了。

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-27 19:32:48
5楼
使用300plc能否格式化MCC卡?
使用300plc能否格式化MMC卡?怎样做,亲自做过的请回答。 据说新型号的300PLC才能够格式化MMC卡,是吗?具体哪些PLC。
 
答:请参考:
怎样格式化或复位SIMATIC S7-300 CPU的MMC卡(微存储卡)?
说明:
        用户不能格式化MMC卡。只能是“复位”MMC卡,这会删除所有用户数据。按以下步骤进行: 

1.   MMC卡插在CPU的插槽中。CPU要求整机复位(STOP LED灯慢闪烁)。 

2.   将模式转换开关扳到MRES位置,并在此位置保持(大约9秒)直到STOP LED灯持续亮。 

3.   在接下来的3秒钟内必须将转换开关松开回到STOP模式位置,并再次扳到MRES位置。STOP LED灯在删除过程中闪烁。 

如果MMC卡在以上描述的步骤完成后仍继续请求整机复位,则该卡有故障。 

注意事项:
如果MMC卡包含的数据对CPU无效,就只可能对它进行复位。另外MMC卡只能由上述步骤初始化。 

警告:
不要将MMC卡用于非SIMATIC产品并不要使用第三方设备格式化它。这可能覆写MMC卡的内部结构且无法恢复。这样会导致此MMC卡不能被SIMATIC CPU 识别/接受并无法再在SIMATIC设备中使用。 

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-27 19:33:20
6楼
CP5611和CP5621
请问6GK1 561-1AA01的是不是CP5611,
6GK1 562-1AA01的是不是CP5621.

CP5621和CP5611的区别是什么?我使用的是300的MPI协议,还有他们插槽区别是什么?

 

答:6GK1 561-1AA01的是CP5611 A2,
 6GK1 562-1AA01的是CP5621。
 但楼上的几位兄弟的具体描述有一些偏差。CP5611 A2和CP5621都是应用于台式机的插卡。
 1. CP5611 A2符合PCI-X(64位)标准,但还是以32位工作的,同时兼容普通的PCI标准,普通PCI插槽是乳白色的。
 2. CP5621符合PCI-E标准,本身是PCI-E x1,兼容x4,x8,x16,不能应用在普通PCI和PCI-X插槽上,和笔记本上的PCMCIA Express插槽也不是一回事,PCI-E插槽是黑色的。
 3. 西门子目前没有支持笔记本上PCMCIA Express的插卡,CP5512只符合PCMCIA I/II代标准,后续产品CP5711是USB接口的。
 4. 对于楼主连接S7-300/400来说,CP5611 A2、CP5621、CP5512和CP5711都可以满足要求,关键在于楼主使用的是台式机还是笔记本,以及其具有的插槽类型。

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-27 19:34:03
7楼
300的背景数据块问题
是不是每一个FB块必须至少要有一个DB?如果我的FB中使用的全部是绝对地址(例如 I 或者Q类地址)不是用中间变量。那么DB快还有设么用?
问题补充:各位高手:你们的回答我都看到了,非常感谢。我也在STEP7下试了一下,每个FB是必须要有DB的,但是,我在FB中直接使用绝对地址(不用变量定义)是可以的。只是此时FB对应的DB是空的,什么变量都没有。不知此时DB还有何意义?谢谢
 liwenqun先生的回答非常到位,多谢!但是如果我的应用程序并没有一次编程多次调用的情况,同时程序又很大,我想将其分成类似于200中的若干个子程序,然后在OB1中调用它们,此时该怎么办?
 
答:这种用法完全违背了FB的原意!!!
如果全部使用绝对地址,那么我认为是属于初级或者叫做低级编程办法。
FB本来就是为了方便解决同一类控制方法的程序重复编写的
如果用绝对地址,那么类似的设备必须通过多次编程来解决。使用FB可以一次编程多次调用。

我认为这才是解决你的问题的最好办法,而不是问如果在FB里面用绝对地址的方法或者可行与否。

FB本来就是为了不引用绝对地址,你在里面用只会造成本FB仅能调用一次。

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-27 19:34:47
8楼
S7PLC以太网通讯
S7PLC之间进行以太网通讯,S7、TCP、ISO、ISO-on-TCP等传输协议,哪些通讯设置一定要设置MAC、IP、TSAP等参数,或者说这些传输协议分别需要设置哪些参数,而其他参数不需要设置,为什么?
 
答:首先你提到S7、TCP、ISO、ISO-on-TCP这些都是以太网通讯的通讯协议,不过你忘了还应该有UDP, PROFINET这些协议,西门子的PLC所支持的。
     哪些通讯设置一定要设置MAC、IP、TSAP等参数?这个问题问得好,这恰恰是由于你所使用的不同的协议造成的。例如,使用TCP/UDP/IP莱通讯,从字面上看,首先我们需要设置IP地址,因为这里需要包含IP的重要的信息。如果了解不同PC中的应用程序也就是不同进程的通讯,需要设置网卡的IP地址,不过还有一点隐含的就是端口号的信息,这也就是为什么在SIMATIC Net手册中提到在PLC组态以太网通讯时尽量不要用1~2000的端口号,这是因为如果你有连接PC等设备,那么可能PC的一些服务无法完成,因为你的PLC占用了这个端口号,例如:HTTP80。所以使用TCP/IP通讯只需要设置IP地址(加不加网关,看是否有路由器)和端口号。
     针对TSAP,他的全名应该是TCP service access point,也就是TCP的服务访问点。其实这个问题解释起来比较复杂,可以从ISO/OSI参考模型说起。这7层之间如果想通讯,就是通过SAP来完成的,不过每一层的SAP都是具有不同名字,例如IP层的SAP称为ISAP。这些是很专业的术语,OSI/ISO对应的TCP/IP的模型中,TSAP对应的就是Port,即端口号。这也就是说SAP是层层之间的寻址而且要唯一。对于ISO协议来说,没有IP层,那么意味着不能路由,所以寻址只能通过MAC地址。对于访问高层的应用程序就需要TSAP了。不过你在Step7组态时,不需要改变任何的TSAP,因为Step7自动生成了符合ISO协议的TSAP标识。这要下载这些组态信息PLC之间就可以相互识别。
     ISO on TCP也就是RFC1006,它是ISO的变形,因为早期的以太网协议并不是很多应用于工业控制,不像TCP/IP这样广泛。而西门子早期的协议使用ISO,不过它的缺点我已经描述过了。所以出现RFC1006为了实现路由。
     S7的协议比较特殊,属于西门子内部不公开的协议,而且不基于任何的网络,MPI,PROFIBUS上都可以运行S7协议。它加载在ISO和ISO on TCP上,位于ISO/OSI的第7层。进行S7连接时很有意思,它的封装掩盖了它的复杂性。
     其实,还有很多问题我没有描述,如果有问题,我们可以进一步交流。不过实际上,这些都是由于协议的不同所产生的。所以理解协议是重要的。不过,我可以问问你,同样大小的数据,使用你所说的协议通讯,那种方式快呢?
   郎凡,当你提出这样的问题时,我感到很惊讶,因为可以达到这样的理解高度的人很少,而且做项目的时候很少有人关心这样的详细的信息。好吧,那么我可以给你详细的解释,不过我更愿意我们去探讨这些问题。恨有趣,我想这是论坛中最长的问题和最长的回答吧,可以破了论坛的纪录了。我怕1000字不够啊!哈哈!
   对于你的回答的排序,我可以肯定的回答你,你的说法是正确的,不过理解上应该是这样,根据ISO/OSI参考模型,数据在进行接收和发送时会解包和封装。这些就需要耗费时间,层数越多耗费时间越长,不过这里有一个问题TCP和UDP同在第4层,为什么UDP比TCP更快呢?
   对于TCP/IP是否打勾,结果是什么样的?首先很欣赏你的钻研精神。其实结果很简单正如你所说的。其实我所说的复杂性,除了组态就是它的协议了,由于它的协议不公开,所以我认为S7协议是一个大包,也就是MPI,PROFIBUS,Ethernet上的S7协议部有区别的,因为S7协议毕竟是第7层的协议,由于所嫁接的底层协议毕竟是不同的。所以这种多样性就是复杂性的一种体现。另外,对于细节协议,S7协议的应答十分两步的,首先是对协议层的应答,接着应答应用层,这也是它的复杂性。Step7在NetPro中作的很普遍,所以不易察觉。
   ISO on TCP不需要组态MAC地址这是真的,因为应用层寻址并不是依靠MAC地址,而是依靠IP和Port来完成的。在TCP上加入不是ISO的校验机制,而是ISO的协议与其连接。因为ISO协议与TCP协议是不同的,ISO协议是面向于数据块的,而TCP/IP是面向于流的。其协议的本质就是有没有数据的结束标志。
   对于SAP,你不用考虑太多,它只是层与层之间的桥梁,所以向下向上都会有SAP,而在Step7中所显示的SAP往往是向上的,因为应用层毕竟是相对独立特殊的,不像TCP/IP那样普遍。在任何时候都需要建立的,只不过在TCP/IP中你看到的是端口号。
   我查了一下你的“财产”,没有多少嘛,怎么给我啊?
   开个玩笑,不过真的欣赏你的精神!!有问题尽管问,不过这里的篇幅不多了,你可以重新提个问题.
  首先感谢你的评价。不过智慧圆,分开读为智、慧、圆。好像金庸小说中少林高僧的法号啊......
  1,10000字确实够用。
  2,你说的很正确。不过对于Step7 TCP的连接可以有两种方式,一种是通过Open IE的方法,通过功能块确定Server/Client的关系来实现动态的一种连接,也可以断开这个连接。PLC对于这个连接个数同样是有限制的。另外一种就是在NetPro中建立TCP连接,当下载组态后,连接自动建立,但这个资源不能动态释放。连接一旦建立,数据就开始通讯了。不过每个包数据的大小并不是我们决定的,而是TCP的滑动窗口算法决定的。所以使用TCP协议时,速度的快慢不是我们所能把握的。对于你说的“资源要求也比较多,结构也比较复杂”这句话,我完全同意。其实你可以这样理解,如果你把TCP和UDP的报文头放在一起比较,你会恍然大悟。所以有无连接并不是限制快慢的关键因素。
  3,完全正确。另外流的概念就是你所接收的并不一定是你所发送的。而数句块的概念所接收的一定是你所发送的。
  4,在我的印象中RFC1006就是ISO on TCP的最高版本的为3。而你说的RFC983是RFC1006的替代版本。不过这个替代版本并不与FRC983兼容,所以可能在理解上有些偏差。
  5,不管怎么说,我觉得要搞清协议包括其细节,看RFCXXXX文档才是王道!!!我记得你问过交换机的问题,以上这些问题是你驾驭交换机的前提条件。不过交换机尤其SCALANCE X400并不是想象中那么简单。完全掌握我曾经提到的那些概念,还是一段任重而道远的过程啊!
  另外你的问题还是具有挑战性的,我就喜欢这样的问题。其实,你几经进入了五彩缤纷的IT世界了,不过这个世界让人欢喜使人愁。
  你的诗真的很好,我留下来做个纪念。把它添加到论坛中的签名档。如果还有问题,你可以继续提。不过你的要给我的分,是我一直望眼欲穿的,哈哈......
 不过,找答案有个问题就是问题更新后没有指示,所以回复就不一定那样及时!
 

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-27 19:35:23
9楼
关于MPI的几点疑问
1.书上说:每个CPU可以使用的MPI连接总数与CPU的型号有关(6-64个),这里说的"可以使用的MPI连接总数"是指什么?是指MPI网络上的节点数吗(最大好象是32个)? 2.中继器除了延长通信距离以外,可不可以增加网络节点数? 3.如何将笔记本连接到PROFIBUS网络的远程I/O从站上,从站使用ET200B,总线插头上有PG口谢谢了
问题补充:第一个还是不是很理解,建立通讯的连接数是不是指与该PLC所建立的网络分支数?
 
答:1、这里所说的MPI连接总数是指建立通讯的连接数不是指的节点数。
  2、中继器除了延长通讯距离外,还可以扩展网段,也就可以扩展网络节点数,对于MPI来说一个网络上最多有126个节点。
  3、若用CP5512的话,你可以直接连接Profibus编程电缆ET200B的上。若用PC adapter那么必须给ET200B的接口供24V的电源,才可以编程。原因是Cp5512在接口上提供24V的电源而PC adapter不提供,对与ET200B是受电后才能激活网络编程功能,而对于主站如CPU的接口本身就提供所以不需要供24V电。

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-27 19:35:54
10楼
step7软件中块保护
step7中软件里在Blocks中的块有的带个小锁,打开的时候说块受保护,这些是插入的块本身就是受保护的还是后来人为设置的隐藏,如何设置,怎么样能查看块的内容。比如支持PROFIBUS诊断功能数据块DB125对应的FC125,我自己新插入块FC125为什么就不带锁,如何做自己插的块才是受保护的
问题补充:FB125从block里右键插入这个块,可不是受保护的啊没带锁啊
 
答:如果是系统自带的FB,FC,SFB,SFC,是西门子为实现某些固定的功能编的程序块,是受保护的,无法打开。如你提到的FC/FB125.只能用不能打开查看源代码。

如果是自己插入的FB,FC ,则可以进行打开,如果需要保护(加锁)可以按照下面的步骤。需要注意加密后的源文件一定要保存好,如果丢失或删除了则自己也无法打开自己的程序了。

如何实现程序块保护: 
1.打开程序编辑窗口LAD/FBD/STL;
2.将要进行加密保护的程序块生成转换为源代码文件(通过选择菜单  File—>Generate source 生成);
3.在LAD/FBD/STL 窗口中关闭您的程序块,并在SIMATIC Manager项目管理窗口的source文件夹中打开上一步所生成的source文件;
4.在程序块的声明部分,TITLE行下面的一行中输入” KNOW_HOW_PROTECT”;
5.存盘并编译该source文件(选择菜单FileSave,FileCompile);
6.现在就完成了您程序块的加密保护;
具体步骤还可以上网看FAQ
http://support.automation.siemens.com/CN/view/zh/10025431

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-27 20:30:31
11楼
打开STEP7 项目时提示少文件包???
打开STEP7 项目时提示少 DOCPRO和PDM文件包请问大哥们怎么处理啊!谢谢!!!
 
答:这是由于项目创建时,STEP 7安装了选件DOCPRO及PDM, 缺少DOCPRO不影响项目的编辑;如果项目中有PDM配置的硬件,缺少PDM软件将无法编辑这部分硬件属性,那么就需要把PDM装上。

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-27 20:32:26
12楼
怎样把编码器的计数值转换成为角度值?编码器的计数值如:DB47.DBD4的值是2048,如果80个计数旋转的角度是1度,其角度值是2048/80=25.6,我用整数函数的DIV-I计算结果没有小数,用浮点函数的DIV-R计算结果是指数形式,在人机界面里都不能够显示25.6,请高手指点怎样处理计数值才可以在人机界面里显示25.6,还有反过来我输入角度后,怎样把角度值转换为计数值写到DB47.DBD8里?
问题补充:编码器的计数值如:DB47.DBD4应改为:DB47.DBD14
 
答:西门子的S7系统浮点数为ANSI/IEEE 754-1985标准, 对于普通的Windows PC,或所有的西门子人机界面包括WinCC, WinCC flexible, Protool及相应面板选择32 bit floating point类型都可以正常显示。
请确定您的人机界面是否支持此浮点数类型并且选择正确。
对于此浮点数格式可以参考: 
STEP7编程
http://support.automation.siemens.com/CN/view/zh/18652056
A.3.2.3小节。

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-27 20:32:55
13楼
在DP总线上如何进行数据块传递
硬件方案是PLC300通过em277经prifibus-dp总线与PLC200相连,现在想用一个数据块传递语句将PLC300的数据整体传送到PLC200中。PLC200的地址在PLC300中对应从150开始。这样就不能用blkmov语句进行传送了。不知是否有其他的语句可以在DP总线上进行这样的数据块整体传递。

   如果用普通的move语句虽然也可以传递,但对于数据量较大的传送要有很多的move语句,总是不方便的。所以还是能有类似blkmove这样的语句来解决在DP总线上进行大数据量的传递

答:I/O地址处于过程映像区外的DP通信需要一次传输3字节或大于4字节的一致性数据,调用SFC14/15。
请参考以下链接关于分布式 I/O 数据一致性处理
http://support.automation.siemens.com/CN/view/zh/28991143

彩云之滇东北

  • 精华:20帖
  • 求助:5帖
  • 帖子:107帖 | 2725回
  • 年度积分:0
  • 历史总积分:21121
  • 注册:2005年6月14日
发表于:2010-12-28 08:59:09
14楼
顶一个,很好的总结,试一试看

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-29 20:46:10
15楼
331-7KF02接线问题
10 11端必须短接吗?不接的话会怎么样呢,我现在现场没接,显示也没什么问题啊?
 
答:此模块端子10为外部补偿收入,端子11为Mana,除测量热电偶时使用外部温度补偿模块之外,此二端子需要短接。具体接线请参考:
S7-300模块数据手册
http://support.automation.siemens.com/CN/view/zh/8859629

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-29 20:49:49
16楼
ET-200M重新上电后连接不上
主站是S7-400,从站是两个IM-153-1的DP接口模块,下面挂的模块都组态好了,每次下载完程序就可以连接上,断电后重新上电就连接不上了,不知道什么原因,组态的时候IM-153-1设置的选项是可以替代,因为没选重的时候根本没法连接上,IM151-1组态该如何设置才是正确的呢?
 
答:每次下载完程序就可以连接上,断电后重新上电就连接不上了,不知道什么原因?
这是断电后程序或相关数据没有被保存,故此,下载完程序就可以连接上了。
S7-400如何保存程序与数据:见相关资料:
详见《S7-400 CPU和CPU 318-2 CPU的数据保持》下载:
http://www2.ad.siemens.com.cn/Download/Upload/AS/FAQ/23596519.pdf
《S7300/400 CPU 后备电池的使用》下载:
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=%e7%94%b5%e6%b1%a0&PageIndex=2
见<S7-400CPU存储器介绍与存储卡使用(2006.09.22) >下载:
 http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=A0053

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-29 20:50:38
17楼
铂热电阻可以接到Sm331里吗?
铂热电阻是三根线(型号Wzp-002)可以接到Sm 331 ( 定货号6es7  331-7k02-oabo)里吗?
 
答:Wzp-002贴片铂电阻,薄片型铂电阻测温范围为 0 ~ 420 ℃ 。薄片结构,体积小巧,安装方便,带 有陶瓷基片, 热响应时间< 15s,采用不锈钢外保护层, 电气性能稳定,精度高 , 输出二线制或三线制, 适用于快速和表面测温, 可与温度变送器配套输出 4~20mA 或 1~5VDC 。
2.SM 331 ( 定货号6es7  331-7k02-oabo)模拟量输入模板用来实现PLC与模拟量过程信号的连接。用于连接电压和电流传感器、热电耦、电阻和热电阻
接线可参考
S7-300模块数据手册
http://support.automation.siemens.com/CN/view/zh/8859629
SM331信息集要(更新版) http://www2.ad.siemens.com.cn/Download/Upload/AS/faq/F0220.pdf

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-12-29 20:53:32
18楼
300的 ob100调用 
         本人没300的实际经验,是初学者,今向各位师傅们请教ob100的调用。我需要一个开机脉冲量,是在ob100中置位后,然后再ob1中进行复位即可吗?若是上述方法我在仿真中不能实现。ob100为s m10.0,   ob1中为a m10.0     s  q0.0, r  m10.0请问我写的有错吗?。谢谢!!!!
问题补充:ob中的局部变量只能用语句表写吗?可否用梯形图代替吗?如:ob100中l #ob100_stptup:  l b#16#81: ==i  = q0.0:可以转换梯形图吗?
 
答:首先你要在OB100中用一个脉冲作为开机,必须在CPU的属性对话框中选择“Cycle/Clock”(周期/时钟)子项中最下面“Clock Memory”(时钟存储区)中“Clock Memory”前打勾,并且设定“Memory Byte”(Memory Byte(存储字节)为“10”
你在OB100中编写的STL指令是有问题的,置位指令S和复位指令R 用于把寻址位的信号状态置“1”(变1并保持)和复位置“0”(变0并保持)。当上一次逻辑运算结果RLO=1时,S指令把寻址位的信号状态值1,而R指令把寻址位的信号状态复位置0。而S  M10.0 指令前面没有上一条指令的运算结果RLO,即没有条件程序是无法执行的,所以在仿真中无法实现。而OB1中指令是没有问题的
A  M10.0  //检查位存储位M10.0的信号状态
S  Q0.0   //如果位存储位M10.0的信号状态为1,那么置位Q0.0输出为1
R  M10.0  //如果位存储位M10.0的信号状态为1,复位M10.0
并没有规定OB中的局部变量只能用STL编写,取决于你的编写习惯,可以用梯形图代替,如你OB100中把两个整数(16位)比较相等,如果一样,输出线圈Q0.0为1,可以用梯形图CMP==1来代替,其中局部变量#ob100_stptup和b#16#81分别作为CMP==1输入IN1和IN2即可

热门招聘