S7-200自由口通讯程序

合集下载

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

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⾃由⼝通信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自由口通信

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自由口通讯的多种实现方法

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自由口通讯

如何实现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自由口通信

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自由口通讯实验报告

实验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自由通信口

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-200PLC自由口通讯开始结束条件

S7-200PLC自由口通讯开始结束条件

自由口通讯支持的开始条件1、空闲行检测:空闲行条件被定义为传输行中的静态或空闲时间。

当通讯行处于静态或空闲达到SMW90或SMW190中指定的毫秒数时,开始接收。

执行程序中的"接收"指令时,接收信息功能开始搜索空闲行条件。

如果在空闲行时间失效之前收到任何字符,接收信息功能会忽略这些字符,用来自SMW90或SMW190的时间重新启动空闲行计时器。

空闲行时间失效后,接收信息功能存储在信息缓冲区中随后接收的所有字符。

按照指定的波特率,空闲行时间应当始终大于传输一个字符(起始位、数据位、校验和停止位)的时间。

按照指定的波特率,空闲行时间的典型数值是三个字符时间。

用户将空闲行检测用做没有特定起始字符或指定信息间最小时间的二进制协议的开始条件。

设置: il = 1, sc = 0, bk = 0;SMW90/SMW190 = 空闲行超时(以毫秒为单位)。

空闲行检测时序图2、起始字符检测:起始字符是任何被用作信息第一个字符的字符。

当收到在SMB88或SMB188中指定的起始字符时,信息开始。

接收信息功能在接收缓冲区中将起始字符存储为信息的第一个字符。

接收信息功能忽略在起始字符之前接收的任何字符。

起始字符和在起始字符之后接收的所有字符存储在信息缓冲区中。

通常,您在ASCII协议中使用起始字符检测,在ASCII协议中,所有的信息以相同的字符开始。

设置: il = 0, sc = 1, bk = 0;SMW90/SMW190 = 无关紧要;SMB88/SMB188 = 起始字符。

3、空闲行和起始字符:"接收"指令可以使用空闲行和起始字符组合开始一则信息。

执行"接收"指令时,接收信息功能搜索空闲行条件。

找到空闲行条件后,接收信息功能寻找指定的起始字符。

如果收到起始字符之外的任何字符,接收功能重新开始搜索空闲行条件。

空闲行条件之前接收的所有字符均符合条件,起始字符之前接收的所有字符均被忽略。

西门子S7-200自由口与上位机通讯实例

西门子S7-200自由口与上位机通讯实例

