当前位置:首 页 > PLC编程

西门子plc串口通讯的三种方式

时间:2022-01-04 21:25 浏览:16次 PLC编程 西门子plc 串口 通讯 三种 方式

西门子plc串口通讯的三种方式

西门子plc串口通讯的三种方式

1、RS485 串口通信第三方设备大部分支持,西门子S7 PLC 可以通过选择自由口通信模式控制串口通信。最简单的情况只用发送指令(XMT)向打印机或者变频器等第三方设备发送信息。不管任何情况,都必须通过 S7 PLC编写程序实现。当选择了自由口模式,用户可以通过发送指令(XMT)、接收指(RCV)、发送中断、接收中断来控制通信口的操作。

2、PPI 通信PPI 协议是S7-200CPU 最基本的通信方式,通过原来自身的端口(PORT0 或PORT1)就可以实现通信,是 S7-200 CPU 默认的通信方式。PPI是一种主-从协议通信,主-从站在一个令牌环网中。在CPU内用户网络读写指令即可,网络读写指令是运行在PPI协议上的。因此 PPI 只在主站侧编写程序就可以了,从站的网络读写指令没有什么意义。

3、MPI 通信MPI通信是一种比简单的通信方式,MPI网络通信的速率是19.2Kbit/s~12Mbit/s,MPI网络最多支持连接32个节点,最大通信距离为50M。通信距离远,还可以通过中继器扩展通信距离,但中继器也占用节点。MPI网络节点通常可以挂S7-200、人机介面、编程设备等。

自由口模式下西门子PLC与计算机的串口通信

1 引言SIMATIC S7-200 系列PLC是西门子家族中最小型的PLC,包括5 种基本型号共18 种规格的CPU。其基本型号分别为CPU 210、CPU 212、CPU 214、CPU 215、CPU 216, 控制点数可以从10点到128点, 除PLC所具有的一般功能外, 其强大的通讯能力使其区别于一般的小型PLC, 可通过网络、分布系统轻易完成复杂的控制要求, 在基本不增加成本的情况下大大提高控制系统的综合控制能力与自动化程度。这一点在大量的实际应用中已得到充分的证实,为经济地进行技术改造, 将控制与管理结合, 提高工厂的综合自动化程度提供了一种可能。

S7-200系列PLC的通信口分3种工作方式:l PPI(Point2to2Point Interface)方式;l 自由口通信(Freeport)方式;l PROFIBU S2DP方式。本文主要介绍PLC的自由口通信方式。自由口通信方式是一种通讯协议完全开放的工作方式, 如果说PPI方式是外设适应PLC的话, 那么自由口通信方式就是PLC适应外设。在自由口通信方式下外设不受PPI协议的限制,不支持PPI协议的设备也能够与S7-200系列PLC通讯, 在自由口通信方式下通讯口的协议由外设决定, PLC通过程序来适应外设。自由口通信方式是对PPI方式的一个补充,该方式使得S7-200系列PLC可以与任何具有通讯能力的、并且协议公开的设备相通讯。

2 自由口通信及通信协议

2.1 PLC的通信口

自由口通信就是计算机通过COM口发送指令到PLC的PORT0口(通过SM30设置)或PORT1口(通过SM130设置),PLC通过RCV接收指令,然后对指令进行译码,译码后调用相应的读/写子程序实现指令要求的操作,并返回指令执行的状态信息。

由于S7-200系列PLC的通信口是RS-485串行接口,而计算机是RS-232串行接口,所以计算机与PLC在通信时必须要进行RS-485/RS-232转换,西门子公司的PC/PPI电缆可完成这一转换,但由于其价格比较昂贵,而转换的原理又相对简单,所以可自制通信电缆。RS-485只需要二根数据线,这二根数据线既可以发送数据,也可以接收数据,通信双方采用半双工制,对于RS-232,技术已经非常成熟,应用范例也很多,参照有关资料就可以做一根可靠的通信电缆。

2.2 自由口通信通信协议[1]在自由口模式下,通信协议是由用户定义的。但系统选择在启动通信时,PLC具有优先权。PLC通过XMT发送指令,将数据通过COM口发至上位机,然后延时等待上位机反馈信息;上位机接收到数据后,进行数据处理,将反馈信息或修改后的数据通过COM口传送到PLC的PORT0(或PORT1)口。PLC通过RCV接收指令接收信息、数据并作相应处理。至此完成一轮“一问一答”式通信,如图1所示:

