搜档网
当前位置:搜档网 › NET的计算机与S7-200_PLC自由口通信

NET的计算机与S7-200_PLC自由口通信

NET的计算机与S7-200_PLC自由口通信
NET的计算机与S7-200_PLC自由口通信

.NET的计算机与S7-200 PLC自由口通信

摘要:介绍了S7-200 PLC和计算机的通信方式,详细说明了自由口模式下PLC与计算机通信的实现方法,包括自由口工作的通信流程,计算机指令帧格式约定,PLC反馈帧的格式约定等。编写了S7-200 PLC的自由口通信程序,在上位机中用.net环境下的C#语言开发了计算机与PLC的串行通信程序,可灵活实现对PLC存储区数据的读写功能。

关键词: PLC; .NET; C#;自由口通信

中图分类号:TP393 文献标识码: A

Free-port Communication Method between PC and S7-200 PLC based on .NET

LU Qing

Abstract: The communication method between S7-200 PLC and computer is introduced and the S7-200 PLC communication under the free-port is illuminated in detail, which mainly includes working process, computer instruction format and PLC feedback information format. The serial communication program between computer and S7-200 PLC based on C# is programmed, where host computer can read and write any kinds of data in PLC to meet the requirement of the system . Key words: PLC; .NET; C#; Free-port Communication

引言

PLC作为一种高效、灵活、可靠的控制器,已经广泛地应用在包括数字逻辑控制、运动控制、闭

环过程控制、数据处理和联网通信等工业控制领域。在联网通信方面,PLC与上位计算机设备一起,可以

组成“集中管理、分散控制”的分布式工业控制系统。在这种控制系统中,PLC与上位机的通信对系统整

体性能有着较大的影响。面对众多厂家不同类型的PLC,它们在功能编程上没有统一的标准而且在通信协

议上也是千差万别,选择一种即能满足通信要求又经济实用的通信协议是非常关键的。本文以S7-200PLC

为对象,详细研究了S7-200PLC在自由端口模式下与PC之间的通信方法,并采用.net环境下的C#语言编写通信程序实现了计算机与PLC之间的通信。这种通信方式硬件投入低,通信协议灵活,可以在多个工业控制领域得到广泛的应用。

1 S7-200 PLC与上位机的通信方式

S7-200 系列PLC与上位机进行通信主要有以下几种方式:(1)通过S7-200 PLC的OPC服务器(pc access)作为上位机的OPC服务器,这种方式只须在OPC服务器中配置相应的测点数据,编程简单,但通信速率不高,用户不能自由修改通信协议;(2)利用触摸屏,这种方式需要根据触摸屏兼容的通信协议进行选择,通信可靠性高,但灵活性差,触摸屏界面编程功能也不够强大;(3)利用通用编程软件实现,这种方法虽然系统开发工作量大,对技术人员的水平和经验都要求较高,但编程灵活,可以实现比较复杂的功能。本文采用了第三种通信方式,在开发通信软件时考虑了S7-200 PLC所特有的一种通信方式—自由口通信模式。在自由口模式下用户可自定义协议,利用串口和PLC的通信口来收发数据,通信功能完全由用户程序控制,通信任务和信息定义均需由用户编程实现,通过调用子程序来进行接收中断、发送中断、发送指令(XMT)、接收指令(RCV)等通信控制操作。

2 自由口通讯工作模式的定义

在中小规模系统,通信速率要求不是特别高的情况下,S7-200 PLC自带的编程口可以作为通信口

使用。S7-200 PLC编程软件与PLC进行通信所利用的PPI协议实质也是一种RS-485通信,它可在多种模

式下工作,其中自由口通信功能是S7-200 PLC的一个独特的功能。在自由口通信方式下,S7-200 PLC可

以与任何协议公开的设备、控制器进行通信,最高波特率可达38.4kbit/s。一般上位机串行口符合RS-232C 标准协议,为了与PLC的RS-485通信则必须进行协议转换。在PLC编程方面,自由口模式下的通讯协议主要就是自由口通信工作模式控制字的定义以及发送和接受数据指令的格式约定及其参数设置等。

2.2 接收指令(RCV)

RCV(接收指令)从S7-200 PLC的通讯口接收一个或多个数据字节。接收的数据字节保存在接收数据缓冲区中。接收指令完成后,会产生一个中断事件(对Port0为中断事件23,对Port1为中断事件24)。启动接收指令后,CPU的通讯控制器就处于接收状态。使用接收指令时需要设置消息起始和结束的判断条件,通讯控制器用这些条件来判断消息的开始和结束。当判断消息结束时接收状态终止,否则通讯口会一直处在接收状态。由于S7-200 PLC的自由口通讯是建立在RS-485半双工通讯的基础上,接收和发送不能同时进行,接收指令不结束,就不能执行发送指令。对几个重要的特殊存储区设置举例如下:

MOVB 16#EC, SMB87(允许接受,检测起始字符和结束字符,超时检测)

MOVB 104, SMB88(发送报文起始字符为h)

MOVB 72, SMB99(结束字符为H)

MOVB +1000, SMB92(接受超时时间为1s)

MOVB 35, SMB94(接受最大字符数为35)

2.3 发送指令(XMT)

XMT 发送指令利用数据缓冲区指定要发送的字符,用于向指定通信口以字节为单位发送一串数据字符,发送命令格式为 XMT TABLE,PORT,其中TABLE为数据存储区地址,PORT指定PLC要发送数据的端口。一次最多发送255个字节。XMT 发送指令完成后,会产生一个中断事件(Port0为中断事件9,Port1为中断事件26)也可以监视发送完成状态位SM4.5和SM4.6的变化来产生XMT中断。

3 S7-200 PLC 通信程序设计

3.1 通信程序流程

本程序中S7-200 CPU从通讯端口0接收字符串,使用RCV指令和接受完成中断接受数据,以自定义协议来实现计算机与S7-200PLC之间的数据通信时,为了避免通信中的各方争用通信线路,一般采用主从方式,即计算机作为主机,向作为从站的S7-200 PLC端口0发送规定格式的报文。

当S7-200 PLC接收到指令后进行相关的数据校验, 这里采用BBC校验方式,即将每一帧的第一个字节(不包括起始字符)到该帧中正文校验码之前的所有字节作异或运算(本例中是从VB101到VB130),并将校验码作为报文一部分发送到计算机。在PLC接收端也要对接收缓冲区的数据进行BBC校验,然后与指令中的校验码比较,如果校验码相等则置位M0.0,PLC执行命令并将所接收到的数据反馈给计算机;如果校验码不相等, 则置位M0.1并返回带有校验码错误的反馈信息,通信流程图如图1所示。

图 1 PLC通信流程图

3.2 通信帧格式约定

计算机每次发送一个33字节的指令来实现一次读写操作。每条指令都包括起始字符、结束字符、目标站地址、目标寄存器地址、要读写的字节数、要写入的数据和校验码。S7-200 PLC接收到计算机发送

来的数据,先存放在PLC的接收缓冲区,设定以VB100开始。自定义的接收缓冲区的数据设计格式见表1 表 1 PLC接收数据缓冲区

VB100 接收到的字节数

VB101 起始字符

VB102 指令类型(读/写)

VB103 VB104 目标站地址

VB105~VB112 目标寄存器地址

VB113 VB114 读写字节数

VB115~VB130 要写入的数据

VB131 VB132 校验码

VB133 结束字符

