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

合集下载

s7-200自由口通信

s7-200自由口通信

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。

S7-200自由口模式通信1

S7-200自由口模式通信1

S7-200自由口模式通信1本例说明如何以自由协议实现计算机与S7-200的通信,计算机作为主站,可以实现对PLC 从站各寄存器的读/写操作。

---- 计算机通过COM口发送指令到PLC的PORT0(或PORT1)口,PLC通过RCV接收指令,然后对指令进行译码,译码后调用相应的读/写子程序实现指令本例说明如何以自由协议实现计算机与S7-200的通信,计算机作为主站,可以实现对PLC 从站各寄存器的读/写操作。

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

通信协议----在自由口模式下,通信协议是由用户定义的。

用户可以用梯形图程序调用接收中断、发送中断、发送指令(XMT)、接受指令(RCV)来控制通信操作。

在自由口模式下,通信协议完全由梯形图程序控制。

指令格式定义计算机每次发送一个33字节长的指令来实现一次读/写操作,指令格式见表1 说明:1.起始字符----起始字符标志着指令的开始,在本例中被定义为ASCII码的"g",不同的PLC从站可以定义不同的起始字符以接收真对该PLC的指令。

2.指令类型----该字节用来标志指令的类型,在本例中05H代表读操作,06H代表写操作。

3.目标PLC站地址----目标PLC站地址占用指令的B2、B3两个字节,以十六进制ASCII码的格式表示目标PLC 的站地址。

4.目标寄存器地址----在PLC内部可以用4个字节来表示一个寄存器的地址(但不能表示一个位地址)。

前两个字节表示寄存器类型,后两个字节表示寄存器号。

00 00(H): I寄存器区01 00(H): Q寄存器区02 00(H): M寄存器区08 00(H): V寄存器区例如:IB000的地址可表示为 00 00 00 00(H)VB100的地址可表示为 08 00 00 64(H)5.读/写字节数M----当读命令时,始终读回从目标寄存器开始的连续8个字节的数据(转换为十六进制ASCII 码后占用16个字节),可以根据自己的需要取用,M可以任意写入。

S7-200PLC的自由口通信工程应用

S7-200PLC的自由口通信工程应用

S7-200PLC的自由口通信工程应用笫1章S7-200 PLC的自由口通信工程应用本章由浅到深循序渐进地例举了S7-200 PLC自由口通信的三个工程应用实例。

分别从任务描述、任务剖析、解决方案、实施步骤和常见故障及排故方法这五个方面进行了描述。

第一个实例“智能立体车库系统中IC卡的应用”讲述了S7-200 PLC的自由口通信的只读功能实现方法,第二个实例“RFID在AGV(Automated Guided Vehicle)中的应用”讲述了S7-200 PLC的自由口通信的读写功能实现方法,第三个实例“S7-200 PLC在无线通信上的应用”讲述了S7-200 PLC 的自由口通过自定义通信协议实现一对多的无线通信功能。

1.1智能立体车库系统中IC卡的应用1.1.1 任务描述智能立体车库系统要求采用刷卡方式完成车辆自动出入立体车库。

当司机刷卡并设定密码后,卡信息与车辆进行绑定,车辆将自动进入车库相应的车位,当司机想取出车辆时,司机只需刷卡并通过密码验证,系统将自动从车库中寻找该卡对应的车辆并将车取出到车库。

其中控制车辆进出的控制器采用西门子S7 - 200 系列CPU226 型可编程控制器来实现。

1.1.2 任务剖析智能立体车库要求采用刷卡方式作为车辆出入立体车库的凭证,这就要求控制系统能读出卡上的信息,利用卡的信息作为身份识别把卡和车辆绑定起来。

选用在弱电系统中作为门禁或停车场系统使用者身份识别的ID卡就能满足要求。

ID卡全称为身份识别卡(Identification Card),是一种只读的感应卡,每张ID卡有一个全球唯一的芯片编码。

它靠读卡器设备感应供电并读出存储在芯片EEPROM中的唯一卡号,该卡号在封卡前一次写入,封卡后不能更改,该ID卡完全能满足车辆身份识别的要求。

同时S7-200 PLC的自由口通信能实现通过读卡器设备读出卡上信息从而完成车辆身份识别的功能。

1.1.3 解决方案该任务实现的关键是要求S7-200 PLC能读出ID卡的信息,考虑到大多数的ID读卡器设备提供了与电脑直接通信的RS232通信方式,而S7-200 CPU的通信口电气上是标准的RS-485半双工串行通信口,因此硬件上需要通过RS-232到RS485转换器把ID读卡器设备连接到S7-200 CPU的通信口上,由于PC/PPI电缆本质上就是RS-232到RS485的转换,所以也可以通过PC/PPI电缆把ID读卡器设备连接到S7-200 CPU的通信口上。

S7-200CPU通信口的自由口模式实现Modbus通信协议

S7-200CPU通信口的自由口模式实现Modbus通信协议