西门子S7-200自由口与上位机通讯实例西门子S7-200自由口与上位机通讯实例S7-200自由口与上位机通讯读取温度值的程序PLC主程序网络1// 设置控制方式为自由口通信方式,启动接收字符中断// PLC首次扫描自由口通信,波特率为9600,数据位8,停止位1,无校验初始化RCV,允许RCV,有结束符,检查空闲时间结束符为A空闲时间为5MS一次接收的最大字符为6个启动通信口,接收完成中断全局允许中断接收数据LD SM0.1MOVB 16#09, SMB30MOVB 16#B0, SMB87MOVB 16#0A, SMB89MOVB 6, SMB94ATCH INT_0, 23ENIRCV VB199, 0网络2// 检测温度送VW0 //转换成实际温度值从工作站编号送到输出缓冲区检测温度送输出缓冲区LD SM0.0MOVW AIW0, VW0/I +54, VW0MOVW AIW2, VW2/I +54, VW2MOVW 1, VW300MOVW VW0, VW302MOVW VW2, VW304网络3// 设置温度控制上限和下限//LD SM0.0MOVW +350, VW4MOVW +450, VW6网络4// 检测温度低于下限,则输出加温// LDW< VW0, VW4A SM0.5S Q0.0, 1网络5// 检测温度高于上限,则输出降温// LDW> VW0, VW6A SM0.5R Q0.0, 1网络6//准备传送参数//发送字节数据,送VB99发送检测温度数据,送VW100发送工作站编号数据,送VW102 LD SM0.0MOVB 6, VB99MOVW VW300, VW100MOVW VW302, VW102MOVW VW304, VW104网络7// 传送数据//LD SM0.5XMT VB99, 0中断程序网络1//通信口接收数据完成后的中断//// SMB86 等于16#20,表示PLC收到结速符//收到结束符,把收到的数据传到VB400中断有条件返回否则继续接收LDB= SMB86, 16#20MOVB VB200, VB400CRETINOTRCV VB199, 0\\*******************************\\VB源程序Dim x1, k1, k2Dim p11, p22 '定义变量Dim aa() As Byte '定义数组Private Sub Command1_Click() '开始监控,定时器1有效Timer1.Enabled = TrueEnd SubPrivate Sub Command2_Click() '退事程序,定时器1无效Timer1.Enabled = FalseCls '清屏Unload MePrivate Sub Form_Load() '初始化Timer1.Enabled = False '定时器1无效Timer1.Interval = 100 '定时器1时间为0.1STimer2.Enabled = True '定时器2有效Timer2.Interval = 1000 '定时器2时间为1SPicture1.ScaleMode = 0 '定义纵横坐标/doc/073575364.html,mPort = 1 '设定端口号MSComm1.Settings = "9600,n,8,1" '设定通讯波特率MSComm1.InputLen = 6 '输入缓冲区为6个字符MSComm1.InBufferSize = 256 '接收缓冲器大小MSComm1.OutBufferSize = 256 '输出缓冲器大小MSComm1.InputMode = comInputModeBinary '以二进制传输MSComm1.OutBufferCount = 0 '清空发送缓冲区MSComm1.InBufferCount = 0 '清空接收缓冲区End SubPrivate Sub Timer1_Timer() '定时器1有效,触发接收事件MSComm1.PortOpen = True '打开端口ReDim aa(0 To 5) '定义动态数组k1 = 0 '识别PLC站号,为1If k1 = 0 Then MSComm1.Output = "1" + Chr(10) + Chr(13) '发送Do While MSComm1.InBufferCount = 0 '准备接收数据Loopaa = MSComm1.Input '接收数据存入数组If aa(0) > 64 Then GoTo xxx:k2 = Int(aa(0) * 255 + aa(1) * 1)Select Case k2p11 = Int(aa(2) * 255 + aa(3) * 1)p22 = Int(aa(4) * 255 + aa(5) * 1)Case ElseEnd Selectk1 = k1 + 1If k1 > 2 Then k1 = 0xxx:MSComm1.PortOpen = FalseEnd SubPrivate Sub Timer2_Timer() '绘制各中频炉的温度曲线x1 = x1 + 1 '时间增加为1SPicture1.PSet (x1, p11), vbRed '绘制1#炉的温度曲线,为红色Picture1.PSet (x1, p22), vbBlue '绘制2#炉的温度曲线,为黄色Text1.Text = Str(p11) '输出1#炉温度值Text2.Text = Str(p22) '输出2#炉温度值Text3.Text = Str(x1) '输出监控时间。

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。

超详细讲解PLC自由口通讯——以S7-200为例。

超详细讲解PLC自由口通讯——以S7-200为例。

超详细讲解PLC自由口通讯——以S7-200为例。

展开全文主要内容:•S7-200 PLC串口通讯概览•S7-200 PLC自由口通讯基础•S7-200 PLC自由口通讯指令•S7-200 PLC自由口通讯常问问题(1)概览S7-200串口通讯主要包括:1)Modbus—S7-200PLC与支持Modbus RTU协议的第三方设备通讯•RTU Master-Protocol(RTU主站协议)•RTU Slave-Protocol(RTU从站协议)2)USS—S7-200PLC与SIEMENS驱动设备的通讯(如MM440等)3)自由口通讯—S7-200PLC与自由协议的第三方设备间的通讯S7-200系列PLC可以方便地同计算机、打印机、变频器、扫描仪等其它的第三方设备进行无障碍通讯。

Modbus通讯和USS通讯是自由口通讯的特例。

对于S7-200系列的PLC而言,本体上存在着一个或两个485通讯接口,这种接口即可实现S7-200串口通讯的功能,这类串口既可以做编程和监控,也可以做自由口通讯。