为避免在通信中由于指令中的起始字符或者结束字符与传输的数据有重复而导致PLC的误动作,这里采用文本传送二进制数据,即通过以16进制的ASCII码的格式来描述数据,让每个二进制的字节都表示成一对ASCII编码的16进制字符。比如48H可表示为34H、38H两个字节。指令类型自定义为05H代表读操作,06H代表写操作。目标寄存器地址采用四个字节表示,前两个字节表示寄存器类型,后两个表示寄存器号,例如:VB101的地址可表示为08 00 00 65,其中“08 00”表示V寄存器区,“00 65”表示寄存器号101。目标寄存器地址表示方法如表2所示:

PLC接收上位机的指令后会返回一个21字节的反馈信息。自定义的发送缓冲区的格式如表3所示:

表 3 PLC发送缓冲区格式

VB153 VB154 VB155 VB156~VB171 VB172 VB173 VB174

发送字符数起始字符状态信息发送数据区校验码结束字符

其中VB155状态信息的格式定义为:01H代表读入正确,02H代表写入正确,03H代表校验码错误,04H代表指令不合法。

3.3 主要程序设计

本系统PLC程序设计采用模块化设计,主要包括主程序、初始化子程序、读子程序、写子程序、校验子程序、接收完成中断程序和发送完成中断程序。

主程序负责判断读写条件和调用各个子程序,具体包括判断PLC运行模式;调用初始化子程序;判断本机站号、指令类型和校验码等是否符合读写程序;调用读、写子程序;接收数据等。

在初始化子程序中主要设置一些通信参数和RCV接收参数并开启接收完成中断0和发送完成中断1。在读写子程序中根据接收到的指令信息读取目标寄存器数据或者把数据写入目标寄存器中,并利用XMT发送反馈信息到计算机。读写程序如下:

读子程序:

LD SM0.0

R SM87.7, 1 (禁止接收)

R M0.0 (复位校验位)

RCV VB100, 0

MOVB 103, VB154 (送返回信息起始字符为g)

MOVB 1, VB155 (状态信息读取正确)

HTA *VD135,VB156,16(将要读取的数据做16进制转ASCII码转换)

MOVB 71, VB174 (结束字符为G)

MOVB 21,VB153 (发送字节数为21个字节)

……(校验发送数据)

LD SM4.5(端口0发送空闲时置1)

XMT VB153, 0

写子程序与读程序类似,只是要对写入的数据做ASCII码转换:

MOVD &VB115, VD145(装入要写的数据源的地址指针)

ATH *VD145, *VD135, VB139(对要写入的数据做ASCII码转16进制转换)

……

XMT VB153, 0

4 上位机C#编程

在WINDOWS环境下开发与PLC的通信软件,利用 .net环境下的通信组件SerialPort [3] 实现通信,并用 Visual C#编写软件程序。该通信组件提供了使用RS232开发串行通信软件的细则,组件主要属性如表4所示:

.net环境下的SerialPort组件没有像传统的Visual Basic 6.0中的MSComm.PortOpen =

True/False属性,所以打开关闭串口相应的是调用类的Open()和Close()方法。SerialPort组件读取数据的许多方法是同步阻塞调用,应尽量避免在主线程中调用,可以使用异步处理或线程间处理调用这些读取数据的方法,采用这种方式可以显著提高系统的工作性能,这也是.net环境与Visual Basic 6.0编程环境的不同之处。

SerialPort组件的串口属性要设置成与PLC串口参数相同的数值,例19200bit/s,无检验,1位停止位,8个数据位。触发SerialPort组件接收数据的事件是DataReceived事件,设置ReceivedBytesThreshold为1表示立即接收。由于DataReceived事件在辅线程被引发,而收到完整的数据要在主线程窗体上显示,所以要用到跨线程处理,在C#中可采用控件异步委托BeginInvoke的方法窗体显示收到的数据。SerialPort 接收主要程序如下:

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)

{

int int_Len = serialPort1.BytesToRead;//接收字节数

byte[] bytes2 = new byte[int_Len]; //接收字节

serialPort1.Read(bytes2, 0, int_Len); //读入串口数据

string st1 =ToHexString(bytes2); //转换数据为16进制显示

MyInvoke iv1 = new MyInvoke(Display); //异步委托调用显示数据

ReceiveBox1.BeginInvoke(iv1, new object[] { st1 });

}

编写的通信界面如图2所示:

图 2 PLC串口通信界面

在这个通信界面下可以自由设置串口参数,当设置好通信参数、命令类型和寄存器参数后,即可发送指令数据,命令类型中05代表读,06代表写。操作界面分为手动发送和定时循环发送,利用自动定时发送可实时的读取PLC中的参数,也可利用手动发送把数据写入PLC或从PLC中读出。发送流程图如下:

图 3 计算机发送流程图

5 结束语

本文采用自由口通信方式实现了计算机和PLC的通讯,上位机采用C#开发通信软件。由于自由端口模式通信用户投资较低,编程时可以自定义通信协议并能灵活的与各种通信设备通信,且PLC程序具有模块化、结构化的特点,各种子程序可移植性好,因此在各种分布式控制系统和需要计算机处理数据的场合中会得到很好的运用和发挥。

6 参考文献

[1] 廖常初.PLC编程及应用[M].北京:机械工业出版社,2005

[2] SIMATIC S7-200可编程控制器技术手册[M].2002

[3] PRICE,J.等著,窦芳等译.Visual C#.NET 从入门到精通[M].电子工业出版社,2003

[4] 章立民.Visual C# 2005 程序开发与界面设计秘诀[M].机械工业出版社,2006

[5] 陈小刚,裴开平.计算机与PLC串行通信的实现[J].河海大学常州分校学报,2001,15(4)

[6] 孙旭松,胡雪梅.PLC 与上位机的通信实现[J].科技资讯,2006(25)

S7-200通讯的编程步骤---自由口通讯