在组态王里点击“com1”(根据你在前面已经定的com口而定),然后在右边的界面上显示你所建立的文件,然后对你编译的主画面点反键,然后在下拉菜单中点击“测试---”(你的文件名),再随便在选项里输入一个你编写的程序里的标志位,看能不能显示你的PLC内的当前值,如果可以显示,就应该是通信上了。

通过 S7-200 CPU 通信口的自由口模式实现 Modbus 通信协议,可以通过无线数据电台等慢速通信设备传输。

这为组成 S7-200 之间的简单无线通信网络提供了便利。

详细情况请参考《S7-200系统手册》(2002 年 10 月或以后版本)的相应章节。

Modbus 是公开通信协议,其最简单的串行通信部分仅规定了在串行线路的基本数据传输格式,在 OSI 七层协议模型中只到 1,2 层。

Modbus 具有两种串行传输模式,ASCII 和 RTU。

它们定义了数据如何打包、解码的不同方式。

支持 Modbus 协议的设备一般都支持 RTU 格式。

通信双方必须同时支持上述模式中的一种。

Modbus 是一种单主站的主/从通信模式。

Modbus 网络上只能有一个主站存在,主站在 Modbus 网络上没有位置,从站的位置范围为 0 - 247,其中 0 为广播位置,从站的实际位置范围为 1 - 247。

Modbus 通信标准协议可以通过各种传输方式传播,如 RS232C、RS485、光纤、无线电等。

在 S7-200 CPU 通信口上实现的是 RS485 半双工通信,使用的是 S7-200 的自由口功能。

Modbus RTU 主站指令库(测试版)西门子针对 S7-200 最新推出支持 Modbus RTU 主站的协议库(测试版),用户可以将这个库添加到 Micro/WIN 软件中,并通过调用库指令,方便地实现 Modbus RTU 主站的功能。

注意:1. Modbus RTU 主站指令库的功能是通过在用户程序中调用预先编好的程序功能块实现的,该库只对 Port 0 口有效。

s7-200自由口通信

s7-200自由口通信

S7-200自由口通讯一、基础知识介绍(名词理解,原理,工作机制)1、S7-200CPU的通讯口可以设置为自由口模式(如何设置成自由口模式?)。

选择自由口模式后,用户程序可以完全控制通讯端口的操作(如何控制通讯端口的操作),通讯协议也完全受用户程序控制(如何控制通讯协议)。

S7-200 CPU处于自由口通信模式时,通信功能完全由用户程序控制,所有的通信任务和信息定义均需由用户编程实现。

2、S7-200CPU上的通讯口在电气上是标准的RS-485半双工串行通讯口。

此串行字符通信的格式可以包含:○一个起始位。

○7或8位字符(数据字节)。

○一个奇偶校验位,或没有校验位。

○一个停止位。

○通信波特率可以设置为1200,2400,4800,9600,19200,38400,57600,115200 bit/s。

凡是符合这些格式的串行通信设备,都可以和S7-200 CPU通信。

借助自由口通信模式,S7-200 CPU 可与许多通信协议公开的其他设备、控制器进行通信,其波特率为1200~115200bit/s。

自由口通信是一种基于RS485 硬件基础上,允许应用程序控制S7-200 CPU 的通信端口、以实现一些自定义通信协议的通信方式。

3、自由口通讯(顾名思义很自由)可以通过用户程序灵活控制,没有固定模式。

S7-200 可通过自由口通讯协议访问下列设备:– 带用户端软件的PC机,– 条形码阅读器,– 串口打印机,– 并口打印机,– S7-200,– S7-300 with CP 340– 非Siemens PLC,– 调制解调器。

S7-200 CPU 通信端口是RS485 标准,因此如果通信对象是RS232 设备,则需要使用RS232/PPI 电缆。

4、“请求-响应”工作机制:S7-200 CPU可以作为主站先向从站发送数据请求,然后等待从站的数据响应,也可以作为从站,首先等待主站发送过来的数据请求,然后根据请求的内容,按规则把相关数据返回给主站。

经典西门子200自由口通讯简介_Chain

经典西门子200自由口通讯简介_Chain

CPU通信口工作在自由口模式时,通信口就不支持其他通信协议(比如PPI),此通信口不能再与编程软件Micro/WIN通信。CPU停止时,自由口不能工作,Micro/WIN就可以与CPU通信。
通信口的工作模式,是可以在运行过程中由用户程序重复定义的。
如果调试时需要在自由口模式与PPI模式之间切换,可以使用SM0.7的状态决定通信口的模式;而SM0.7的状态反映的是CPU运行状态开关的位置(在RUN时SM0.7="1",在STOP时SM0.7="0")
状态位SM4. 5的变化,接收指令RCV可以初始化接收信息服务,通过指定的端口接受信息并存储在数据缓
冲区内,在接收完成最后一个字符时,端口0产生中断23。
S7 - 200 CPU上的通信口是符合欧洲标准EN50170中的PROF IBUS标准的RS - 485兼容9针D型连
接器。利用RS - 485总线连接这个端口可以方便地实现S7 - 200系列PLC与单片机之间的硬件连接。
ห้องสมุดไป่ตู้
自由口通信的核心指令是发送(XMT)和接收(RCV)指令。在自由口通信常用的中断有“接收指令结束中断”、“发送指令结束中断”,以及通信端口缓冲区接收中断。
与网络读写指令(NetR/NetW)类似,用户程序不能直接控制通信芯片而必须通过操作系统。用户程序使用通信数据缓冲区和特殊存储器与操作系统交换相关的信息。
在《S7-200系统手册》和Micro/WIN 在线帮助中关于XMT和RCV指令的使用有一个例子。这个例子非常经典,强烈建议学习自由口通信时先做通这个例子。
字符接收中断
S7-200 CPU提供了通信口字符接收中断功能,通信口接收到字符时会产生一个中断,接收到的字符暂存在特殊存储器SMB2中。通信口Port0和Port1共用SMB2,但两个口的字符接收中断号不同。