2.3 自由口通信指令发送数据格式[2]定义 计算机每次发送一个33字节长的指令来实现一次读/写操作,指令格式见表1。(1) 标识字符:包括起始字符和结束字符,起始字符标志着指令的开始,我们定义起始字符为ASCII码的“g”,不同的PLC从站可以定义不同的起始字符以接收针对该PLC的指令。结束字符标志着指令的结束,定义为ASCII码的“G”,不同的PLC从站可以定义不同的结束字符以接收针对该PLC的指令。(2) 指令类型:指示操作为读操作还是写操作操作,例如我们定义05H为读操作,06H为写操作。(3) 目标PLC站地址:表明是哪台下位机(每台下位机对应一个地址号),确保主机和从机的对应关系。(4) 目标寄存器地址:在PLC内部用4个字节表示寄存器地址,前两个字节表示存储器类型,后两个字节表示存储器号。(5) 读/写字节数M:读命令时,始终读取从目标寄存器开始的连续8个字节的数据(转换为十六进制ASCII码后占用16个字节),可以根据自己的需要取用,M可以任意写入。当写命令时,M表示的是要写入数据的十六进制ASCII码所占用的字节数。例如要写入1个字节的数据,数据在指令中以十六进制ASCII码表示,它将占用2个字节,此时应向M中写入“02”。同理,如果要写入5个字节的数据,M中应写入“0A”。(6) BCC校验码:校验码的生成方法就是将要传送的字符串的ASCII码以字节为单位作异或和,并将此异或和作为指令的一部分传送出去;同样地,接收方在接到指令后,以相同的方式对接收到的字符串作异或和,并与传送方所送过来的值作对比,若其值相等,则代表接收到的指令是正确的,反之则是错误的。

2.4 自由口通信指令反馈数据格式PLC在接到上位机指令后,将发送一个21字节长反馈信息,格式见表2。其中状态信息字节包含指令执行的状态信息,例如我们可以定义01H代表读取正确,02H代表写入正确。03H代表BCC校验码错误,04H代表指令不合法。

其他反馈数据的定义与发送数据格式的定义基本相似,在此就不赘述。

要注意在西门子PLC中所有通信数据均要用十六进制ASCII码表示。一条指令除包含数据外,还包含必要的控制字(起始字符、结束字符、指令类型等)。如果指令中的数据直接以其原本的形式传输,则不可避免的会与指令中的控制字发生混淆。例如本例中,指令的起始字符为“g”,其ASCII码值为67H,结束字符为“G”,其ASCII码值为47H。假设要写入的数据中也有47H,并且数据直接以其原本的形式传输,则PLC会因为接收到了数据中的47H而停止接收,这样PLC接收到的指令将是一个不完整的非法指令,很可能造成PLC的误动作。

为了避免这种情况的发生,S7-200系列PLC用文本来传送二进制数据。通过以16进制ASCII码的格式描述数据,每个二进制的字节都可以表示成一对ASCII编码,这对编码表示这个字节的两个16进制字符。这种格式可以表示任何的数值,仅仅使用ASCII代码的30H到39H(表示0到9)和41H到46H(表示A到F)。ASCII码的其余部分可以用作控制字(起始标志、结束标志、指令类型等)。这样,数据中的47H以ASCII码的形式进行传送就变成了34H、37H两个字节,从而避免了PLC因接收到数据中的47H而停止接收的错误。

2.5 PLC程序执行过程 自由口方式只能在PLC运行方式下通信。在进行通信之前,必须先对通信口初始化。S7-200PLC通信口的初始化是通过对特殊标志位SMB30和SMB130的设置来实现的。对222型CPU而言,只需定义SMB30。这些字节设置了自由口通信的操作方式,并提供自由端口或者系统所支持的协议之间的选择。通过使用发送中断、接收中断、XMT(发送指令)、RCV(接收指令)等指令来实现用户程序控制通信端口。XMT指令激活发送数据区中的数据,数据缓冲区第一个数据指明了要发送的数据字节数,缓冲区最大为255个字符,在发送完最后一个字符时产生发送中断,执行中断程序;RCV指令激活初始化或结束接收信息的服务,它可以接收至多255个字符,这些字符存在缓冲区中。如果有一个中断程序连接到接收完成事件上,则接收到缓冲区的最后一个字符时,会产生一个中断,执行中断程序。由自由通信协议支持所允许的完全柔性,可以使用字符中断控制来接收数据。具体流程图见图2。主程序及初始化部分程序如下:NETWORK 1LD SM0.1 第一次扫描调用初始化子程序CALL initializeNETWORK 2LDB=VB134, VB199 指令中的站地址与本机站地址相符AB=VB102, 5 指令类型为读指令A M0.0 BCC码校验正确CALL Read 调用读子程序NETWORK 3LDB=VB134, VB199 指令中的站地址与本机站地址相符AB=VB102, 6 指令类型为写指令A M0.0 BCC码校验正确CALL Write 调用写子程序NETWORK 4LD M0.1 指令接收完成后调用BCC码校验子程序CALL VerifyNETWORK 5LD SM4.5 当端口空闲时启动RCV RCV VB100, 0Initialize子程序:NETWORK 1LD SM0.0MOVB 9, SMB30 0口"9600,N,8,1"NETWORK 2 LD SM0.0 RCV指令初始化MOVB 16#EC, SMB87 MOVB 103, SMB88MOVB 71, SMB89MOVB +1000, SMW92MOVB 35, SMB94R SM87.2, 1NETWORK 3LD SM0.0ATCH RCVcomplete, 23 连接口0接收完成的中断NETWORK 4LD SM0.0ATCH XMTcomplete, 9 连接口0发送完成的中断NETWORK 5LD SM0.0ENI 中断允许