PLC 和变频器 频器博客原创(https://www.sodocs.net/doc/bd8624683.html,)
S7通讯的编程步骤-----自由口通讯 S7-200 通讯的编程步骤---自由口通讯
S7-200 自由口通讯是基于 RS485 通讯基础的半双工通讯, 因此, 发送和接收指令不能同时执行。 自由口通讯使用 SMB30(口 0)和 SMB130(口 1)来定义通讯口 的工作模式。SMB30/SMB130 各位的定义如下:
图 1:通讯口工作模式寄存器
使用自有口通讯,SM30.0 和 SM30.1(SM130.0 和 SM130.1=0) 必须分别为 1 和 0。 发送指令(XMT) 一、 发送指令(XMT) 使用 XMT 发送指令可以把存于缓冲区中的数据, 一次发送一个或
1

PLC 和变频器 频器博客原创(https://www.sodocs.net/doc/bd8624683.html,)
多个字节的数据,最多为 255 个。发送完最后一个字符后还可以连接 到一个发送完中断(端口 0 为 9,端口 1 位 26,见下表) 。
图 2:中断事件表
2

PLC 和变频器 频器博客原创(https://www.sodocs.net/doc/bd8624683.html,)
发送缓冲区的格式如下表所示:
图 3:发送缓冲区的格式 说明: T+0:发送信息的字节个数需要提前定义。 T+1~T+255:要发送的数据字节
和 XMT 有关的寄存器:SMB4 的 SM4.5 和 SM4.6。SM4.5=1 时,口 0 发送完毕;SM4.6=1 时,口 1 发送完毕。 由以上可以看出,有两种方法可以检测端口 0 或 1 的数据发送 状态:一种是利用中断,一种是利用寄存器 SMB4 的第 5 位(口 0) 和第 6 位(口 1) 。 接收指令(RCV) 二、 接收指令(RCV) 使用接收指令(RCV)可以从端口 0 或 1 接收一个或多个字节的 数据(最多 255 个) ,并存于数据缓冲区。接收完最后一个字节后可 以连接到一个接收完中断(口 0 是 23,口 1 是 24,见图 2 所示) 。 接收缓冲区的格式如下表所示:
3

实现S-SMART自由口通讯

如何实现S-SMART自由口通讯

————————————————————————————————作者:————————————————————————————————日期:

如何实现S7-200SMART自由口通讯 自由口通讯协议的关键条件 定义开始接收消息和停止接收消息的条件。 1、空闲线检测:设置il=1,sc=0,bk=0,smw90/smw190>0 空闲线条件定义为传输线路上的安静或者空闲的时间。SMW90/SMW190中是以ms为单位的空闲时间。在该方式下,从执行接收指令开始起动空闲时间检测。在传输线空闲的时间大于等于SMW90/SMW190中设定的时间之后接收的第一个字符作为新信息的起始字符。接收消息功能将会忽略在空闲时间到达之前接收到的任何字符,并会在每个字符后面重新启动空闲线定时器。 空闲线时间应大于以指定波特率传送一个字符所需要的时间。空闲线时间的典型为以指定的波特率传送3个字符所需要的时间。传输速率为19200bit/s时候,可设置空闲时间为2ms。对于二进制协议,没有特定起始字符的协议或指定了消息之间最小时间间隔的协议,可以将空闲线检测用作开始条件。 2、起始字符检测:设置il=0,sc=1,bk=0,忽略smw90/smw190 起始字符是消息的第一个字符,以SMB88/SMB188中的起始字符作为接收到的消息开始的标志。接收消息功能忽略起始字符之前收到的字符,起始字符和起始字符之后收到的所有字符都存储在消息缓冲区中。起始字符检测一般用于ASCII协议。 3、空闲线和起始字符:设置il=1,sc=1,bk=0,SMW90/SMW190大于0 满足空闲线条件之后,接收消息功能查找指定的起始字符。如果接收到的字符不是 smB88/smb188指定的起始字符,将开始重新检测空闲线条件。在满足空闲线条件之前接收到的以及起始字符之前接收到的字符都将会被忽略。这种方式尤其适合用于通讯链路上有多台设备的情况。 4 、break检测:设置il=0,sc=0,bk=1,检测smw90/smw190和smb88/smb188以接收到的break(断开)作为接收消息的开始。当接收到的数据保持为0的时间大于完整字符(包含起始位,数据位,奇偶校验位和停止位)传输的时间,表示检测到break。断开条件之前接收到的字符将忽略,断开条件之后接收到的任意字符都会存储在消息缓冲区中。 5、break和起始字符:il=0,sc=1,bk=1,忽略smw90/smw190 断开条件满足后,接收消息功能将查找指定的起始字符。如果接收到的字符不是起始字符,将重新搜索断开条件。所有在断开条件满足之前在接收到起始字符之前接收的字符都会忽略。起始字符和所有后续字符一起存入消息缓冲区 6、任何字符开始接受:设置il=1,sc=0,bk=0,smw90/smw190=0 忽略smb88/smb188中的起始字符。应为smw90/smw190中的空闲线时间为0,接收指令已经执行,便将立即开始强制接收所有的任意字符,并将存入消息缓冲区。

200的自由口通讯说明

自由口通讯概述 S7-200PLC的通讯口支持RS485接口标准。采用正负两根信号线作为传输线路。 工作模式采用串行半双工形式,在任意时刻只允许由一方发送数据,另一方接收数据。 数据传输采用异步方式,传输的单位是字符,收发双方以预先约定的传输速率,在时钟的作用下,传送这个字符中的每一位。 传输速率可以设置为1200、2400、4800、9600、19200、38400、57600、115200。 字符帧格式为一个起始位、7或8个数据位、一个奇/偶校验位或者无校验位、一个停止位。 字符传输从最低位开始,空闲线高电平、起始位低电平、停止位高电平。字符传输时间取决于波特率。 数据发送可以是连续的也可以是断续的。所谓连续的数据发送,是指在一个字符格式的停止位之后,立即发送下一个字符的起始位,之间没有空闲线时间。而断续的数据发送,是指当一个字符帧发送后,总线维持空闲的状态,新字符起始位可以在任意时刻开始发送,即上一个字符的停止位和下一个字符的起始位之间有空闲线状态。 示例:用PLC连续的发送两个字符(16#55和16#EE)(程序如图3和图4),通过示波器测量CPU通讯端口管脚3/8之间的电压,波形如下图1.: 示例说明: 16进制的16#55换算成2进制等于2#01010101,16进制的16#EE换算成2进制等于2#11101110。如图所示,当数据线上没有字符发送时总线处于空闲状态(高电平),当PLC发送第一个字符16#55时,先发送该字符帧的起始位(低电平),

再发送它的8个数据位,依次从数据位的最低位开始发送(分别为1、0、1、0、1、0、1、0),接着发送校验位(高电平或低电平或无)和停止位(高电平)。因为本例中PLC连续的发送两个字符,所以第一个字符帧的停止位结束后便立即发送下一个字符帧的起始位,之间数据线没有空闲状态。假如PLC断续的发送这两个字符,那么当PLC发送完第一个字符帧的停止位后,数据线将维持一段时间空闲状态,再发送下一个字符帧。 字符传输的时间取决于波特率,如果设置波特率为9.6k,那么传输一个字符帧中的一位用时等于1/9600*1000000=104us,如果这个字符帧有11位,那么这个字符帧的传输时间等于11/9600*1000=1.145ms. 通讯口初始化 SMB30(对于端口0)和SMB130(对于端口1)被用于选择波特率和校验类型。SMB30和SMB130可读可写。见下图2. 图2.特殊存储器字节SMB30/SMB130 示例:定义端口0为自由口模式,9600波特率,8位数据位,偶校验,程序如下图3.:

如何实现S7-200SMART自由口通讯

如何实现S7-200SMART自由口通讯 自由口通讯协议的关键条件 定义开始接收消息和停止接收消息的条件。 1、空闲线检测:设置il=1,sc=0,bk=0,smw90/smw190>0 空闲线条件定义为传输线路上的安静或者空闲的时间。SMW90/SMW190中是以ms为单位的空闲时间。在该方式下,从执行接收指令开始起动空闲时间检测。在传输线空闲的时间大于等于SMW90/SMW190中设定的时间之后接收的第一个字符作为新信息的起始字符。接收消息功能将会忽略在空闲时间到达之前接收到的任何字符,并会在每个字符后面重新启动空闲线定时器。 空闲线时间应大于以指定波特率传送一个字符所需要的时间。空闲线时间的典型为以指定的波特率传送3个字符所需要的时间。传输速率为19200bit/s时候,可设置空闲时间为2ms。 对于二进制协议,没有特定起始字符的协议或指定了消息之间最小时间间隔的协议,可以将空闲线检测用作开始条件。 2、起始字符检测:设置il=0,sc=1,bk=0,忽略smw90/smw190 起始字符是消息的第一个字符,以SMB88/SMB188中的起始字符作为接收到的消息开始的标志。接收消息功能忽略起始字符之前收到的字符,起始字符和起始字符之后收到的所有字符都存储在消息缓冲区中。起始字符检测一般用于ASCII协议。 3、空闲线和起始字符:设置il=1,sc=1,bk=0,SMW90/SMW190大于0 满足空闲线条件之后,接收消息功能查找指定的起始字符。如果接收到的字符不是smB88/smb188指定的起始字符,将开始重新检测空闲线条件。在满足空闲线条件之前接收到的以及起始字符之前接收到的字符都将会被忽略。这种方式尤其适合用于通讯链路上有多台设备的情况。 4 、break检测:设置il=0,sc=0,bk=1,检测smw90/smw190和smb88/smb188 以接收到的break(断开)作为接收消息的开始。当接收到的数据保持为0的时间大于完整字符(包含起始位,数据位,奇偶校验位和停止位)传输的时间,表示检测到break。断开条件之前接收到的字符将忽略,断开条件之后接收到的任意字符都会存储在消息缓冲区中。 5、break和起始字符:il=0,sc=1,bk=1,忽略smw90/smw190 断开条件满足后,接收消息功能将查找指定的起始字符。如果接收到的字符不是起始字符,将重新搜索断开条件。所有在断开条件满足之前在接收到起始字符之前接收的字符都会忽略。起始字符和所有后续字符一起存入消息缓冲区 6、任何字符开始接受:设置il=1,sc=0,bk=0,smw90/smw190=0

实验十 自由口通信实验

实验十自由口编程实验 一、实验目的 了解PLC通信功能;初步掌握PLC自由口通信编程方法。 二、实验设备 1、THSMS-A型实验装置二台 2、安装了STEP7-Micro/WIN4.0编程软件的计算机一台 3、PC/PPI编程电缆,网络连接器。 4、锁紧导线若干 三、实验内容与步骤 (1)输入以下程序,通过串口调试软件(可从网上下载,下图为某一款软件主界面)或windows超级终端(使用方法附后,如果你的计算机中没有,请找老师或者从网上下载)观察现象。 Network 1 // 网络标题 // 传送:“S7-200你好”到VW100开始的五个字(十个字节) LD SM0.1 MOVB 16#09, SMB30 //9600,8,N,1 MOVW 16#5337, VW100 //“S”和“7”的ASCII码 MOVW 16#2D32, VW102 //“-”和“2”的ASCII码 MOVW 16#3030, VW104 //两个“0”的ASCII码 MOVW 16#C4E3, VW106 //“你”字的汉字机内码,产生办法:找到汉字区位码,将区码和位码分别变为16进制,再分别加上A0即得 MOVW 16#BAC3, VW108 //“好”的机内码 MOVB 10, VB99 //缓冲区有10个字节(即“S7-200你好”),缓冲区格式见教材P145图7-22 Network 2 LD SM0.5 //秒脉冲,占空比50% EU XMT VB99, 0 //上升沿发送VB99中写明的字节数,从端口0发送 (2)输入以下程序,通过串口调试软件(可从网上下载,下图为某一款软件主界面)或windows超级终端(使用方法附后,如果你的计算机中没有,请找老师或者从网上下载)观察现象。 主程序: Network 1 // 网络标题 // 网络注释 LD SM0.1 MOVB 9, SMB30 MOVB 1, VB100 MOVB 'A', VB101 Network 2 LD SM0.1 ATCH INT0, 8 ENI Network 3 LD I0.1

S7-200自由口通讯程序

S7-200自由口通讯程序 MAIN:S7200自由口通讯程序 LD SM0.1 CALL SBR_0:SBR0 //初始化子程序 LD SM0.7 = SM30.0 SBR_0:初始化子程序 LD SM0.0 MOVW +2, VW8 //PLC自由口地址,此处每台机器需设不同的地址 LD SM0.0 MOVB 9, SMB30 //通讯参数,波特率9600,自由口通讯 MOVD &VB100, VD40 MOVW +10, VW54 MOVB 12, VB150 MOVB VB9, VB151 MOVD &VB151, VD60 MOVB 6, SMB34 中断间隔6毫秒 ATCH INT_0:INT0, 10 连接定时中断 ATCH INT_1:INT1, 8 连接字符接收中断 ENI INT_0:中断程序入口定时中断 LD SM0.0 DTCH 10 解除定时中断 MOVD VD40, VD46 VB100的地址送VD46 MOVW +10, VW44 MOVW +10, VW54 ATCH INT_2:INT2, 8 //接收中断起用服务程序INT2 INT_1: 延时转向INT0 LD SM0.0 MOVB 5, SMB34 ATCH INT_0:INT0, 10 INT_2: 接受地址,并判断 LDB= SMB2, VB9 //地址和本机相符 MOVW VW8, AC0 累加器 MOVB 255, SMB34 ATCH INT_3:INT3, 8 //起用中断服务INT3,接受包 ATCH INT_5:INT5, 10 //起用延时监控服务INT5 CRETI LDB= SMB2, VB9 //地址和本机不符 NOT ATCH INT_0:INT0, 10 //返回中断入口

S7-200 SMART PLC 串口通信说明(图文并茂)

S 7-200 S M A R T 串口通信简介 S 7-200 S M A R T 支持的串口通信硬件及连接资源如表 1所示: 注意:1. P P I 模式只支持 S 7-200 S M A R T C P U 与 H M I 设备之间的通信; 2. 通信信号板的工作模式(R S 485/R S 232)是由用户决定的,可以在 M i c r o /W I N S M A R T 中通过设置系统块来设置。 详细设置方法见:如何设置串口通信参数 通信端口定义 1.S 7-200 S M A R T C P U 本体集成 R S 485 端口 (端口 0) 表 2. S 7-200 S M A R T C P U 本体集成 R S 485 端口引脚定义 2.通信信号板 表 1.S 7-200 S M A R T 串口参数 CPU 本体集成通讯口通信信号板(S B C M 01)通讯口类型R S 485 R S 485 R S 232 支持的通信协议 P P I / 自由口 / M O D B U S / U S S 波特率P P I (9600,19200,187500 b /s ) 自由口(1200,115200 b /s )连接资源 每个通信口可连接 4 个 H M I 设备 C P U 插座(9针母头)引脚号信号P o r t 0(端口0)引脚定义 1屏蔽机壳接地 224V 返回逻辑地(24V 公共端)3R S -485信号 B R S -485信号 B 4发送请求R T S (T T L )55V 返回逻辑地(5V 公共端)6+5V +5V ,通过100 O h m 电阻7+24V +24V 8R S -485信号 A R S -485信号 A 9 不用 10位协议选择(输入)金属壳屏蔽 机壳接地 表 3.通信信号板(P o r t 1)引脚定义 通信信号板(S B C M 01) 引脚标记 R S 485 R S 232 机壳接地 机壳接地T X /B R S 485-B R S 232-T x R T S R T S (T T L )R T S (T T L )M 逻辑公共端逻辑公共端R X /A R S 485-A R S 232-R x

西门子自由口通讯

一、串口特性设置 SMB30: ppdb bbmm pp:奇偶校验选择,00=不校验,01=偶校验,10=不校验,11=奇校验; d:每个字符的数据位,0=8位/字符,1=7位/字符; bbb:自由口通讯波特率(bit/s) 000=38400,001=19200,010=9600,011=4800,100=2400,101=1200,110=115.2K,111=57.6K;mm:协议选择,00=PPI/从站模式,01=自由端口协议,10=PPI/主站模式,11=保留(默认设置为00=PPI/从站模式); 二、报文接收的状态字 SMB86:nre0 0tcp; n=1:通过用户禁止命令终止报文接收。 r=1:接收报文终止,输入参数错误或无起始或结束条件。 e=1:收到结束字符。 c=1:接收报文终止,超出最大字符数。 t=1:接收报文终止,超时。 p=1:接收报文终止,奇偶校验错误。 三、报文接收的控制字 SMB87:报文接收的控制字,en,sc,ec,il c/m,tmr,bk,0; en:0=禁止报文接收,1=允许报文接收,每次执行RCV指令时检查允许/禁止接收报文位。sc:0=忽略SMB188,1=使用SM1B188的值检查报文的开始。 ec:0=忽略SM189,1=使用SM189的值检查报文的结束。 il:0=忽略SMW190,1=使用SMW190的值检测空闲状态。 c/m:0=定时器是字符间超时定时器,1=定时器是报文定时器。 tmr:0=忽略SMW192,1=超过SMW192中设置的时间时终止接收。 bk:0=忽略break(间断)条件,1=用break条件来检测报文的开始。 报文接收控制字节位用来定义识别报文的标准,报文的起始和结束标准均需定义。 SMB88=报文的起始字符 SMB89=报文的结束字符 SMW90=以ms为单位的空闲线时间间隔。空闲线时间结束后接收到的第一个字符是最新报文的起始字符。 SMW92=字符间/报文间定时值(用ms表示),如果超时停止接收报文。 SMW94=接收最大字符数(1-255),即使不用字符数计算来终止报文,这个值也应按希望的最大缓冲区来设置 四、接收指令的参数设置 RCV指令允许选择报文开始和结束的条件,SMB86-SMB94用于端口0,SMB186-SMB194用于端口1。

西门子S7-200自由口通信心得

西门子S7-200 PLC自由口通信学习摘要 本文以s7-200 PLC与智能电表通信为范例(电表波特率为1200bps,偶校验,8位数据位) 一、PLC自由口协议初始化 1、根据智能设备通信时使用的波特率、校验方式、起始位等参数配置PLC自由口,即将上述参数用MOVB指令写入SMB30,SMB30格式如下图所示: 初始化子程序如下:

二、声明中断 发送数据和接收完数据都能链接到中断程序,发送完中断与接收完中断的中断号分别为9和23,中断可在初始化子程序中声明

三、编写自由口要发送的报文子程序 严格按智能设备报文格式,将相应命令,将指令长度(字节)MOV到任意的字节单元,例如vb10。再用MOV_B或MOV_W等指令传送到vb11开始后连续的字节中。 报文子程序

上图为读取电表标识编码为9010(即正向有功总电能)的指令 四、用XMT指令发送报文 XMT指令需指定两个参数,第一个为要发送的报文的起始地址(本例为VB10),第二个为使用的通信口(本例为0口)。可以用定时器控制某一CPU内部触点来控制报文发送的周期。要注意的是,XMT指令必须用上升沿“—|P|—”触发,否则CPU将会报错,CPU将认为有多个XMT/RCV指令同时执行,这是不允许的! 发送报文子程序 五、利用发送完中断启动接收数据指令 当报文用XMT发送完毕,会产生9号中断。我们可以利用中断子程序捕捉相应的中断,并在中断程序中编写相应事件!在步骤1中已经声明了9号中断连接到中断子程序“发送完中断”。因为此我们在“发送完中断”中断子程序中使用RCV指令即可接收到由通信口返回的数据。即将数据送到VB100. “发送完中断”中断子程序

西门子S7-200PLC自由口实例代码

1 引言 为了达到和通讯协议已知的控制设备进行数据交换,以提高自动化控制系统的灵活性,很多plc制造商都相继的开发出了方便、灵活的自由口通讯方式,例如三菱公司的fx2系列plc,omron公司的cjm1系列的plc,西门子公司的s7-200系列plc等都提供了自由口通讯模式。自由口通讯是指plc提供了串行的通讯硬件,和用于定制通讯协议的相关指令,在控制系统中,当要和plc连接的控制设备的通讯协议已知时,可以在plc中进行编程定制通讯协议,和控制设备进行数据通讯。本文主要介绍西门子s7-200的自由口和计算机的串口进行的通讯,计算机中采用visual basic进行编程,从而实现计算机与可编程控制器的直接控制。该通讯方式具有效率高、容易实现、通讯硬件简单、容易配置等特点在工业控制领域中被广泛应用。 2 s7-200通讯指令及特殊字节 采用自由口通讯方式时,s7-200上的rs485口完全由用户控制,可以与任何协议已知的设备进行通讯,在这种情况下通讯协议完全由用户制定,为此,s7-200提供了用于进行通讯协议定制的特殊标志位以及相关的通讯指令。 2.1 特殊标志字节 s7-200用于自由口通讯模式定义的特殊标志字节有smb30和smb130,smb30用于s7-200的端口0的通讯,smb130用于s7-200的端口1的通讯,两者的格式一样,下面我们以smb130为例,介绍其组成。smb130各位的含义如下: pp:两位用于选择通讯的校验方式当这两位的组合是: 00无校验01 偶校验10 无校验11 奇校验 d:这一位用于选择通讯的数据位数d=1时7个数据位,d=0时8个数据位 bbb:用于选择自由口通讯是的波特率,这三位的组合和通讯波特率的关系如下: 000 ——38400bps 001 ——19200bps 010 ——9600bps 011 ——4800bps 100 ——2400bps

s7-200自由口通信

S7-200 自由口通信 关键字 要点初始化RS485例程发送发送完成接收接收完成起始条件结束条件字符中断 S7-200自由口通信简介 S7-200 CPU的通信口可以设置为自由口模式。选择自由口模式后,用户程序 就可以完全控制通信端口的操作,通信协议也完全受用户程序控制。一般用于 和第三方串行通信设备进行通信。 自由口模式可以灵活应用。Micro/WIN的两个指令库(USS和Modbus RTU) 就是使用自由口模式编程实现的。 在进行自由口通信程序调试时,可以使用PC/PPI电缆(设置到自由口通信 模式)连接PC和CPU,在PC上运行串口调试软件(或者Windows的Hyper Terminal-超级终端)调试自由口程序。 USB/PPI电缆和CP卡不支持自由口调试。 目录 1.1 自由口通信概述 S7-200PLC的通讯口支持RS485接口标准。采用正负两根信号线作为传输线路。 工作模式采用串行半双工形式,在任意时刻只允许由一方发送数据,另一方接 收数据。 数据传输采用异步方式,传输的单位是字符,收发双方以预先约定的传输速率,在时钟的作用下,传送这个字符中的每一位。

传输速率可以设置为1200、2400、4800、9600、19200、38400、57600、115200。 字符帧格式为一个起始位、7或8个数据位、一个奇/偶校验位或者无校验位、一个停止位。 字符传输从最低位开始,空闲线高电平、起始位低电平、停止位高电平。字符传输时间取决于波特率。 数据发送可以是连续的也可以是断续的。所谓连续的数据发送,是指在一个字符格式的停止位之后,立即发送下一个字符的起始位,之间没有空闲线时间。而断续的数据发送,是指当一个字符帧发送后,总线维持空闲的状态,新字符起始位可以在任意时刻开始发送,即上一个字符的停止位和下一个字符的起始位之间有空闲线状态。 示例:用PLC连续的发送两个字符(16#55和16#EE)(程序如图3和图4),通过示波器测量CPU通讯端口管脚3/8之间的电压,波形如下图1.: 图1.两个字符(16#55和16#EE)的波形图 示例说明: 16进制的16#55换算成2进制等于2#01010101,16进制的16#EE换算成2进制等于2#11101110。如图所示,当数据线上没有字符发送时总线处于空闲状态(高电平),当PLC发送第一个字符16#55时,先发送该字符帧的起始位(低电平),再发送它的8个数据位,依次从数据位的最低位开始发送(分别为1、0、1、0、1、0、1、0),接着发送校验位(高电平或低电平或无)和停止位(高电平)。因为本例中PLC连续的发送两个字符,所以第一个字符帧的停止位结束后便立即发送下一个字符帧的起始位,之间数据线没有空闲状态。假如PLC断续的发送这两个字符,那么当PLC发送完第一个字符帧的停止位后,数据线将维持一段时间空闲状态,再发送下一个字符帧。 字符传输的时间取决于波特率,如果设置波特率为9.6k,那么传输一个字符帧中的一位用时等于1/9600*1000000=104us,如果这个字符帧有11位,那么这个字符帧的传输时间等于11/9600*1000=1.145ms. 自由口通信协议是什么? 顾名思义,没有什么标准的自由口协议。用户可以自己规定协议。 已知一个通信对象需要字符(字节)传送格式有两个停止位,S7-200是否支持?

自由口协议 例子

一.有关串行通信的物理标准: 1.信号电平标准:RS232—C采用负逻辑规定逻辑电平,RS232—C将(-5V到-15V)规定为“1”,(+5V到+15V)规定为“0”。 2.信号线的定义:在线仪表采用三线制DB9/M(针)RS232接口输出。 PIN2-RXD; PIN3-TXD; PIN5-GND 二、RS-232通讯配置: 通讯波特率为9600bps、8位数据位、1位停止位、无奇偶校验位. 三、主呼指令数据格式(数据采集仪主动发送请求命令): 3.2指令类型

四、从呼指令数据格式(在线监测设备响应): 4.1 通讯包结构组成 4.2 数据包长度 数据包长度=系统类型长度(1)+数据类型(1)+参数个数长度(1)+时间(6)+数据段长度(n)+CRC校验码长度(2)

4.5 数据段组成 包括污染物代码(见附录污染物代码表)、污染物的类型(见 4.5.1)、数据标记(见4.5.2)、污染物参数值(见4.5.3)。不同污染物之间用分号(‘;‘)隔开,同一污染物的不同类型数据也用分号(‘;‘)隔开,例如:二氧化硫实时数据、二氧化硫折算数据之间用分号(‘;‘)隔开。 4.5.1污染物的类型 分为实时数据与折算数据;”xxx-R”代表污染物实测数据,”xxx-Z”代表污染物折算数据,其中“xxx”为污染物代码。两位的污染物代码在后面填充一位16进制0x20,参考附录污染源代码表。 示例:B01-R,02 -Z 4.5.2数据标记 (1)对于污染源(P:电源故障、F:排放源停运、C:校验、M:维护、T:超测上限、D:故障、S:设定值、N:正常数据) (2)对于空气检测站(0:校准数据、1:气象参数、2:异常数据、3正常数据)4.5.3污染物参数值 污染物参数值为4字节IEEE754浮点数,高位在前,低位在后.

西门子PLC 自由口通讯

1.自由口通讯基本概念 1.1 自由口通信概述 1.2 自由口通信要点 1.3 发送和接收指令 2.自由口通信使用指南 2.1 通讯口初始化 2.2 发送数据: 2.3 接收数据 2.4 自由口通信例程 1.自由口通讯基本概念 1.1 自由口通信概述 S7-200PLC的通讯口支持RS485接口标准。采用正负两根信号线作为传输线路。 工作模式采用串行半双工形式,在任意时刻只允许由一方发送数据,另一方接收数据。 数据传输采用异步方式,传输的单位是字符,收发双方以预先约定的传输速率,在时钟的作用下,传送这个字符中的每一位。 传输速率可以设置为1200、2400、4800、9600、19200、38400、57600、115200。 字符帧格式为一个起始位、7或8个数据位、一个奇/偶校验位或者无校验位、一个停止位。 字符传输从最低位开始,空闲线高电平、起始位低电平、停止位高电平。字符传输时间取决于波特率。数据发送可以是连续的也可以是断续的。所谓连续的数据发送,是指在一个字符格式的停止位之后,立即发送下一个字符的起始位,之间没有空闲线时间。而断续的数据发送,是指当一个字符帧发送后,总线维持空闲的状态,新字符起始位可以在任意时刻开始发送,即上一个字符的停止位和下一个字符的起始位之间有空闲线状态。 示例:用PLC连续的发送两个字符(16#55和16#EE)(程序如图3和图4),通过示波器测量CPU通讯端

口管脚3/8之间的电压,波形如下图1.: 图1.两个字符(16#55和16#EE)的波形图 示例说明: 16进制的16#55换算成2进制等于2#01010101,16进制的16#EE换算成2进制等于2#11101110。如图所示,当数据线上没有字符发送时总线处于空闲状态(高电平),当PLC发送第一个字符16#55时, 先发送该字符帧的起始位(低电平),再发送它的8个数据位,依次从数据位的最低位开始发送(分别为1、0、1、0、1、0、1、0),接着发送校验位(高电平或低电平或无)和停止位(高电平)。因为本例 中PLC连续的发送两个字符,所以第一个字符帧的停止位结束后便立即发送下一个字符帧的起始位,之 间数据线没有空闲状态。假如PLC断续的发送这两个字符,那么当PLC发送完第一个字符帧的停止位后,数据线将维持一段时间空闲状态,再发送下一个字符帧。 字符传输的时间取决于波特率,如果设置波特率为9.6k,那么传输一个字符帧中的一位用时等于 1/9600*1000000=104us,如果这个字符帧有11位,那么这个字符帧的传输时间等于 11/9600*1000=1.145ms. 自由口通信协议是什么? 顾名思义,没有什么标准的自由口协议。用户可以自己规定协议。 已知一个通信对象需要字符(字节)传送格式有两个停止位,S7-200是否支持? 字符格式是由最基础的硬件(芯片)决定的;S7-200使用的芯片不支持上述格式。 S7-200是否支持《S7-200系统手册》上列明的通信波特率以外的其他特殊通信速率? 通信速率是由最基础的硬件(芯片)决定的;S7-200使用的芯片不支持没有列明在手册上的通信速率。1.2 自由口通信要点 应用自由口通信首先要把通信口定义为自由口模式,同时设置相应的通信波特率和上述通信格式。用户程 序通过特殊存储器SMB30(对端口0)、SMB130(对端口1)控制通信口的工作模式。 CPU通信口工作在自由口模式时,通信口就不支持其他通信协议(比如PPI),此通信口不能再与编程 软件Micro/WIN通信。CPU停止时,自由口不能工作,Micro/WIN就可以与CPU通信。

西门子S7-200 自由口通信实用文档

主题:应用探讨—S7-200 自由口通信—发帖整理 强大而灵活的自由口通信能力,是S7-200系统的一个重要特点。S7-200 CPU 的RS485通信口提供了建立在串行通信基础上的“自由”通信能力,数据传输协议完全由用户程序决定。通过自由口方式,S7-200可以与串行打印机、条码阅读器等通信。而S7-200的编程软件也提供了一些通信协议库,如USS协议库和MODBUS RTU从站协议库,它们实际上也使用了自由口通信功能。 开设本话题的目的,在于澄清自由口通信的基本概念,强调使用中的要点,讨论应用的常见问题。经过此次集中交流,解决了如下一些问题: 1. 自由口通信基本概念 2. 自由口通信编程指令的使用和技巧 3. 自由口通信常见问题 4. 产品功能建议 更多信息请参考下面文档。 “下载中心”参考文档: 文档编号“1109582”——S7-200《可编程控制器系统手册》 文档编号“A0136”——《西门子 S7-200?LOGO!?SITOP参考》 以下为本次探讨的发帖整理,查看原始交流内容请点击此处。 1.自由口通信基本概念(1楼——5楼) 2.自由口通信编程指令的使用和技巧(6楼——15楼) 3.自由口通信容易犯的错误(16楼——24楼) 4.产品功能建议(25楼——27楼)

quote: 以下是引用BABU在2011-01-20 15:17:08的发言: 我回来了,项目终于做完了,可以回家过年了,:)。 自由口通信真是折腾的我好惨啊,简单回顾一下,希望对像我这样的菜鸟有些借鉴作用。 先感谢一下西门子论坛和热线,没少骚扰他们。 在完全没有准备的情况下甲方又加进一个仪表,做什么自有口通信,晕阿!没办法,迎着上吧! 网上搜资料,看手册,越看越糊涂!时间紧迫,还是直接上手做吧。 首先是把PLC和仪表连接起来,可仪表的口是rs232的,热线工程师告诉我得做rs232/485的转换,打车到市场上买个转换器(打车钱比设备钱还多,可见现场多么偏僻阿),听卖转换器的老板给我分析了一下每种的区别——不光是价格的区别,说实在的,当时非常惭愧,老板懂的比我多多了。 买回来后自己动手焊线,一个人费了九牛二虎之力,焊的那个惨样就不用说了,还好有壳可以包装一下。 焊好了,实验一下效果吧,不知到怎么做了,打电话。 热线工程师告诉我找个串口调试工具,连接到pc机上测试。 在串口调试工具上发一串数,在200上收,ok!高兴坏了,没白忙活。 硬件上应该没问题了,接下来开始做程序了。 先得理解仪表的协议,弄清了仪表先要收到请求数据的命令,然后根据命令做出响应。 同样,先用串口调试工具和仪表连接进行通信测试,还算聪明吧,:)! 然后开始在200里编写收发程序,开始时整个思路都是乱的,无从下手。就把200手册上的例子程序整个抄上,在cpu224的两个接口间进行通信实验。 经过不停的实验,终于一点一点地理解了控制字节、控制参数的含义,怎么设置接收结束条件,怎么使用中断、怎么控制接收和发送等等。

西门子S7200PLC自由口实例代码

1 引言 plc,omron公司的cjm1系列的plc,西门子公司的s7-200系列plc等都提供了自由口通讯模式。自由口通讯是指plc提供了串行的通讯硬件,和用于定制通讯协议的相关指令,在控制系统中,当要和plc连接的控制设备的通讯协议已知时,可以在plc中进行编程定制通讯协议,和控制设备进行数据通讯。本文主要介绍西门子s7-200的自由口和计算机的串口进行的通讯,计算机中采用visual basic进行编程,从而实现计算机与可编程控制器的直接控制。该通讯方式具有效率高、容易实现、通讯硬件简单、容易配置等特点在工业控制领域中被广泛应用。 2 s7-200通讯指令及特殊字节 采用自由口通讯方式时,s7-200上的rs485口完全由用户控制,可以与任何协议已知的设备进行通讯,在这种情况下通讯协议完全由用户制定,为此,s7-200提供了用于进行通讯协议定制的特殊标志位以及相关的通讯指令。 2.1 特殊标志字节 s7-200用于自由口通讯模式定义的特殊标志字节有smb30和smb130,smb30用于s7-200的端口0的通讯,smb130用于s7-200的端口1的通讯,两者的格式一样,下面我们以smb130为例,介绍其组成。smb130各位的含义如下: pp:两位用于选择通讯的校验方式当这两位的组合是: 00无校验01 偶校验10 无校验11 奇校验 d:这一位用于选择通讯的数据位数d=1时7个数据位,d=0时8个数据位 bbb:用于选择自由口通讯是的波特率,这三位的组合和通讯波特率的关系如下: 000 ——38400bps 001 ——19200bps 010 ——9600bps 011 ——4800bps 100 ——2400bps 101 ——1200bps 110 —— 600 bps 111 —— 300 bps mm: 用于通讯协议的选择,当这两位的组合是: 00 ppi从站模式01 自由口通讯模式10 ppi主站模式

自由口通信整理

自由口通信资料总结自由口通信 S7-200 CPU的串行通信口可由用户程序控制,这种操作模式称作自由口通信。自由口通信时基于RS-485的硬件基础,允许应用程序控制s7-200 CPU的通信端口,以实现一些自定义通信协议的通信方式。波特率为1200~115200 bit/s。 当选择了自由口通信模式,程序可以使用接收中断、发送中断、发送指令和接收指令来控制通信操作。在自由口模式下,通信协议完全由程序控制。SM30(用于端口0)和SM31(如果有两个端口,则用于端口1)用于选择波特率和奇偶校验。 S7-200处于自由口通信模式时,所有的通信任务和信息定义均需要由用户编程实现。简单情况下,可以只用(XMT)指令向打印机或者显示器发送信息,或者同条码阅读器、重量计和焊机等进行通信连接。每种情况下,都必须编写程序,以支持自由端口模式下设备同CPU通信的协议。 只有CPU处于RUN模式时,才能进行自由端口通信。通过向SM30或SM31的协议选择区置1,可以选择自由端口模式。处于自由端口模式时,不能与编程设备通信。 注意: 1)s7-200 CPU通信端口是半双工通信口,所以发送和接收不能同时进行。 2)S7-200 CPU通信口处于自由口模式下时,该通信口不能同时工作在其他通信模式下。例如:不能再端口1进行自由口通信时,又使用该通信口进行PPI编程。 3)S7-200 CPU通信端口是RS-485标准,如果通信对象是RS-232设备,则需要使用Rs-232/PPI 电缆。 4)自由口通信只有在s7-200 CPU 处于RUN模式下才能被激活,如果将s7-200 CPU 设置为STOP模式,则通信端口将根据s7-200 CPU系统块中的配置转换到PPI协议。 5)SM0.7反映CPU的模式,通过修改SM0.7的状态可以控制自由端口模式的进入。 应用自由口通信首先要把通信口定义为自由口模式,同时设置相应的通信波特率和上述通信格式。用户程序通过特殊存储器SMB30(对端口0)、SMB130(对端口1)控制通信口的工作模式。