s7-200自由口通信

s7-200自由口通信

通信要求:1起始位,1停止位,无检验,9600函数要求:1、起始符02,结束符03,16进制数据通讯;通讯地址范围A-Z(41-5A)2、校验算法,异或校验,校验位两个字节,高在前,低在后,分别用XH XL表示校验的高低字节;校验从开始字符后的第二个字符开始计算,运算到结束符前的校验的高校验位前字符;进行字节异或运算,最后异或的字节再拆开两位发送,如果最后的校验和为32;那么需要拆分成33,32进行发送。

发送函数要求:格式:02 ADD 43 XH XL 03;传入参数地址A-Z接受函数要求:格式:02 ADD 63 ** ** ** ** ** ** ** ** XH XL 03;返回参数:整数字符其中返回数据也属于ASCII码数据,需要转换成整形数据,并且小数点位置会动态变化,根据小数点的位置不同,动态计算数据。

发送数据:02 41 43 30 32 03接受数据:02 41 63 2B 30 30 30 2E 30 30 30 32 37 03 (0.0)需要返回0绿色表示起始位和停止位紫色表示传输数据的地址位(41是16#41,也就是地址A的ASCII的16#值)黄色表示传输的有效数据(2B是“+”的16#值,30是“0”的16#值,2E是“.”的16#“2B 30 30 30 2E 30 30 30”在PLC中相当于一个字符串“+0 0 0 . 0 0 0”,进制,<用于数据的解析>)红色表示校验数据的高低位,异或校验拆分后的值(如结果为16#27,则分成32<2的ASCII 码的16#值>,37<7的ASCII码的16#值>)程序思路:通信过程为一发一收通信首先发送规定指令,发送完成,PLC产生中断,中断号9(s7-200的PORT0口),中断程序则准备数据的接受当接受数据完成时,要判断数据是否为有效的数据,我们需要将数据包一步一步剥开,接受的数据是放在了一个连续的位置上(《RCV,VB100,0》数据在从VB101开始的位置存储),然后将数据包中的数据从地址位41(以此为例子)开始到黄色区域接受进行异或校验,得到16#27,将16#27进行高低位分离,同时转换成相应的ASCII的16#值(分离方法很多,s7-200中用HTA指令,一步到位,高低分离同时也转成相应的ASCII的16#值,小技巧)现在就要验证数据的有效性了,校验位数据和地址位(发送和接收一致)是否有效。

西门子PLC 自由口通讯

西门子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),接着发送校验位(高电平或低电平或无)和停止位(高电平)。

S7200自由通信口

S7200自由通信口

1.自由端口通信模式S7-200系列PLC的串行通信口可以由用户程序来控制,这种由用户程序控制的通信方式称为自由端口通信模式。

利用自由口模式,可以实现用户定义的通信协议,可以同多种智能设备进行通信。

当选择自由端口通信模式时,用户程序可通过发送/接收中断、发送/接收指令来控制串行通信口的操作。

通讯所使用的波特率、奇偶校验以及数据位数等由特殊存储器位SMB30(对应端口0)和SMBl30(对应端口1)来设定。

特殊存储器位SMB30和SMB130的具体内容如表8-1所示。

1.自由端口通信模式在对SMB30赋值之后,通信模式就被确定。

要发送数据则使用XMT指令;要接收数据则可在相应的中断程序中直接从特殊存储区中的SMB2(自由口通信模式的接收寄存)读取。

若是采用有奇偶校验的自由口通信模式,还需在接收数据之前检查特殊存储区中的SMB3.0(自由口通信模式奇偶校验错误标志位,置位时表示出错)。

注意:只有PLC处于RUN模式时,才能进行自由端口通讯。

处于自由端口通讯模式时,不能与可编程设备通讯,比如编程器、计算机等。

若要修改PLC程序,则需将PLC处于STOP方式。

此时,所有的自由口通信被禁止,通信协议自动切换到PPI通信模式。

2. 自由口通信发送/接收指令(1)数据的发送XMT为发送指令操作码;他TABLE和PORT为上述指令的操作数。

TABLE指定数据缓冲区中第一个字节(设定应发送的字节数),;PORT指定通讯端口,可取0或1。

发送指令XMT把TABLE指定的数据缓冲区的内容通过PORT指定的串行口发送出去。

