S7-200自由口通讯程序
S7-200 自由口通讯程序 方式C

LDB= VB179, VB140 //当BCC码校验正确时,M0.0置1
AB= VB133, 71
S M0.0, 1
Network 7
LDB= VB133, 71 //BCC码错误时发送反馈信息
AB<> VB179, VB140
MOVB 21, VB153
MOVB 103, VB154
Network 1
LD SM0.1 //第一次扫描调用初始化子程序
CALL SBR0
Network 2
LDB= VB134, VB199 //指令中的站地址与本机站地址相符
AB= VB102, 5 //指令类型为读指令
A M0.0 //BCC码校验正确
CALL SBR1 //调用读子程序
FCS = Tempfes
End Function
Private Sub About_Click()
frmAbout.Show
End Sub
Private Sub Form_Load() '初始化
Timer1.Enabled = False '定时器1无效
Timer1.Interval = 1000 '定时器1时间为1S
MOVB 2, VB155
MOVB 26, VB174
Network 5
LD SM4.5 //发送指令执行的反馈信息
XMT VB153, 0
TITLE=子程序注释
Network 1 // 网络标题
// 网络注释
LD SM0.0
R M0.1, 1 //复位verify子程序的执行条件
//PLC每接到一条指令后都会发送一条反馈信息,当反馈信息发送完成时,会产生发送完成中断,XMTcomplete中断服务程序用来处理发送完成中断事件。在XMTcomplete中断服务程序中所要执行的操作包括:复位BCC校验码正确的标志位(M0.0);允许RCV;bcc码寄存器清零;重新装入用于计算BCC校验码的地址指针;接收缓冲区中存放指令结束字符的字节VB133清零(用来判断下一条指令格式是否正确)。
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自由口通信

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可以作为主站先向从站发送数据请求,然后等待从站的数据响应,也可以作为从站,首先等待主站发送过来的数据请求,然后根据请求的内容,按规则把相关数据返回给主站。
S7_200PLC与PC自由口通讯的多种实现方法

S7-200PLC与PC自由口通讯的多种实现方法1 引言西门子S7-200PLC是德国西门子公司生产小型PLC。
S7-200以其高可靠性、指令丰富、内置功能丰富、强劲通讯能力、较高性价比等特点,工业控制领域中被广泛应用。
S7-200PLC突出特点之一是自由口通讯功能。
如何实现S7-200PLC与个人计算机互联通信,是S7-200PLC应用技术关键。
可编程控制器与计算机之间通讯一般是RS-422口或RS-232C口进行,信息交换方式为字符串方式,运用RS-232C或RS-422通道,容易配置一个与计算机进行通信系统,将所有软元件数据和状态用可编程控制器送入计算机,由计算机采集这些数据,进行分析及运行状态监测。
用计算机改变可编程控制器设备初始值和设定值,实现计算机与可编程控制器直接控制,一旦确定了可编程控制器控制指令,就能很方便与计算机连接。
2 S7-200自由口通讯模式S7-200支持多种通讯模式,如点点接口(PPI)、多点接口(MPI)、Rrofibus DP等。
PPI等通讯协议主要用于西门子系列产品之间通讯以及对PLC编程。
自由口模式下,可由用户控制串行通讯接口,实现用户自定义通讯协议。
用户可以用梯形图程序调用接收中断、发送中断、发送指令(XMT)、接受指令(RCV)来控制通信操作。
自由口模式下,通信协议完全由梯形图程序控制。
S7-200CPU上通信口是与RS-485兼容9针D型连接器,PLC还提供了实现RS-485与PC机上RS-232C相连接PC/PPI电缆,利用它可以方便实现S7-200系列PLC与PC之间硬件连接。
S7-200编程软件为STEP7-Micro/WIN32,该软件有STL、FBD和Ladder三种编程模式,有SIMATIC指令和IEC131-3指令两种指令。
本文所给出范例是使用SIMATIC指令STL编程。
3 S7-200 PLC端通讯程序实现PLC程序分为主程序和中断程序。
如何实现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。
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#值,小技巧)现在就要验证数据的有效性了,校验位数据和地址位(发送和接收一致)是否有效。
实验9:两台S7-200自由口通讯实验报告