自由口通讯

包头就是起始符,包尾就是结束符校验用的是CRC,校验码有很多种。包头就是两个字节,两个##,换算成16进制就是23 23包尾是两个&&。从站收到这样的请求,他先校验包头和包尾然后再接受CRC校验码再分析指令类型和数据段。把指令类型和数据段叫做有效数据区。数据段就是FF在这里就是这样定义的。 例:##(包尾0) 01(指令类型)FF(数据段)校验码(根据指令类型和数据段算出来)&&(包尾)把这串数据发出去,但这里没有地址信息,因为是两个设备在通讯,而不是一个主站和多个从站。对方收到这串指令会判断指令类型,如果是01.就会立即回传实时数据 从站格式:

从站格式: 不能同时发送和接收,因为半双工,也不能同时接收或发送两条。

编程要求:要自由口模式,所以要设成mm=01,要用端口0那就是SMB30,自由口波特率如果是9600波特,那bbb就是010,pp00不校验,一般每个字符都是8位,所以d是0. 所以ppdbbbmm=00001001,8421码就是16进制的9,把16#09赋予SMB30.这里没有设的就是起始位跟停止位,在默认条件下,它只支持1个停止位跟1个起始位,如果有的协议要1.5或者2个起始位跟停止位就不行了 缓冲区:缓冲区第一个字节是计数,后面就是信息的内容。下图:TBL是vb500,那就是vb500里面放的我要发送的这串数据有多少个字符或者是字节如果有10个字节,就把10填到vb500,起始符如果有的话,就应该在vb501,往下总共就是10个字节。接受RCV也一样,有多少字节,图里可以看出可以从vb500里读取,因为是半双工的,发送和接受不能同时进行,所以发送缓冲区和接收缓冲区可以是同一个,如图都是vb500,为了节省内存,