数据缓冲区内最多可容纳255个字符,其中缓冲区中第一个字节用于设定发送的字节数。

如果指定发送结束事件与某个中断服务程序相关联,则在缓冲区内最后一个字符发送后会产生中断。

通过监控发送结束标志SM4.5可以不用中断方式而将信息发送出去。

2. 自由口通信发送/接收指令RCV为接收指令操作码;TABLE和PORT为上述指令的操作数。

有关S7-200SMART PLC 自由口通讯的问题

有关S7-200SMART PLC 自由口通讯的问题

为了能搞明白自由口通讯的原理,我把帮助里面的自由口通讯的示例程序抄写了下来,并且将所有有关P0口的设置更改为P1口的设置程序内容如下:
MAIN
LD First_Scan_On
MOVB 2#1001, P1_Config
MOVB 2#10110000, P1_Ctrl_Rcv
MOVB 2#1010, P1_End_Char
MOVW +5, P1_Idle_Time
MOVB 100, P1_Max_Char
ATCH INT_0, 23
ATCH INT_2, 9
ENI
RCV VB100, 1
INT_0
LDB= P1_Stat_Rcv, 2#100000
MOVB 10, Time_1_Intrvl
ATCH INT_1, 10
CRETI
NOT
RCV VB100, 1
INT_1
LD Always_On
DTCH 10
XMT VB100, 1
INT_2
LD Always_On
RCV VB100, 1
有关PLC的组态和实际情况是一致的。

在测试过程中,我发现,这个程序并不能像帮助里面所说的那样接收到换行符号以后就把内容转发回来,而且这个程序还存在只能在刚下载完程序之后可以接收PC机发给他的数据。

请各位前辈指点!~~
主程序中断绑定不对,端口1 的中断分别是 24 和26;INT0 中,定时中断1 的事件号也不对,应该为11;INT1 中事件端口号也得改为11。

整个流程如下:PLC 启动时开始接收,如果接收成功,等待10ms ,然后发送接收到的报文,发送成功后再使能接收,,。

轮询下去。

S7-200自由口通讯程序

S7-200自由口通讯程序

S7-200自由口通讯程序MAIN:S7200自由口通讯程序LD SM0.1CALL SBR_0:SBR0 //初始化子程序LD SM0.7= SM30.0SBR_0:初始化子程序LD SM0.0MOVW +2, VW8 //PLC自由口地址,此处每台机器需设不同的地址LD SM0.0MOVB 9, SMB30 //通讯参数,波特率9600,自由口通讯MOVD &VB100, VD40MOVW +10, VW54MOVB 12, VB150MOVB VB9, VB151MOVD &VB151, VD60MOVB 6, SMB34 中断间隔6毫秒ATCH INT_0:INT0, 10 连接定时中断ATCH INT_1:INT1, 8 连接字符接收中断ENIINT_0:中断程序入口定时中断LD SM0.0DTCH 10 解除定时中断MOVD VD40, VD46 VB100的地址送VD46MOVW +10, VW44MOVW +10, VW54ATCH INT_2:INT2, 8 //接收中断起用服务程序INT2INT_1: 延时转向INT0LD SM0.0MOVB 5, SMB34ATCH INT_0:INT0, 10INT_2: 接受地址,并判断LDB= SMB2, VB9 //地址和本机相符MOVW VW8, AC0 累加器MOVB 255, SMB34ATCH INT_3:INT3, 8 //起用中断服务INT3,接受包ATCH INT_5:INT5, 10 //起用延时监控服务INT5CRETILDB= SMB2, VB9 //地址和本机不符NOTATCH INT_0:INT0, 10 //返回中断入口ATCH INT_1:INT1, 8INT_3: 主接受服务程序,同时做异或校验LD SM0.0XORW SMW1, AC0MOVB SMB2, *VD46INCD VD46DECW VW44LD SM1.0 //完成预定的接受字节数ATCH INT_4:INT4, 8 //起用通讯数据处理主程序INT_4: 通讯数据处理主服务程序LD SM0.0BMB VB100, VB152, 6 //接受报头拷贝到发送报头LD SM0.0DTCH 8 //暂停响应接受中断INCD VD46MOVB SMB2, *VD46XORW SMW1, AC0ANDW 16#FF, AC0 //检查异或校验LDN SM1.0 //异或校验错误MOVB VB100, AC0MOVB 16#80, AC1ORW AC0, AC1MOVB AC1, VB152MOVB 16#1, VB158MOVW +10, VW54JMP 3 //校验错误,向PC返回错误码LD SM1.0 //异或正确MOVW +4, VW34ATCH INT_8:INT8, 8 //起用服务程序INT8响应接受中断,接受包尾LD SM0.0 //数据处理LPSAB= VB101, 0 //V寄存器MOVD &VB0, VD50LRDAB= VB101, 1 //Q寄存器MOVD &QB0, VD50LRDAB= VB101, 2 //I寄存器MOVD &IB0, VD50LRDMOVW +0, VW56LRDMOVW VW102, VW58LPP+D VD56, VD50LDB= VB100, 0 //PLC向PC发送数据MOVB VB104, AC0MOVB VB105, AC1MUL AC1, AC0BMB *VD50, VB158, AC0+I +8, AC0MOVW AC0, VW54-I +2, VW54MOVB AC0, VB150LDB= VB100, 1 //PLC从PC接受数据BMB VB106, *VD50, VB105MOVW +10, VW54MOVB 12, VB150LBL 3LD SM0.0MOVB 50, SMB34ATCH INT_6:INT6, 10 //延时起用INT6,置位发送电平MOVD VD60, VD66MOVB *VD66, AC0MOVB 0, VB250 //发送数据异或校验次数监视LBL 0 //发送数据异或校验LD SM0.0INCD VD66MOVB *VD66, AC1XORW AC1, AC0INCB VB250LDB= VB250, 150 //若校验次数超过150次,退出MOVB 6, SMB34ATCH INT_7:INT7, 10CRETILD SM0.0DECW VW54LDN SM1.0 //若发送校验未完成预定的次数,跳转到循环0JMP 0LD SM0.0INCD VD66MOVB AC0, *VD66LD SM0.0MOVB VB150, AC0+I +4, AC0MOVB AC0, VB150INT_5: 接受时间监控服务程序LD SM0.0MOVD VD40, VD46MOVW +10, VW44MOVB 5, SMB34ATCH INT_1:INT1, 8ATCH INT_0:INT0, 10INT_6:发送数据LD SM0.0MOVB 250, SMB34ATCH INT_7:INT7, 10 //起用发送时间监控ATCH INT_7:INT7, 9 //发送中断(发送完成时触发)起用服务程序INT7A SM4.5XMT VB150, 0INT_7: 结束中断服务程序LD SM0.0DTCH 9 //关闭发送中断MOVB 6, SMB34ATCH INT_0:INT0, 10 //返回中断入口ATCH INT_1:INT1, 8INT_8: 接受包尾,正常情况下本中断服务程序连续调用四次,接受四个0XFF,程序本身不做任何处理CRETI。

