| 作者 | 主题 |
|---|---|
|
合 奇侠 经验值:6044 发帖数:3917 精华帖:20 |
楼主
主题:应用探讨——S7-200 PLC通信常遇到的问题
S7-200虽然是小型PLC,却可以支持很多的通信方式。每种通信方式都有自己的特点,比如支持的通信距离、通信站点数、波特率、组态方式、适用范围等;进行这些通信时经常会遇到一些问题,为了更好地应用这些通信,我们可以结合不同的通信方式进行探讨,例如:
1. modbus RTU通信常遇到的问题,比如:modbus功能码、库存储区分配、HMI设备通过modbus协议读取模拟量值; 2. USS通信特点,注意事项; 3. PPI通信有时会有延时,为什么? 4. S7-200能支持怎样的MPI通信,能用MPI方式与PPI主站的S7-200 PLC通信吗? 5. PROFIBUS DP通信主站和从站数据区对应问题; 6. CP243-1能直接跟其它厂家的设备进行以太网通信吗,怎样实现跟S7-300/1200通信? 7. S7-200其它通信注意事项。 提供“下载中心”参考文档如下: A0136《西门子S7-200 LOGO! SITOP》 A0148《S7-200与S7-300之间的通讯(更新版)》 42122427《适用于工业以太网和信息技术的 CP 243-1 通信处理器》 1109582《S7-200系统手册》 活动奖励: 此次集中交流将持续至7月14日,其中所有精华帖作者将获得加倍精华奖励积分;最终所有有效留帖的网友将获得加倍发帖积分。更多积分带给您更多奖品兑换的自由。 对于有突出发言贡献的网友,还可以在当前的可兑换奖品中免费挑选任一款奖品。 交流结束后也将专门整理重要内容,供广大网友分享参考。 预祝大家交流愉快,收获丰富! |
|
Automann 至圣 经验值:18299 发帖数:6168 精华帖:137 |
4楼
主题:回复:应用探讨——S7-200 PLC通信常遇到的问题
S7-200与S7-300的MPI通信
MPI(多点接口)是西门子内部使用的通信协议,物理层为RS-485。通过MPI网络的S7基本通信,S7-300可以用系统功能X_GET和X_PUT来读、写S7-200的存储区,最多可读、写76字节的数据,S7-200不需要编写通信程序。其优点是使用PLC自带的RS-485通信接口,不需要增加通信用的硬件,编程简单,容易实现。 1.通信参数的设置 用系统块设置CPU 224在MPI网络中的站地址为3。为了方便下载和监控,将S7-200、S7-300和计算机的通信速率均设置为19.2 kbit/s。需要将系统块下载到CPU,设置的参数才会起作用。 组态时将CPU 315-2DP连接到MPI网络上,设置MPI站地址为2。将设置的参数下载到CPU 315-2DP。 2.CPU 315-2DP读写CPU 224的V区的编程 在CPU 315-2DP的OB35中调用SFC 68“X_PUT”,将本站的DB 1的76字节数据发送到通信伙伴的DB 1的DBB100~DBB175,即CPU 224的VB100~VB175。调用SFC 67“X_GET”,读取CPU 224的VB200~VB275(即DB 1的DBB200~DBB275)中的数据,将它们存放到DB 2。执行OB35的时间间隔为默认的100ms。 下面是CPU 315-2DP的循环中断组织块OB35的程序: 程序段 1:将本站的DB1中的数据写入CPU 224的V区 CALL "X_PUT" REQ :=TRUE CONT :=TRUE DEST_ID :=W#16#3 //S7-200的MPI地址 VAR_ADDR:=P#DB1.DBX100.0 BYTE 76 //S7-200要写入数据的VB100~VB175 SD :=P#DB1.DBX0.0 BYTE 76 //存放本站要发送的数据的地址区 RET_VAL :=MW2 BUSY :=M0.1 程序段 2:读取CPU 224的V区的数据,保存到本站的DB 2 CALL "X_GET" REQ :=TRUE CONT :=TRUE DEST_ID :=W#16#3 VAR_ADDR:= P#DB1.DBX200.0 BYTE 76 //要读取S7-200的VB200~VB275 RET_VAL :=MW4 BUSY :=M0.3 RD := P#DB2.DBX0.0 BYTE 76 //保存读取的数据的地址区 为了验证通信是否实现,在初始化程序OB100将数据块DB 1的76字节数据发送区的字预置为W#16#3333,将DB 2的76字节数据接收区复位为0。 3.CPU 224的程序 为了验证通信是否实现,在CPU 224的OB1中,在第一个扫描周期将发送数据区VW204~VW274预置为16#2222,将接收数据区VW100~VW174清零。 LD SM0.1 FILL 16#2222, VW204, 38 FILL 16#0, VW100, 38 可以用CPU 315-2DP的变量表和CPU 224的状态表来监视参与通信的存储区。 我第1次做实验的时候,很顺利地一下就成功了。总的感觉是只要组态和编程没有问题,通信很容易实现。
追求完美
|
|
nnnn1234 至圣 经验值:22482 发帖数:4950 精华帖:57 |
8楼
主题:回复:应用探讨——S7-200 PLC通信常遇到的问题
和硬件有关的通讯注意事项:
1)使用符合要求的硬件(电缆、插头),并按规范制作 2)保持通讯端口(驱动电路)之间的共模电压差在一定范围内 3)注意防止电磁干扰 PPI网络通讯需要注意事项: 1)在一个PPI网络中,与一个从站通讯的主站的个数并没有限制,但是一个网络中主站的个数不能超过32个。主站既可以读写从站的数据,也可以读写主站的数据。也就是说,S7-200作为PPI主站时,仍然可以作为从站响应其他主站的数据请求。 一个主站CPU可以读写网络中任何其他CPU的数据。 2)避免简单地定时激活NetR/NetW:由于串行通讯的特点(如上所述),无法得知何时真正结束。如果定时进行网络读写通讯,必须判断此次通讯是否正常结束 3)同时有效的NetR/NetW指令不能超过8个,否则通讯请求队列会超出操作系统的管理能力 4)使用SM0.0调用网络读写指令,虽然能长期工作,但不能超过8个指令,而且会出现监控时指令块变为红色的现象,最好还是加上必要的读写状态判断条件。
The darkness is no darkness with thee.
|
|
Automann 至圣 经验值:18299 发帖数:6168 精华帖:137 |
11楼
主题:回复:应用探讨——S7-200 PLC通信常遇到的问题
通信的转换时间
PPI编程电缆从接收模式切换到发送模式时,需要一定的转换时间。转换时间与波特率有关(见系统手册的表7-11)。 如果在使用自由端口模式的系统中使用PPI电缆,下面的情况必须在用户程序中考虑电缆的转换时间: (1) S7-200 CPU响应RS-232C设备发送给它的报文 在接收到RS-232C设备的请求报文后,S7-200 CPU发送响应报文的延迟时间必须大于等于电缆的转换时间。 (2) RS-232C设备响应S7-200 CPU发送给它的报文 在接收到RS-232C设备的响应报文后,S7-200 CPU发出下一次请求报文的延迟时间必须大于等于电缆的切换时间。 在两种情况下,延迟使PPI多主站电缆有足够的时间从发送模式切换到接收模式,使数据从RS-485口传到RS-232C口。 在自由口通信编程时,应在适当的时候启用定时中断,来保证收、发模式转换时提供足够的延时时间。
追求完美
|
|
Automann 至圣 经验值:18299 发帖数:6168 精华帖:137 |
30楼
主题:回复:应用探讨——S7-200 PLC通信常遇到的问题
S7-200与MM440的USS通信
控制设备有两种地: 1)安全保护地(或称大地,电磁兼容性地),将设备的金属外壳连接到安全保护地,可以保证操作人员的安全。 2)信号地(电子设备的电位参考点,有人称为仪表地),下图中PLC和变频器的通信除了RS-485的A、B线外,还必须连接双方标有0V的端子,图中的0V点就是信号地。 所有节点的地(OV)必须连在一起,否则可能毁坏通信接口!! 信号地不能与设备的安全保护地相连,否则可能毁坏通信接口!! 我自己就有过烧坏通信口的惨痛教训。 ![]() 长度大于2米的总线电缆的两端都应设置终端电阻。 使用modbus协议或USS协议之前,需要先安装S7-200的指令库。USS协议指令在指令树的“\指令\库”文件夹中。 下面是USS通信的程序: ![]() 指令USS_INIT的参数Mode为1,将端口分配给USS协议,参数Active共32位(第0~31位),每一位对应一台变频器。例如2#10的第1位为1,表示激活1号变频器。 USS_CTRL指令用于控制处于激活状态的变频器,每台变频器使用一条USS _CTRL指令。 Drive是变频器的站地址,实数Speed_SP是用满速的百分比表示的速度设定值。 RUN输入位用于控制变频器的运行和停止,OFF2为1时变频器按惯性滑行,直到停车。OFF3为1时变频器快速停车。方向位DIR用于设置变频器的运动方向。 Error是错误字节,Status是变频器返回的状态字的原始值,实数Speed是变频器返回的用满速百分比表示的变频器速度。 Run_EN用于指示变频器的运行/停止状态,D_Dir用于指示变频器的旋转方向,Inhibit用于指示变频器的禁止位的状态。Fault是故障位。 实验表明,可以用I0.0~I0.4来控制电动机的运行、减速停车、快速停车、故障确认和运行方向。Q0.0~Q0.4分别是变频器的确认信号、运行状态、旋转方向、禁止位的状态和故障位的状态。
追求完美
|
|
聚沙成洲 奇侠 经验值:7266 发帖数:1835 精华帖:22 |
40楼
主题:回复:应用探讨——S7-200 PLC通信常遇到的问题quote:以下是引用张小五在2011-05-11 16:33:54的发言: MPI方式与PPI主站的S7-200 PLC通信 是可以通信的,MPI主要是S7-200的通信方式 PPI主要是S7-300/400的对外通信 你把MPI与PPI搞反了,《在西门子S7-200 LOGO! SITOP》是这样描述S7 200的MPI通信的: MPI (Multipoint interface)是SIMATIC S7多点通信的接口,是一种适用于少数站点间通信的网络,多用于连接上位机和少量PLC之间近距离通信。 通过PROFIBUS电缆和接头,将控制器S7-300或S7-400的CPU自带的MPI编程口及S7-200CPU 自带的PPI通信口相互连接,以及与上位机网卡的编程口(MPI/DP 口)通过PROFIBUS或MPI电缆连接即可实现。 网络中当然也可以不包括PC机而只包括PLC。 MPI的通信速率为19.2K~12Mbit/s ,但直接连接S7-200CPU通信口的MPI网,其最高速率通常为187.5Kbit/s (受S7-200CPU最高通信速率的限制)。 在MPI网络上最多可以有32个站,一个网段的最长通信距离为50米(通信波特率为187.5Kbit/s时),更长的通信距离可以通过RS-485中继器扩展。 MPI允许主-主通信和主-从通信,每个S7-200CPU通信口的连接数为4个。 MPI协议不能与一个作为PPI主站的S7-200CPU通信,即S7-300或S7-400与S7-200通信时必须保证这个S7-200 CPU不能再作PPI主站,Micro/WIN也不能通过MPI协议访问作为PPI主站的S7-200CPU。 S7-200CPU只能做MPI从站,即S7-200CPU之间不能通过MPI网络互相通信,只能通过PPI方式互相通信。 ![]() 图1. 一个MPI网络例子 如上图STEP 7-Micro/WIN可以与S7-200CPU建立MPI主-从连接。硬件使用CP5611卡加上PROFIBUS或MPI电缆,S7-200 CPU通信口上要使用带编程口的网络连接器。S7-200CPU的通信口最低通信速率可设为19.2K,最高187.5K。 注:CP5613不能通过MPI方式与S7-200 CPU通信口进行编程通信。 S7-300和S7-400 CPU可以作为MPI主站用XGET(SFC67)和XPUT(SFC68)指令读取S7-200数据,S7-300的通信数据包最大为76个字节,S7-400的通信数据包最大为84个字节。S7200 CPU中不需要编写任何与通信有关的程序,只需要将要交换的数据整理到一个连续的V 存储区当中即可。 如果需要在主站中(如S7-300)如何配置S7200 CPU MPI从站的详细文档,可访问客户支持部网站上的“下载中心”网页,在“通信/网络"目录中下载《S7-200与S7-300之间的通信》。 |
|
xiangping 游士 经验值:230 发帖数:139 精华帖:2 |
45楼
主题:回复:应用探讨——S7-200 PLC通信常遇到的问题
PPI通信
1、关于S7-200系列的通信PLC的地址的设置 在Step7中的通信——通信端口中设置为PLC的地址设置为2或3等下载入及计算机即可生效。 2、自由口通信和PPI通信 PPI通信PLC主机采用指令NETR和NETW指令,在主机中的数据存储格式按PPI数据存储格式存储,从机中数据没有按照数据格式进行存储。 从机不需要采用指令,在从机中数据的安排是直接将PPI通信中指定的地址的内容通过通信指令传送,指令NETW是将数据从主机传送到从机,NETR指令的作用是将远程的数据传送到主机。 EG:(PPI通信例程) 主机: LD SM0.1 MOVB 16#0A, SMB30 FILL 0, VW100, 10 LD V100.7 MOVB VB107, QB0 LDN SM0.1 AN V100.6 AN V100.5 MOVB 3, VB101 MOVD &IB0, VD102 MOVB 1, VB106 NETR VB100, 0 LDN SM0.1 AN V110.6 AN V110.5 MOVB 3, VB111 MOVD &VB100, VD112 MOVB 1, VB116 MOVB IB0, VB117 NETW VB110, 0 从机: LD SM0.0 MOVB VB100, QB1 这个程序中直接将主机的IB0数据存储到远程的VB100中,其中从机VB100存储的数据为主机中VB117的数据,即通信指令中的数据存储区的数据,由此可知从机数据存储没有按照PPI协议的数据格式存储。 注: 关键处理中是关于从机中数据存储空间的分配的问题。 |
|
九仙山人 奇侠 经验值:6421 发帖数:1347 精华帖:5 |
50楼
主题:回复:应用探讨——S7-200 PLC通信常遇到的问题
通讯出错排查
遇到通讯问题,我们要有耐心,逐项排查各种影响因素,直到通讯成功,可以参考如下的步骤: (1) 检查Step7-Micro/WIN与Windows操作系统是否完全兼容; (2) 检查是否使用西门子的原装编程电缆,并区分新旧两种电缆; (3) 检查电脑上的COM通讯口设置,记住把接收和发送缓冲区都设置为最小值,并保持选中“FIFO”选择框; (4) 检查编程电缆的DIP开关设置,是否与Micro/WIN的通讯速率设置相同;对于普通编程电缆,搜索速率最高为19.2,因此如果CPU通讯口速率被设置为187.5K,则不能被找到。 (5) 检查CPU右下角的传感器直流电源输出电压(测量L+/M),电压应当高于22V (6) 使用wipeout.exe程序,恢复CPU的出厂设置。缺省情况下CPU通讯口地址为2,通讯速率9.6K。这个程序可在STEP7-Micro/WIN的安装光盘中找到。 |
|
Automann 至圣 经验值:18299 发帖数:6168 精华帖:137 |
51楼
主题:回复:应用探讨——S7-200 PLC通信常遇到的问题
不能安装EM277的GSD文件的原因与解决的办法
GSD (General Station Des cription,常规站说明)文件是可读的ASCII码文本文件,包括通用的和与设备有关的通信的技术规范。要实现S7-200和S7-300的DP通信,需要安装DP从站模块EM277的GSD文件。可以在下载中心搜索和下载GSD文件。 执行HW Config中的菜单命令“选项”→“安装GSD文件”,在出现的“安装GSD文件”对话框中,用最上面的选择框选中GSD文件“来自目录”或“来自项目”。点击“浏览”按钮,用出现的“浏览文件夹”对话框选中GSD文件或项目所在的文件夹,选中列表框中出现的GSD文件,点击“安装”按钮,开始安装。 安装GSD文件时,可能会出现一个对话框,报告“目前尚无法更新。在一个或多个STEP 7应用程序中将至少有一个GSD文件或类型文件正在被引用。”点击“确定”按钮,不能安装GSD文件。 这是因为当前打开的某个项目中包含DP从站,至少有一个GSD文件被引用。必须关闭所有已打开并引用了GSD文件的项目(包含DP从站的项目),只打开没有DP从站的项目,才能安装GSD文件。 安装好以后,可以在STEP 7的硬件组态工具HW Config右边的硬件目录窗口的文件夹\PROFUBUS DP\Additional Field Devices\PLC\SIMATIC中看到EM 277,将它拖拽到组态窗口的DP网络上就可以了。
追求完美
|
|
Automann 至圣 经验值:18299 发帖数:6168 精华帖:137 |
52楼
主题:回复:应用探讨——S7-200 PLC通信常遇到的问题
modbus通信的基本知识和应用举例
modbus是美国的Modicon公司开发的一种报文传输协议,1979年该公司成为施耐德公司的一部分。modbus协议在工业控制中得到了广泛的应用,它已经成为一种通用的工业标准。 modbus协议是一个主-从协议,采用请求-响应方式。串行总线中只有一个主站,可以有1~247个从站。 modbus协议有ASCII和RTU(远程终端单元)这两种报文传输模式。ASCII模式每个8位字节都转换为两个ASCII字符发送。RTU模式的报文以字节为单位进行传输,报文最长为256字节。在同样的波特率下,传输效率比ASCII模式的高,不需要作ASCII码与二进制数之间的转换。 下面是modbus RTU通信帧的基本结构: 地址 功能码 数据1 …… 数据n CRC低字节 CRC高字节 从站地址为0~247,它和功能码均占一个字节,命令帧中PLC地址区的起始地址和CRC各占一个字,数据以字或字节为单位(与功能码有关),以字为单位时高字节在前,低字节在后。报文的最后两个字节是循环冗余校验码(CRC),CRC的高字节在前,低字节在后。 modbus包括多种功能,每一功能都有相应的功能代码。S7-200支持的modbus功能见S7-200的系统手册。 可以用计算机作modbus主站,S7-200作从站,计算机发送带有从站地址的请求报文,具有该地址的从站接收到后发出响应报文进行应答。 功能3用于读取单个或多个保持寄存器(V 存储区中的字)的内容,最多可以读120个字。下面是功能3的请求帧: 站地址 3 首字地址 字数 CRC 假设用功能3读取1号站中从VW20开始的两个字(VW20和VW22),VW20对应的modbus地址为000010,对应的十六进制数为16#000A,字数为16#0002,CRC为16#09E4,则请求帧为 01 03 00 0A 00 02 E4 09(十六进制数)。 响应帧的格式如下: 站地址 3 数据字节数 数据字1 …… 数据字n CRC 假设VW20和VW22的值分别为16#1234和16#ABCD,CRC为16#2000,响应帧为01 03 04 12 34 AB CD 00 20(十六进制数)。
追求完美
|
|
流年2 游士 经验值:193 发帖数:8 精华帖:1 |
54楼
主题:回复:应用探讨——S7-200 PLC通信常遇到的问题
用过200与300的通讯,通过EM277挂在300的DP网络上。EM277中的byte、word是数据传输时数据一致性的问题,比如选用8byte和选用4Word有什么区别,选用byte,数据传输时已字节为单位传输,选用word时,数据传输以字为单位传输。如选用8byte in/8byte out 时,200中的VB0-VB7为300传给200的数据,对应300中的PIB0-PIB7;VB8-Vb15为200传给300的数据,对应300中PQB0-PQB7。若有多个EM277从站,则在组态时,要设置EM277的偏移地址。
|
|
8803 侠圣 经验值:2747 发帖数:564 精华帖:6 |
65楼
主题:回复:应用探讨——S7-200 PLC通信常遇到的问题quote:以下是引用Mr.M在2011-05-16 13:56:29的发言: 记得一次用串口通信调试软件modscan32 测试S7-200的modbus从站功能,通讯不上,下载的是西门子官方的modbus程序代码,不知道是何原因?大家再用的串口通信调试软件 是什么呀?各位老师可否分享下 我在一次调试时,由于库运行地址与程序中的数据区有冲突,一直通讯不上,最后我是先测试一个空程序,然后再逐渐添加所调试的程序,找出冲突的数据区,OK。调试软件也是modscan32。 调试模块是用研华的485-232模块。 应该注意一下:子程序参数HOLDSTAR和MAXHOLD指定的保持寄存器区,是在S7-200 CPU的V数据存储区中分配,此数据不能和库指令数据区有任何重叠,否则在运行中会产生严重错误,不能通信。 modbus中保持寄存器区按“字”寻址,MAXHOLD规定的是VW个数,不是VB个数。 例如:HOLDSTAR=VB0 MAXHOLD=1000 (1) 实际上这个通信缓冲区占用了VB0-VB1999共2000个字节。 (2) 库指令保留数据区至少从VB2000开始。 (3) 保持区不一定从VB0开始。
不耻下问
|
|
Touchech 新手 经验值:40 发帖数:13 精华帖:1 |
74楼
主题:回复:应用探讨——S7-200 PLC通信常遇到的问题quote:个人认为s7-200的USS通讯抗干扰能力太差了.我都是按照MM440手册上说的接地和连线.(用西门子专用的DP线).距离只要超过60到70米.只要大功率的变频器一开.马上通讯出错.但是用modbus来做通讯.相对USS的抗干扰能力要好的多.同样的项目我采用S7-200和汇川的MD320做modbus通讯.一点问题都没有.也不清楚是什么原因. USS通信时最后一个站的偏置电阻和终端电阻一定要有,确保通信线上的电平稳定,同时吸收网络上的反射信号。 变频器本身就是一个大干扰源,通信线质量和屏蔽层接地的情况直接影响到通讯的效果。 modbus和USS在S7-200中都是利用自由口的接收和发送指令编写的,本身都属于串口通信。 USS和modbus的抗干扰性的比较没有确定的结果。本身两个通信协议就不一样,USS协议是S7-200与西门子的变频器进行通信的一种协议,而且是适用于实时性要是不是非常严格的情况。 因为变频器不用,个人觉得进行比较不是很有说服力。 不管怎样跟变频器通信时一直注意干扰的问题。
来自西门子技术支持!
|