但在其运行自由口通讯程序时,无法对其进行监控。

这是因为对于同一个口而言在同一个时刻只能支持一种协议,而编程与下载的协议对于S7-200PLC而言是PPI协议,所以一旦在程序运行过程中使得它做自由口通讯的状态则无法对其监控和下载。

下表是Modbus、USS以及自由口通讯的一些参数:对于OSI七层模型而言,Modbus通讯、USS通讯和自由口通讯所处的位置可从上图中看到。

(2)自由口通讯•S7-200 CPU的通信口可以设置为自由口模式。

选择自由口模式后,用户程序就可以完全控制通信端口的控制,通信协议也完全受用户程序控制。

•所谓的自由口通讯,就是通讯协议是由用户自由定义的。

•对于S7-200 PLC而言,基于本体自带的485端口的网络所应用的协议,除了PPI协议以外,其他都是自由口协议。

例如USS协议、Modbus协议等等都是特定的自由口通讯协议。

S7-200系列PLC自由口通信知识分享(3)

S7-200系列PLC自由口通信知识分享(3)

S7-200系列PLC自由口通信知识分享(3)在前面的文章中与大家分享了自由口通信中的发送功能,那么进行就跟大家聊聊自由口通信中的接收功能,自由口通信中的难点就是在于接收功能的使用,当PLC通过通信端口把数据发送给下位设备后,下位设备会根据PLC发送过去的信息内容回传相应的数据给PLC,这时候PLC就需要使用接收功能进行数据的接收,S7-200系列PLC提供了一条接收指令(RCV)用于接收下位设备返回来的信息。

指令格式如下所示:当PLC接收完下位设备回传回来的数据后,PLC会产生相应的中断事件来告知编程人员信息接收完成,此时可以编写相应的程序提取有效数据,并对这些有效数据进行转换,转换成可读性的数据。

S7-200系列PLC提供了中断事件23和中断事件24分别作为端口0和端口1的接收完成中断事件号。

在PLC的信息发送过程中,PLC是主动方,会根据需要发送的数据个数进行数据的发送,当发送完成后,PLC会自动产生相应发送完成中断,而对于接收来讲,PLC是被动方,只负责数据的接收,当PLC的端口使能了接收功能后,PLC处于等待信息的接收状态,有数据过来就接收,但是接收的数据是否是有效的数据,什么时候接收完了PLC并不知道,此时就要求我们编程人员需要设置好消息的起始和接收条件,当起始条满足了,PLC 把接收到的数据放入到接收缓冲区中,当满足了结束条件,PLC关断接收功能,并产生接收完成中断。

用于判断消息的的起始和结束条件有很多种方式,但用的比较多可能就以下几种方式:今天我们先聊一聊通过起始符作为信息的起始和通过结束符作为信息的结束判断的过程及程序的设置,S7-200系列的PLC提供了两个系统存储区用于存储起始符(SMB88)和结束符(SMB89)(这里以端口0为例说明),因此若需要使用起始符和结束符做为消息的起始和结束的的判断,则需要把起始符和结束符分别放到SMB88和SMB89中。

当PLC在接收数据的过程中,会对接收的数据与起始符进行对比,如果与起始符不相等,这说明不是有效性的数据,不放入接收缓冲器中,会把接收到的数据丢弃,重新接收,若接收到的数据与起始符相等,则PLC会把接收到的数据放到接收缓冲区中,同时记录接收字符个数的存储器的值加1。

200PLC自由口(MODBUS)通讯初级教程

200PLC自由口(MODBUS)通讯初级教程

200PLC自由口(MODBUS)通讯初级教程原创作者:杜天龙1、安装200PLC程序及S7_200PLCMODBUS库文件。

200PLC库文件下载地址:/share/link?shareid=232544846&uk=5372422712、新建200PLC程序(本例使用的PLC是CUP226),直接打开库,选择200从站里面的指令。

具体程序如下:3、如果你想更多的学习MBUS_INIT和MBUS_SLA VE的用法,请参考200PLC编程软件的帮助文件。