详细介绍S7-200SMART的自由口通信

详细介绍S7-200SMART的自由口通信

详细介绍S7-200SMART的自由口通信
学习S7-200 SMART时了解到,基于RS485接口可实现一下几种通信:
1)modbus RTU通信
2)PPI协议通信
3)USS协议通信
4)自由口通信
何为自由口通信呢?
前三种通信必须要PLC和与其通信的设备支持相同的通信协议,如果两者之间没有共同的通信协议则需要用到自由口通信。

自由口通信也称无协议通信,需要根据对方设备的通信数据格式编写一个临时协议,不仅需要编程人员学会如何编写程序,还需要了解对方的通信数据格式,所以对编程人员要求较高,随着标准协议(modbus,USS等)普及,自由口应用越来越少,但是对于一下小的设备如扫码枪等,并没有集成标准通信协议,所以只能选用自由口通信,Moubus和USS其实是自由口的一个特例。

很多人碰到自由口通信就手足无措了,其实只要掌握规律,自由口通信不一定很难。

为此我总结了自由口通信的基本步骤:
1)读懂对方的数据格式。

串行通信中,数据是一位一位的进行发送,也就是0和1。

为了能够准确的将数据发送过去,往往会加上1个起始位,1个校验位,1个停止位(无校验是为2个停止位)如图1-1所示。

图1-1
我们就以Modbus RTU为例详细看一下串口通信中数据是如何发送和就收的。

ModbusRTU代码系统如下:
·1个起始位。

·7或8个数据位,最小的有效位先发送。

S7-200PLC与PowerFlex40变频器自由口通信的实现word精品文档3页

S7-200PLC与PowerFlex40变频器自由口通信的实现word精品文档3页

S7-200PLC与PowerFlex40变频器自由口通信的实现传统的PLC-变频器系统采用开关量控制启停,模拟量输出0-5(10)V电压或4-20mA电流信号控制,需要更多的传感器和输入输出点,成本高,维护困难,干扰性较大。

在当今的企业工业控制系统中,利用可编程控制器与变频器通信并构建庞大的通信网络完成各种运动控制功能已经成为主流。

本文利用西门子S7-200的官方手册以及AB PowerFlex40的快速启动手册设计出了S7-200与AB PowerFlex40变频器的自由口通信。

一、S7-200的自由口通信模式使用自由口模式时,必须先对其工作模式进行定义,S7-200的数据通信格式包括一个起始位,一个停止位,7位或者8位的数据位,校验位和校验类型(奇或偶校验)。

当使用通信模块上的端口0时,需要通过编程将控制字节送入寄存器SMB30.使用端口1时,送入SMB130。

T通信操作数定义如下:波特率 mm:协议选择。

二、系统硬件设计利用RS-485串行通信接口进行数据传输,此次通讯中,利用九针RS485通信口的3针口与8针口进行通信,变频器一端连接RJ45端口的4、5脚。

用带水晶头的网线连接变频器的通讯端口,网线另外一端用两跟单线连接RS485的3、8针口,可完成本次通讯试验的硬件连接。