实验9:两台S7-200自由口通讯实验一.实验目的实现两台S7-200控制器的自由口通讯,并在此基础上实现由一台S7-200经由另一台S7-200对分拣系统模型的控制。
二.实验设备两台S7-200 PLC,RS485通讯电缆一条,PPI编程电缆两条。
三.实验步骤思路:自由口通讯的关键是对两台200 PLC的port口进行设置,通过相应的寄存器设置,使两个port口工作在自由口模式,然后利用相应的传送和接受指令,即可实现数据的通讯。
整个过程都通过编程来完成,硬件接线只需连接两台PLC的port口即可。
1.与port口有关的寄存器这里为了编程方便,两台200 PLC均选择其port0口进行编程,与port0口的相关寄存器及其作用如下SMB30:port0控制寄存器,其设置可以选择端口模式和通讯速率以及是否进行校验与port0口有关的接收、发送寄存器有SMB86,87,88,89,90,92,94等。
他们的具体含义见下图2.编程思路两台200 PLC本身并没有主从关系,但为了区分方便,规定传送控制指令的200 PLC为主PLC,而接收控制指令并连接分拣系统设备的200 PLC为从PLC。
在两台PLC的程序中,分别建立两个子程序,将与通讯口寄存器操作有关的部分全部写入这个子程序中,完成对通讯口的初始化。
在主PLC的程序中,连接两个中断程序,实现50MS发送一次数据的功能。
发送的数据结构为:起始+所要发送数据+结束字符。
所以在程序里对要传送的数据提供头尾字符,以使接收程序能够识别信息发送是否结束。
分拣系统的控制命令只有启动、停止复位,所以在新建的一个子程序中提供两个控制指令的值即可。
从PLC的控制程序中,为了与发送同步,加入了50MS的通断效果,使接收同步,同时在从PLC中编写分拣系统的控制程序。
3.程序详解1主站PLC程序主程序通讯初始化子程序控制字子程序定时中断子程序.发送结束中断子程序主程序通信初始化子程序复位子程序3.数据传送验证在两个PLC的状态表中插入首发数据的VB区,进行在线观察。
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为上述指令的操作数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 //返回中断入口
ATCH INT_1:INT1, 8
INT_3: 主接受服务程序,同时做异或校验
LD SM0.0
XORW SMW1, AC0
MOVB SMB2, *VD46
INCD VD46
DECW VW44
LD SM1.0 //完成预定的接受字节数
ATCH INT_4:INT4, 8 //起用通讯数据处理主程序
INT_4: 通讯数据处理主服务程序
LD SM0.0
BMB VB100, VB152, 6 //接受报头拷贝到发送报头
LD SM0.0
DTCH 8 //暂停响应接受中断
INCD VD46
MOVB SMB2, *VD46
XORW SMW1, AC0
ANDW 16#FF, AC0 //检查异或校验
LDN SM1.0 //异或校验错误
MOVB VB100, AC0
MOVB 16#80, AC1
ORW AC0, AC1
MOVB AC1, VB152
MOVB 16#1, VB158
MOVW +10, VW54
JMP 3 //校验错误,向PC返回错误码
LD SM1.0 //异或正确
MOVW +4, VW34
ATCH INT_8:INT8, 8 //起用服务程序INT8响应接受中断,接受包尾
LD SM0.0 //数据处理
LPS
AB= VB101, 0 //V寄存器
MOVD &VB0, VD50
LRD
AB= VB101, 1 //Q寄存器
MOVD &QB0, VD50
LRD
AB= VB101, 2 //I寄存器
MOVD &IB0, VD50
LRD
MOVW +0, VW56
LRD
MOVW VW102, VW58
LPP
+D VD56, VD50
LDB= VB100, 0 //PLC向PC发送数据
MOVB VB104, AC0
MOVB VB105, AC1
MUL AC1, AC0
BMB *VD50, VB158, AC0
+I +8, AC0
MOVW AC0, VW54
-I +2, VW54
MOVB AC0, VB150
LDB= VB100, 1 //PLC从PC接受数据
BMB VB106, *VD50, VB105
MOVW +10, VW54
MOVB 12, VB150
LBL 3
LD SM0.0
MOVB 50, SMB34
ATCH INT_6:INT6, 10 //延时起用INT6,置位发送电平
MOVD VD60, VD66
MOVB *VD66, AC0
MOVB 0, VB250 //发送数据异或校验次数监视
LBL 0 //发送数据异或校验
LD SM0.0
INCD VD66
MOVB *VD66, AC1
XORW AC1, AC0
INCB VB250
LDB= VB250, 150 //若校验次数超过150次,退出MOVB 6, SMB34
ATCH INT_7:INT7, 10
CRETI
LD SM0.0
DECW VW54
LDN SM1.0 //若发送校验未完成预定的次数,跳转到循环0
JMP 0
LD SM0.0
INCD VD66
MOVB AC0, *VD66
LD SM0.0
MOVB VB150, AC0
+I +4, AC0
MOVB AC0, VB150
INT_5: 接受时间监控服务程序
LD SM0.0
MOVD VD40, VD46
MOVW +10, VW44
MOVB 5, SMB34
ATCH INT_1:INT1, 8
ATCH INT_0:INT0, 10
INT_6:发送数据
LD SM0.0
MOVB 250, SMB34
ATCH INT_7:INT7, 10 //起用发送时间监控
ATCH INT_7:INT7, 9 //发送中断(发送完成时触发)起用服务程序INT7
A SM4.5
XMT VB150, 0
INT_7: 结束中断服务程序
LD SM0.0
DTCH 9 //关闭发送中断
MOVB 6, SMB34
ATCH INT_0:INT0, 10 //返回中断入口
ATCH INT_1:INT1, 8
INT_8: 接受包尾,正常情况下本中断服务程序连续调用四次,
接受四个0XFF,程序本身不做任何处理
CRETI。