4、如果在编译完出现错误18的提示,那是因为没有为库分配存储区,分配存储区的方法如下,新手直接选择建议地址,这样可以避免地址重复。

这里给出的建议地址的起始地址为VB8。

那是因为我们在上面的程序中已经将VW0、VW2、VW4、VW6用掉了。

因VW为字,占用2个字节,相当于从VB0~~VB7。

所以这里最小只能是VB8,当然你可以将起始地址手动设置成VB100。

这样你就可以使用VW0~~VW98之间的存储器。

5、下载并运行PLC后,下载串口测试工具。

发现并不能得到想要的结果,分析程序发现是地址写错了,VW地址不能VW0、VW1……VW6,应该是VW0、VW2……VW12,这样库存储区的起始地址就不能使8了,至少也要是14,我们直接修改到200,方面以后的测试。

我们将程序做如下修改:将MODBUS初始化程序MBUS_INIT的MaxHold保留区的地址直接修改到100(小于库存储区的起始地址VB200)。

至此程序调试结束。

6、串口调试软件(/share/link?shareid=238269468&uk=537242271)的使用方法详见软件操作说明里面的具体图片。

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编程手册)。

s7200自由口通讯教程及编程实例(二)

s7200自由口通讯教程及编程实例(二)

S7-200自由口通讯教程及编程实例(二)排行榜收藏打印发给朋友举报发布者:admin热度19票浏览175次【共1条评论】【我要评论】时间:2009年11月11日19:03三、PLC编程现在,我们已经知道如何用AT指令发送短消息,剩下的工作是用PLC程序来发送这些AT指令。

S7-200的通讯端口为RS-485接口,RS-485接口为半双工接口,因此,编写PLC 程序的关键是避免在通讯端口上同时发送和接收。

我们下面将介绍一种标准的编程模式,按照这种模式编写自由口通讯程序可以有效的避免因同时发送和接收造成的通讯冲突,从而保证程序的正常运行。

1. 初始化Network 1LD SM0.1MOVB 9, SMB30MOVB 2#, SMB87MOVB '>', SMB88MOVW +5, SMW92MOVB 255, SMB94ATCH INT_0, 23ATCH INT_1, 9ENI将上面这段程序添加到主程序中,对PLC的端口0进行初始化。

这段程序以SM0.1为触发条件,每当PLC进入RUN状态时执行一次。

MOVB 9, SMB30该指令将端口0设置为9600,8,N,1 自由口方式MOVB 2#, SMB87SM87.7=1 允许端口0接收字符SM87.6=1 当检测到与SMB88中相同的字符时开始接收,并将该字符当作信息的首字符SM87.5=0 不检测信息的结束字符SM87.4=0 不检测端口空闲状态SM87.3=0 定时器为内部字符定时器,意思是PLC开始接收信息后(检测到起始字符),每接收到一个字符就启动定时器,当定时器到达在SMW92中设置的时间后,即认为定时器超时SM87.2=1 允许在定时器超时后停止接收,并产生接收完成中断SM87.1=0 忽略Break条件MOVB '>', SMB88设置接收起始字符为ASCII码的”>”,当TC35收到AT+CMGS=后将返回”>”,当PLC 收到”>”后发送PDU数据包MOVW +5, SMW92设置定时器超时时间为5 msMOVB 255, SMB94设置RCV指令接收的最大字符数位255ATCH INT_0, 23中断时间23为端口0接收完成中断,将该中断连接到中断0ATCH INT_1, 9中断时间9为端口0发送完成中断,将该中断连接到中断1ENI中断允许2. 接收TC35的信息Network 2LD SM0.0RCV VB100, 0在初始化程序中,端口0以被允许接收来自TC35的信息,在主程序中添加上面的程序将端口0置于接收状态。

西门子200系列PLC自由口通信程序设计

西门子200系列PLC自由口通信程序设计

西门子200系列PLC自由口通信程序设计之数据的发送在设计自由口通信程序时,自由口通信程序设计的核心就是使用发送指令XMT和接收指令RCV对数据进行发送和接收。