S7-1500串口模板自由口通讯编程注意事项

S7-1500串口模板自由口通讯编程注意事项 S7-1500串口通讯模板,自由口通讯 目录 1功能块调用注意事项 (3) 1.1程序块的触发(EN和REQ) (3) 1.2端口地址管脚参数设置(PORT) (3) 1.3发送缓冲区参数设置(BUFFER和LENGTH) (4) 1.4发送不同区域或不连续区域的数据 (5) 1.5发送不同区域或不连续区域的数据 (5)

1功能块调用注意事项 S7-1500通过串口通讯模板CM_P2P可以实现自由口通讯。除了在硬件上会由于不同的硬件接口类型(232和422/485等接口)而导致接线上有区别外,用户都需要 调用相应的功能块来实现数据的发送和接收,这里介绍的是编程时需要注意的事项,否则可能会导致无法正常通讯。 1.1程序块的触发(EN和REQ) S7-1500实现自由口通讯时,需要用户在程序中调用发送和接收功能块才能实现数据 的收发,这两个功能块分别是“Send_P2P”和“Receive_P2P”。 在调用这两个功能块时,需要注意,其使能端EN为“1”时,发送、接收块才可以 被执行。而发送功能块还有一个REQ端,必须为上升沿触发,每次触发将发送一次,因此可以考虑在编程时将REQ的触发位设置为“系统时钟存贮位(例 如:M0.0~M0.7)”(图1-1),这样,将实现自动定时触发发送功能(图1-2)。 图1-1设置CPU的系统时钟存贮位 1.2端口地址管脚参数设置(PORT) 发送、接收功能块需定义相应的串口地址,该地址是模板在组态时分配的物理地址 (例如地址为:258,可在硬件组态中找到),另外在编程过程中,也可以通过PLC Tag表中的“系统Tag”查找,然后直接用鼠标选中,拖拽到相应的管脚(图1-2)。 注意,这里的Tag是不能拷贝的,只能拖拽。