三、系统软件设计(1)变频器通信参数的设置。

AB PowerFlex 40 参数设定:P035[最大频率]:50HZ 、P036[起动源]:5(通讯端口起动)、 P038[速度基准值]:5[通讯端口控制]、A103[通讯数据传输率]:3(9600波特率)、A104[通讯节点地址]:1、A105[通讯丢失动作]:3(保持最后状态)、A106[通讯丢失时间]: 15s、A107[通讯格式]:1 RTU8-E-1(偶校验)(2) S7-200程序模块即各自的功能。

主要程序模块说明:设置VB100-VB108为发送指令XMT缓冲区、VB200-VB08,VB217,VB218为接收指令RCV缓冲区,M0.0,M1.0,M1.1为标志寄存区,I0.0-I0.4为输入映像寄存区,Q0.0,Q1.0,Q1.1为输出映像寄存区。

200自由口通讯。

200自由口通讯。

西门子自由口使用1.接口定义:2.3G3RV的接线使用RS-485通信时,在变频器的外部让R+,S+短接,R-,S-短接3.接线方式西门子的RS485信号A接R-,S-短接线,RS485信号B连接R+,S+短接线4.程序说明1)XMT指令XMT指令缓冲区格式如表所列T+0 发送字节的个数T+1 数据字节T+2 数据字节T+3 数据字节。

T+255 数据字节2)预先设置变频器以下参数:变频器通讯地址为1通讯波特率9.6K通讯数据偶校验变频器的运行指令采用通讯方式3)使用说明西门子S7-200系列PLC的自由通讯端口编程必定会用到两个指令,即XMT(发送)指令和RCV(接收)指令。

编写程序时需要为这两个指令指定数据缓冲区,一般以最低位数为0的地址作为数据缓冲区的起始地址。

(1).发送指令XMT缓冲区(写/读)VB100 //xmt指令要发送的字节个数VB101 //变频器通讯地址(01)VB102 //modbus功能码(10/03)VB103 //变频器被写地址高位/变频器被读起始地址高位VB104 //变频器被写地址低位/变频器被读起始地址低位VB105 //被写数据个数高位/被读数据字个数高位VB106 //被写数据个数低位/被读数据字个数低位VB107 // 数据数/被发送数据CRC高位VB108 // 最初记录高位/被发送数据CRC低位VB109 // 最初记录低位 /VB110// 以后记录高位 /VB111 // 以后记录低位 /VB112 //被发送数据CRC高位VB113//被发送数据CRC低位(2).接收指令使用中断控制字符接受指令2.CRC校验子程序(SBR0)变频器内置的MODBUS协议采用RTU传输格式,该格式使用CRC校验方式对每次发出或接收的数据帧进行校验。

因此,该子程序使用了多个局部变量,以方便其它子程序调用。

在西门子STEP 7-Micro/Win 编程环境下(如图一),需要在该子程序的局部变量表中预先设定以下局部变量:(1)输入型局部变量(V AR_INPUT)1d_0:DWORD; // 待发送数据地址指针变量lw_4:WORD; // 待发送数据字节个数变量(2)输出型局部变量(V AR_OUTPUT)lb_6:BYTE; // CRC校验值高位变量lb_7:BYTE; // CRC校验值低位变量(3)临时局部变量(V AR)lw_8:WORD; // 待发送数据字节个数计数变量lw_10:WORD; // 待发送数据每字节8位二进制数计数变量Network 1LD SM0.0MOVW 16#FFFF, LW6 //将16位CRC校验寄存器LW6全置为1 Network 2LD SM0.0FOR LW8, +1, LW4 //对待发送数据字节个数(LW4)计数(LW8)循环Network 3LD SM0.0XORB *LD0, LB7 //使待发送数据的第一个字节(*LD0)与//CRC校验寄存器低位字节(LB7)进行异或运算Network 4LD SM0.0INCD LD0 //ld_0指向待发送数据的下一个地址Network 5LD SM0.0FOR LW10, +1, +8 //对每字节8位二进制数计数(LW10)循环Network 6LD SM0.0SRW LW6, 1 //CRC校验寄存器LW6右移一位Network 7LD SM1.1 //若移位后的溢出值SM1.1为1XORW 16#A001, LW6 //则使值16#A001与LW6进行异或运算Network 8NEXT //结束每字节8位二进制数计数循环Network 9NEXT //结束每数据帧字节个数计数循环3.初始化子程序(SBR1)该程序在PLC的第一个扫描周期运行,主要是设置CPU226自由端口的通信格式、数据接收格式及复位各寄存区(参见西门子S7-200编程手册)。

S7-200自由口通讯教程及编程实例

S7-200自由口通讯教程及编程实例

S7-200自由口通讯教程及编程实例S7-200自由口通讯自由口模式允许应用程序控制S7-200 CPU的通讯端口,使用PC/PPI电缆和自由口功能,可以将S7-200连接到带有RS-232兼容接口的多种设备,比如调制解调器。