接收指令RCV应用的难点,在于如何设置“判断接收消息的起始条件和结束条件”,而对于发送指令来讲相对的比较简单,只需要准备好数据,然后使用发送指令发送出去即可。

但实际应用中是否是真的就是这样呢?在一个通信程序中,需要发送的数据可能比较多,比如说与三菱变频器的通信,通过三菱变频器的专用通信协议来通信,那么需要发送的数据时有运行命令,频率修改,读取一些参数,而且这些数据均不一样,因此需要先定义好不同的数据在不同的存储器,当发送哪个命令的数据时就需要把数据给过去。

真的是这样做吗?个人不赞同使用这种方法去做,个人比较赞同把需要发送的数据先做成一个功能块,然后根据需要发送的数据填写到这个功能块的管脚上,发送指令放于这个功能块中,当功能块接通一次,就对一次的数据发送出去。

就以三菱专用通信协议为例,发送运行命令和修改频率及读取一些参数的功能为例来进行说明。

三菱专用通信协议内容具体大家可以自己网上查找,这里不做详细的说明,这里我们主要看下PLC需要发送到变频器的数据的格式。

PLC往变频器写数据时需要发送的格式:根据数据长度的不一样分为三种格式,如下所示:PLC读取变频器数据的时需要发送的数据格式变频器运行代码、修改频率、读取变频器参数的代码如下表所示结合上面的发送数据的格式,和代码表,我们可以发现,发现运行命令,和发送频率,以及读取变频器的参数值的格式都不一样,但也有前面部分相同的内容,所以我们在设计功能块时需要做判断,判断是“读命令”还是“写命令”,如果是写命令,则还进一步判断是“写运行命令”还是写“频率命令”根据这原理,我们可以开始设计功能块。

(1)编写变量表(2)程序编写好功能块后,只需要在主程序中调用这些功能块,同时给不同的功能块赋实参即可,如下所示:本程序仅供参考,具体程序可参见技成培训网论坛!本文章由技成培训网曾鑫老师原创,如需转载,请授权!如果对您有帮助,请下载惠存!。

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

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

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 ——38400bps001 ——19200bps010 ——9600bps011 ——4800bps100 ——2400bps101 ——1200bps110 —— 600 bps111 —— 300 bpsmm: 用于通讯协议的选择,当这两位的组合是:00 ppi从站模式01 自由口通讯模式10 ppi主站模式2.2 接收信息的状态字节s7-200在自由口通讯时用于接受信息的状态有smb86和smb186,smb86用于s7-200的端口0的通讯,smb186用于s7-200的端口1的通讯,两者的格式一样,下面我们以smb186为例,介绍其组成。

S7200自由口通讯程序

S7200自由口通讯程序

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, SMB34ATCH INT_0:INT0, 10ATCH INT_1:INT1, 8ENIINT_0: 中断程序入口LD SM0.0DTCH 10MOVD VD40, VD46MOVW +10, VW44MOVW +10, VW54ATCH INT_2:INT2, 8 //接受中断起用服务程序INT2第 1 页INT_1: 延时转向INT0LD SM0.0MOVB 5, SMB34ATCH INT_0:INT0, 10INT_2: 接受地址,并判断LDB= SMB2, VB9 //地址和本机相符MOVW VW8, AC0MOVB 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 //暂停响应接受中断第 2 页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, VW56LRD第 3 页MOVW 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, AC0第 4 页INCB VB250LDB= VB250, 150 //若校验次数超过150次,退出MOVB 6, SMB34ATCH INT_7:INT7, 10CRETILD SM0.0DECW VW54LDN SM1.0 //若发送校验未完成预定的次数,跳转到循环0 JMP 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 //发送中断(发送完成时触发)起用服务程序INT7第 5 页A SM4.5XMT VB150, 0INT_7: 结束中断服务程序LD SM0.0DTCH 9 //关闭发送中断MOVB 6, SMB34ATCH INT_0:INT0, 10 //返回中断入口ATCH INT_1:INT1, 8INT_8: 接受包尾,正常情况下本中断服务程序连续调用四次,接受四个0XFF,程序本身不做任何处理CRETI第 6 页。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档