S7-200自由口通讯程序说明

S7-200自由口通讯程序说明1 主程序: LD SM0.1 // PLC上电第一个扫描周期 MOVB 16#05, SMB30 2 //1. 初始化自由口为波特率 19200bps,8数据位,无校验 MOVB 16#F0, SMB873 //2. 初始化RCV信息控制字节, RCV使能 // 检测信息开始字符和结束字符,检测空闲线信息条件 MOVB 16#7E, SMB884 // 设定信息开始字符为 16#7E ('~'字符) MOVB 16#0A, SMB895 //3. 设定信息结束字符为 16#0A (换行字符) MOVW +5, SMW906 //4. 设置空闲线超时为5ms MOVB 255, SMB947 //5. 设置最大字符数为255 ATCH INT_0:INT0, 238 //6. 连接中断0到接收结束事件 ATCH INT_2:INT2, 99 //7. 连接中断2到发送结束事件 ENI //8. 允许用户中断 RCV VB100, 0 //9. 执行接收指令,接收缓冲区指向VB100 1 当S7‐200处于STOP模式时,自由口通讯模式被禁止,重新建立正常的通讯(例如:编程设备的访问)。在最简单的情况下,可以只用发送指令(XMT)向打印机或者显示器发送信息。其它例子包括与条码阅读器、称重计和焊机的连接。在每种情况下,您都必须编写程序,来支持在自由口模式下与S7‐200通讯的设备所使用的协议。 只有当S7‐200处于RUN模式时,才能进行自由口通讯。要使能自由口模式,应该在SMB30(端口0)或者SMB130(端口1)的协议选择区中设置01。处于自由口通讯模式时,不能与编程设备通讯。 2 将PPI通讯转变为自由口模式,SMB30和SMB130分别配置通讯口0和通讯口1,并且为自由口通讯提供波特率、校验和数据位数的选择,8bit的配置字的构成如下: Bit 7 6 5 4 3 2 1 0 □p□p□d□b□b□b□m□m pp: 校验选择 00= 不校验 01= 偶校验 10= 不校验 11= 奇校验 d: 每个字符的数据位 0= 每个字符8位 1= 每个字符7位 bbb: 自由口波特率(bps) 000=38,400 001=19,200 010=9,600 011=4,800 100=2,400 101=1,200 110=115.2K 111=57.6K 需要S7‐200 CPU版本1.2或更高 mm: 协议选择 00=PPI/从站模式 01=自由口模式 10=PPI/主站模式 11=保留(缺省设置为PPI/从站模式) 3 SMB87: 端口0的接收信息控制字节(SMB187: 端口1接收信息控制字节): Bit 7 6 5 4 3 2 1 0 □B7□B6□B5□B4□B3□B2□B1□B0 B7: 0=禁止接收信息功能 1 =允许接收信息功能 每次执行RCV指令时检查允许/禁止接收信息 B6: 0=忽略SMB88或SMB188 1=使用SMB88或SMB188的值检测起始信息 B5: 0=忽略SMB89或SMB189 1=使用SMB89或SMB189 的值检测结束信息 B4: 0=忽略SMW90或SMW190 1=使用SMW90或SMW190 的值检测空闲状 B3: 0= 定时器是内部字符定时器 1=定时器是信息定时器 B2: 0=忽略SMW92或SMW192 1=当SMW92或SMW192 中的定时时间超出时终止接收 B1: 0=忽略中断条件 1=用中断条件作为信 息检测的开始 B0: 始终为零 4 SMB88: 端口0的开始字符(SMB188: 端口1的开始字符) 5 SMB89: 端口0的结束字符(SMB189: 端口1的结束字符) 6 空闲线时间段(按毫秒设定)。空闲线时间溢出后接收的第一个字符是新的信息的开始字符。SMW90对应端口0;SMW190 对应端口1;SMB90/SMB190是最高有效字节,SMB91/SMB191是最低有效字节 7 SMB94 (端口0),SMB194(端口1): 要接收的最大字符数(1到255字节)。注:这个范围必须设置到所希望的最大缓冲区大小,即使信息的字符数始终达不到 8 如果有一个中断服务程序连接到接收信息完成事件上,在接收完缓冲区中的最后一个字符时,S7‐200会产生一个中断(对端口0为中断事件23,对端口1为中断事件24) 9 如果有一个中断服务程序连接到发送结束事件上,在发送完缓冲区中的最后一个字符时,则会产生一个中断(对端口0为中断事件9,对端口1为中断事件26)

相关主题