这里我们将介绍如何用S7-200连接GSM调制解调器发送短消息,并通过这个例子来介绍应用S7-200自由口编程的一般原则时及应注意的问题。

在下面的例子中我们将用到:1. PC/PPI电缆(10位;9 600波特;DIP开关设置:0 1 0 1 1)2. 西门子S7-200 CPU22X3. TC35 Terminal GSM调制解调器4. 一个9直通针转接头(用来连结PC/PPI电缆与TC35 Terminal调制解调器)5. 一根九针直通电缆(用来连结计算机与TC35 Terminal调制解调器)6. STEP 7-Micro/Win V3.2或更高版本软件一、TC35 调制解调器AT指令简介要使用TC35发送短消息需要使用TC35的AT指令,我们首先介绍如何用Windows自带的超级终端连接TC35发送短消息。

1.用九针直通的电缆将TC35连接到计算机的串口上2.打开超级终端(开始à程序à附件à通讯à超级终端)3.为连接取名Connect to TC35T4.选择TC35连接的串口COM15.按照下图的参数设置端口。

19 200 bps为TC35默认的端口波特率,如果该波特率已被更改,请选择正确的波特率。

6.在窗口中键入AT回车测试与TC35的连接,如果连接正确,TC35将返回OK。

7.TC35可以发送两种格式的短消息,普通文本格式和PDU格式。

应用普通文本格式时,短消息内容以ASCII码格式直接输入,操作比较简单,缺点是只能发送英文短消息;应用PDU格式时,短消息内容以Unicode格式输入,可以发送任何文字,缺点是短消息内容需要转换成Unicode码,并且要把短消息按PDU格式打包,操作比较复杂(编程复杂)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

主题:应用探讨—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的两个接口间进行通信实验。

经过不停的实验,终于一点一点地理解了控制字节、控制参数的含义,怎么设置接收结束条件,怎么使用中断、怎么控制接收和发送等等。

ok,开始真正地与仪表通信了。

发请求命令,收数据,可收到的数据是ASCII码,得进行数据转换。

根据大侠们的提醒,经过实验知道了怎么将ASCII码转换为实际的工程数据。

到此基本结束了,虽然说着好像也没什么,但只有我最了解其中的痛苦,不停地实验,不停地修改阿!后面在实际运行中又遇到了有时通信中端的问题,将双绞线的屏蔽接到地上后暂时还没出现问题。

总结一下,个人认为作自由口通信需要做好以下几方面工作:1、最主要的是多动手,光看资料是没有用的,只有自己亲自去动手实验一下才能发现问题和帮助理解。

2、做实验是找个串口调试工具(我用的是sscom32)是必须的,可以帮助你测试你的通信线,调试你的程序,尽量不要直接与设备进行通信,通信不上不好分析原因。

3、我认为200手册上的例子程序非常好,基本的处理方法和编程方法都涉及到了,可以根据你的需要做修改,当然首先要充分地理解他。

4、遇到不太容易理解的,或有问题的,多和别人交流一下,从中可以得到不同的思路。

提前给西门子和坛子里的专家们拜年了!1.自由口通信基本概念(1楼——5楼)quote:以下是引用LaoHuai在2010-12-24 08:29:48的发言:quote:以下是引用happy Julia在2010-12-23 21:58:54的发言:以前很少用自由口通信,但项目里要用呀,正在学习,就接到邀请了。

请教各位大侠:S7-200自由口能支持的最高速率是多少呀,我希望通信能快点。

还有它的数据位、停止位是几位呀,我好确定能和什么样的设备通信呀。

最高波特率是115200BPS,但需要1.2或者以上版本的CPU。

数据位可以是7位或8位停止位是固定的1位。

quote:以下是引用300小小生在2010-12-23 13:52:59的发言:300也可以实现与上位机自由通讯的,S7-200 自由口通讯是基于RS485 通讯基础的半双工通讯,因此,发送和接收指令不能同时执行。

这点有点不好,在300里可以422通讯,但最好是PLC发送不要连续发送,而接收倒没事。

我有次在调试的时候发现上位机发了任务后,PLC设备要过好长一段时间才去执行,后来请教了老师傅,老师傅说把发送端加个间隔时间就好了以下是引用鼠老爹在2010-12-31 15:59:24的发言:不管是什么通讯,传送的都是二进制代码。

ASCII码与二进制协议的区别在于代码所表示内容的方式不同。

如果使用ASCII代码,则数据不能直接用于数学运算,而必须转换成普通的二进制代码。

这样会加重程序负担。

但是ASCII代码用于通讯有一个好处,起始字符与结束字符比较容易确定和判别,它们一般不会出现在数据区。

而用二进制代码通讯,数据无需转换即可直接使用(高低位字节可能需要交换),PLC的负担较小。

但是起始字符和结束字符经常会与数据重复。

因此,用二进制代码通讯,通常是靠字符数和定时器来确定接收终点,主从站之间的步调协调非常重要。

以下是引用Am_Programer在2010-12-27 15:48:59的发言:西门子S7-200系列PLC支持自由口通信协议。