2.6 上位机编程应注意的问题(1) 控制字的选取反映CPU工作方式的模式开关当前位置的特殊存储器位为SM0.7,它控制自由端口模式的进入。当SM0.7为0时,模式开关处于TREM位置,当SM0.7为1时,模式开关处于RUN位置。而只有当模式开关位于RUN位置时,才允许自由端口模式。SMB30是自由口模式控制字节,用来设定校验方式通信协议、波特率等通信参数。SMB87用来设定接收信息状态字节。SMB88用来设定信息的开始字符。SMB89用来设定信息的结束字符。SMB90用来设定空闲行的时间间隔(ms)。SMB92用来设定字符间/信息间定时器超时值(ms),若超出此时间段,则终止接收信息。RCV指令初始化MOVB 16#EC, SMB87 MOVB 103, SMB88MOVB 71, SMB89MOVB +1000, SMW92MOVB 35, SMB94R SM87.2, 1NETWORK 3LD SM0.0ATCH RCVcomplete, 23 连接口0接收完成的中断NETWORK 4LD SM0.0ATCH XMTcomplete, 9 连接口0发送完成的中断NETWORK 5LD SM0.0ENI 中断允许

2.6 上位机编程应注意的问题(1) 控制字的选取反映CPU工作方式的模式开关当前位置的特殊存储器位为SM0.7,它控制自由端口模式的进入。当SM0.7为0时,模式开关处于TREM位置,当SM0.7为1时,模式开关处于RUN位置。而只有当模式开关位于RUN位置时,才允许自由端口模式。SMB30是自由口模式控制字节,用来设定校验方式通信协议、波特率等通信参数。SMB87用来设定接收信息状态字节。SMB88用来设定信息的开始字符。SMB89用来设定信息的结束字符。SMB90用来设定空闲行的时间间隔(ms)。SMB92用来设定字符间/信息间定时器超时值(ms),若超出此时间段,则终止接收信息。SMB94用来接收字符的个数。

(2) 半双工的通信处理由于RS-485为半双工电气标准硬件电路,在用PC/PPI电缆时,发送和接收之间要有一定的时间间隔,这是由电缆本身的切换时间决定的,否则就会出现XMT/RCV冲突现象。因此,收发使能的控制切换需延时(尽管短),且通信协议(底层)一般也要求收发之间有间隔,以便正确判断传送数据的正确性。采取的措施:在发送前允许发送中断,在发送完成中断程序中关闭发送中断,延时启动接收中断,并在接收完成中断中关闭接收中断。根据经验,如果用9600波特率的话最短时间间隔至少要50ms以上,否则可能会造成数据的丢失。但我们发现,在发送完成后将自定义的标志位置位,检测到标志位上跳沿的首次扫描执行一遍RCV,即使不加发送延时也不会造成数据丢失。

3、上位机部分在上位机中利用Mscomm控件,对控件进行简单的设置就可以实现PLC与PC机之间的串行通信。对Mscomm控件的介绍,可以参考VB编程的书籍[3],在此就不叙述。

4、总结在自由口通信方式下, 可以用PLC控制打印机、变频器等执行机构, 或者由条码阅读器读入数据,以及实现PLC与上位机交换数据, 或者通过调制解调器实现远程控制等等, 应用范围很广。采用自由口通信方式与外围设备通信比较方便、自由, 在保证方便自由的前提下凭借PLC本身丰富的指令系统来适应各种协议。并且采用自由口通信方式控制变频器, 在PLC内进行实数运算, 实现安全的数字量控制, 不存在精度的损失,也不占用输出点, 优点很明显。作为调速系统主要组成部分的变频器, 使用范围十分广泛, 目前绝大部分厂家的变频器都带有或可以另配通讯口, 因此, 使用该方式控制变频器具有普遍的应用价值, 在不增加任何硬件设备的情况下, 提高所设计系统的控制层次与控制精度, 并为将来可能的联网控制作好准备。

查看更多