所谓自由口协议是指通过用户程序控制CPU主机的通信端口的操作模式来进行通信。

用这种自由口模式可以用自定义的通信协议连接多种智能设备。

自由口模式支持ASCII和二进制协议。

在自由口模式下,主机处于RUN方式时,用户可以用相关的通信指令所编写的程序控制通信口的操作。

当主机处于STOP方式时,自由口通信被终止,通信口自动切换到正常的PPI协议操作。

自由口通信指令包括:XMT,自由口发送指令;RCV,自由口接受指令。

用特殊标志寄存器SMB30(端口0)和SMB130(端口1)的各个位设置自由口模式,并配置自由口通信参数,如波特率、奇偶效验和数据位。

发送指令(XMT)和发送中断:发送指令允许S7-200的通信口上发送最多255个字节,发送中断通知程序发送完成。

接受字符中断:接受字符中断通知程序通信口上接受到了一个字符,应用程序就可以根据所用的协议对该字符进行相关的操作。

接受指令(RCV):接受指令从通信口接收到整条信息,当接收完成后产生中断通知应用程序。

需要在SM存储器中定义条件来控制接收指令开始和停止接受信息。

接受指令可以根据特定的字符或时间间隔来启动和停止接受信息。

接受指令可以实现多数通信协议。

自由口通信功能的用途:1. 通过RS-232或RS-485串口连接多种智能仪表或RTU,根据智能仪表或RTU 定义的通信协议编写用户程序与智能仪表或RTU通信。

2. 使用USS协议与西门子MicroMaster系列变频器通信,STEP7-Micro/WIN 提供USS协议库,S7-200 CPU是主站,变频器是从站。

3. 创建用户程序来模拟另外一种网络上的从站器件。

例如S7-200的用户程序模仿一个Modbus从站。

STEP7-Micro/WIN提供Modbus协议库。

4. 采用自定义通信协议与PC通信。

PC上的应用软件可以采用此方法方便的访问S7-200的数据。

这是第三方软件访问S7-200PLC比较简便,廉价的方法。

对于自由口通讯,西门子的很多资料都做了比较详细的介绍,其中还包含了大量的例子程序。

由于通讯的不可见性,很多人还是不能很好的掌握,我建议大家:1、理解什么是通讯、什么是串口、什么是232、什么是485?没有过硬的硬件知识是不可能做出通讯的,你连线都不知道怎么接,怎么调试你的程序?2、仔细阅读西门子关于通讯的资料,不需要多只需要精,因为各种版本的资料基本是一样的,关键就是SMB30、SMB86、87、88、89、SMW90、92、SMB94自己控制通讯过程需要SMB2,把这些弄明白了,才有可能做出通讯程序3、使用PC的通讯软件协助调试,有了PC的通讯软件可以看见通讯过程中的数据,能够更方便的调试程序4、理解各种通讯协议。

大家要注意串口通讯和协议是2码事,不论是PPI、MODBUS 还是USS它们都有自己的协议规范,根据规范来写你就可以实现这种通讯。

只不过PPI是不公开通讯协议的,没有办法写而已!最后建议大家自己做通讯,起码会做!至于用不用自己做就要根据你的实际情况了,西门子提供的库也是很方便的!以下是引用yanxiao在2010-12-24 13:50:10的发言:我看过不少问S7200通讯问题的贴子,觉得很多问题并不是S7200的,而是串行通讯的共性问题,也就是对串行通讯本身概念的认识问题。

下面我来谈谈在我的记忆中关于串行通讯的一些认识。

1、串行通讯只有一个传输通道,每个时刻只能表达一种状态。

不管什么介质,不管是什么信号,我们用1表示一种状态,用0表示另一种状态。

2、只用1和0两种状态,是不能表达更多信息的。

好在有一个物理量,对每个系统来讲是统一的,那就是时间。

我们现在很容易做到不同系统之间的定时误差控制在PPM数量级。

1和0在时间上进行有序的组合,就可表达近乎无限的信息。

3、任何一个信号,如果不赋给它一些特点的意义,实际上没什么用。

两个系统要通过信号交换信息,必须对信号有一个共同的约定,这就是我们通常所说的协议。

4、最基本的协议是物理层面的(那个OSI的七层协议模型,第一层就是物理层协议)。

RS232、RS485、RS422,这些是物理层面的一些协议。

5、我们现在要谈的是异步串行通讯。

异步,发达方和接收方之间,没有额外的通道来传送信息何时传送与接收。

每个信息单元的起止时间,发送方编在信息中,由接收方自已解码并同步。

6、好。

现在来讲一下传送一个字节的过程。

在没有传送信息时,传输线处于空闲状态。

规定:空闲状态为1。

发送方(TX)准备发送,驱动传输线让它由1变为0,并持一位的时间长度,我们把这一位叫做起始位。

接收方(RX),检测到传输线由1变0,意味着可能有信息要传了,RX就持续检测,以验证这个0是不是持续了规定的一位时间长度,若是个合法的起始位,就按约定的定时方式,把后续的传输线状态,接收为1个字节。

相关文档
最新文档