搜档网
当前位置:搜档网 › S7-1500串口模板自由口通讯编程注意事项

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

S7-1500串口模板自由口通讯编程注意事项
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是不能拷贝的,只能拖拽。

图1-2周期性触发及端口地址参数分配

1.3发送缓冲区参数设置(BUFFER和LENGTH)

BUFFER管脚定义的是自由口通讯所需要发送的数据区,该数据区在定义时,需注

意:该地址区域的数据类型为Variant(S7-1500)。

对于S7-1500来讲,默认情况下,DB块属性都是“优化的块访问”,因此此时地址

应写成该DB的符号名。例如,该DB的符号名定义为“SenderDB”,起始地址名

为“Send_Data”,则该地址应写成:“SenderDB.Send_Data”(图1-3)。当然,还是建议通过拖拽的方式,这样不容易出错。

图1-3发送数据区的地址定义

但如果此时也想写成指针数据类型的方式(例如:P#DB3.DBX0.0 byte 20),则需

要将DB块属性中的“优化块访问”的方式“去激活”(默认是激活的)(图1-4)。

图1-4 DB块的“非优化访问”设置

而LENGTH为准备发送的数据长度,该长度应在BUFFER定义的数据区的长度范

围内,比如,BUFFER区定义了20个字节的长度范围,则LENGTH的取值范围为

0~20。如果定义为0,则表示将整个数据区都发送出去。

1.4发送不同区域或不连续区域的数据

特殊情况下,可能需要发送不同区域的数据,例如:同一个数据块的不同区域的数

据。由于对于S7-1500系统的自由口通讯方式中,当多次调用发送块(Send_P2P)时,由于只有一个发送端口,因此当某个发送块执行时,其他块均停止发送,并且

会导致接收方的数据被覆盖,因此并不推荐多次调用发送功能块来发送不同区域的

数据。此时可以通过调用MOVE指令库中相应的MOVE指令将不同的数据区的数据

先送到发送BUFFER区,再通过发送块发出去。

1.5发送不同区域或不连续区域的数据

接收程序同发送程序类似,需要激活使能端“EN”、定义相应的端口,另外定义接

收区也同发送端类似(图1-5)。

图1-5接收功能块的调用

但注意,如果发送端多次调用发送块(Send_P2P),且发送不同区域的数据,由于

接收端无法改变接收端口,都是通过同一端口接收数据(例如:258),因此无论接

收端调用一次还是多次该接收功能块(Receive_P2P),所接收到的数据都将会被来自不同发送区域的数据所相互覆盖(图1-6)。

图1-6接收到的数据相互覆盖

因此一般不推荐调用多次发送块,如果真的有这种应用,需用户自己编程将数据进行分拣。

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

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

PLC 和变频器 频器博客原创(https://www.sodocs.net/doc/782566360.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

C#串口通讯编程

C#中串口通信编程收藏 本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。 我们将使用标准的RS 232 C 在PC间通信。它工作在全双工模式下,而且我们不打算使用任何的握手 或流控制器,而是使用无modem连接。 命名空间 System.IO.Ports命名空间中最重用的是SerialPort 类。 创建SerialPort 对象 通过创建SerialPort 对象,我们可以在程序中控制串口通信的全过程。 我们将要用到的SerialPort 类的方法: ReadLine():从输入缓冲区读一新行的值,如果没有,会返回NULL WriteLine(string):写入输出缓冲 Open():打开一个新的串口连接 Close():关闭 Code: //create a Serial Port object SerialPort sp = new SerialPort (); 默认情况下,DataBits 值是8,StopBits 是1,通信端口是COM1。这些都可以在下面的属性中重新设置 : BaudRate:串口的波特率 StopBits:每个字节的停止位数量 ReadTimeout:当读操作没有完成时的停止时间。单位,毫秒 还有不少其它公共属性,自己查阅MSDN。 串口的硬件知识

在数据传输的时候,每个字节的数据通过单个的电缆线传输。包包括开始位,数据,结束为。一旦 开始位传出,后面就会传数据,可能是5,6,7或8位,就看你的设定了。发送和接收必须设定同样 的波特率和数据位数。 无猫模式 没有Modem模式的电缆只是简单地交叉传送和接收线。同样DTR & DSR, 和RTS & CTS 也需要交叉。 RS232针图 这里,我们三条线。互连2和3(一段的2pin连接3pin),连接两端的5pin。 [示例程序] 主程序 如果想使用默认属性,按“Save Status”按钮,如果想改变属性按“Property”。它会弹出下图:

1C#中串口通信编程教程

C#中串口通信编程教程 本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET2.0提供了串口通信的功能,其命名空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。我们将使用标准的RS232C在PC间通信。它工作在全双工模式下,而且我们不打算使用任何的握手或流控制器,而是使用无modem连接。 命名空间 System.IO.Ports命名空间中最重用的是SerialPort类。 创建SerialPort对象 通过创建SerialPort对象,我们可以在程序中控制串口通信的全过程。 我们将要用到的SerialPort类的方法: ReadLine():从输入缓冲区读一新行的值,如果没有,会返回NULL WriteLine(string):写入输出缓冲 Open():打开一个新的串口连接 Close():关闭 Code: //create a Serial Port object SerialPort sp=new SerialPort(); 默认情况下,DataBits值是8,StopBits是1,通信端口是COM1。这些都可以在下面的属性中重新设置 : BaudRate:串口的波特率 StopBits:每个字节的停止位数量 ReadTimeout:当读操作没有完成时的停止时间。单位,毫秒 还有不少其它公共属性,自己查阅MSDN。 串口的硬件知识 在数据传输的时候,每个字节的数据通过单个的电缆线传输。包包括开始位,数据,结束为。一旦开始位传出,后面就会传数据,可能是5,6,7或8位,就看你的设定了。发送和接收必须设定同样的波特率和数据位数。

实验十 自由口通信实验

实验十自由口编程实验 一、实验目的 了解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 //返回中断入口

通用串口通讯程序设计

通用串口通讯程序设计 作者:和光同尘版本:V1.0 序 做硬件开发近20载,花了近十年做基础开发,对硬件开发略知一二,接触的做国防/工业大项目的人才我就是和他们沟通中获取了很多思想;人生已过而立之年,不惑解疑,总想写点什么。从一线研发(做了4年),开发(3年),硬件开发主管(12年),算起来人生从不到弱冠之年(中专毕业)开始接触MCS51、AVR等8位处理器到ARM v7核、CoretxM 核的32位处理器,CPLD/FPGA、PLC…………啰嗦了!! 最近因为工作原因需要把一些自己感悟的记录下来,希望传递给入门的有心沉下心做基础健壮扎实的初学者。

正文 做嵌入式硬件开发一般都会用到通讯数据交互,这就涉及通讯协议/规约的设计。本文从基础的串口(RS232、RS485等)为模型进行讲解。 说道串口通讯,就是编写串口程序,简单的就是1个字节的发送,1个字节的接收,但这不能满足绝大多数实际工作业务需求,实际需要一串字节数据的交互,A发送,B接收……Z 接收;Z机……B机收到根据情况需要回复(ACK)A机,这个过程就叫交互双向通讯(本文不讨论多主机、1主机相对复杂通讯机制。)。这种通讯就需要提前设计好通讯的规约(大家约定好暗号——每个字节代表什么意思)。 接下来编写通信程序(发送/接收),如何写出一个健壮高效串口程序?是否健壮高效其实很大一部分取决于通讯接收程序的架构。 通讯程序编写依据是——通讯规约,通讯帧的设计。 ●I类通用型: ||帧头段|===|数据段|===|校验码|===|帧尾段|| ●II类时隙通讯: ||开始时隙T(T1T2T3T4T5T6)|=|功能码|=|数据段|=|校验码|=|结束时隙T(T1T2T3)|注意:时隙只是纯粹的前后两帧数据的间隔时间,这期间坚决不能有数据产生。 1.1I类通用型 ◆帧头段 帧头段用于鉴别一串字节流中1帧数据起始位置,这个帧头段必须具有足够的特殊标识(易分辨)。 什么样的特殊标识可作为帧头? 根据个人经验: ①具有监测通讯波特率功能特点:0B01010101(55H)、0B10101010(AAH)或0B00000000(00H)、0B11111111(FFH); ②利用ASCII码如MODBUS ASCII规约以冒号‘:’(3AH)作为帧头。也可以采用ASCII ‘U’(55H)、‘@’(40H)等等 只要保证帧头字节数据内容,在所有通讯数据字节流中,除帧头有意为之而出现,那就是帧头。建议最好有两个字节及以上,这样数据出现与帧头一致的概率更加小,才做到独一无二的特殊性。

串行端口程序设计

串行端口程序设计 一、实验目的 了解在linux环境下串行程序设计的基本方法。 掌握终端的主要属性及设置方法,熟悉终端I /O函数的使用。 学习使用多线程来完成串口的收发处理。 二、实验内容 读懂程序源代码,学习终端I /O函数的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。 三、预备知识 有C语言基础。 掌握在Linux下常用编辑器的使用。 掌握Makefile 的编写和使用。 掌握Linux下的程序编译与交叉编译过程 四、实验设备及工具 硬件:UP-CUP S2410 经典平台、PC机Pentium 500以上, 硬盘10G以上。 软件:PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境 五、实验原理 异步串行I /O方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。

为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。 图2.3.1串行通信字符格式 图2.3.1给出异步串行通信中一个字符的传送格式。开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为50,95,110,150,300,600,1200,2400,4800,9600等。 接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误: ●奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。 ●帧格式错:一个字符从起始位到停止位的总位数不对。 ●溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。 每一种错误都会给出相应的出错信息,提示用户处理。一般串口调试都使用空的MODEM 连接电缆,其连接方式如下:

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

Java串口通信编程指南

Java串口通信编程指南

1. 概述 在java中,利用Java Communication包可以操作串口,但官方的包在3.0之后就只支持Linux和Solaris平台了,Windows平台的只支持到98年出的2.0版本,不过在XP下还能使用。另外,也可以用开源的Rxtx实现串口通信,这里仅以Java Communication包,在Windows 平台实现串口通信进行说明。 2. 前期准备 2.1. 下载Java Communication包 ?下载地址如下:https://www.sodocs.net/doc/782566360.html,/Jolt/javacomm20-win32.zip。 ?如果是非Windows平台,请到Sun网站选择其他版本下载。地址如下: https://www.sodocs.net/doc/782566360.html,/download/products.xml?id=43208d3d 2.2. 配置 ?解压缩javacomm20-win32.zip ?把win32com.dll拷贝到{JAVA_HOME}\jre\bin ?把comm.jar拷贝到{JAVA_HOME}\jre\lib\ext ?把https://www.sodocs.net/doc/782566360.html,m.properties拷贝到{JAVA_HOME}\jre\lib ?set CLASSPATH={JAVA_HOME}\jre \lib\ext \comm.jar;%classpath%

3. 实现过程 主要步骤包括: ?获得串口标识 ?打开串口 ?设置串行端口通讯参数 ?获取输入(出)流 ?进行读写操作 3.1. 获得串口标识 指定串口的端口号,生成串口的标识类的实例。 https://www.sodocs.net/doc/782566360.html,mPortIdentifier是通讯端口管理器,控制访问到通讯端口的中心类。一个应用程序首先使用CommPortIdentifier中的方法,通过相关的驱动去获取那些通讯端口是可用的并且选择一个端口便于开始。它包括如下功能: a. 通过驱动决定通讯端口是可用的。 b. 打开通讯端口为了I/O操作。 c. 决定端口的拥有者。 d. 解析端口拥有者的争夺。 e. 管理事件显示在端口拥有者的中的状态改变。 示例代码如下: 代码: 3.2. 打开串口 示例代码如下: 代码:

串行异步通信程序设计

******************* 实践教学 ******************* 兰州理工大学 计算机与通信学院 2014年秋季学期 《通信系统综合训练》课程设计 题目:串行异步通信程序设计 专业班级:通信工程(1)班 姓名:李银环 学号:11250134 指导教师:王惠琴 成绩:

摘要 在Windows环境下实现通信的方法主要有利用MSComm控件和直接用Windows API编程,软件采用Microsoft Visual C++ 6.0,利用MSComm控件编程相对来说更简单一些,而直接使用Windows API编程更灵活一些。 本次课程设计分析了串行异步通信的基本原理,在VC++6.0的环境下利用MSComm控件实现了两个PC机的COM口间的数据发送和接收。本文通过对COM1口进行初始化编程,以及对建立的工程中的每个对话框和按钮分别进行编程和设置,成功的实现了利用PC机的两个COM口进行异步通信,并能根据设置调整异步传行通信参数。 关键词:VC++6.0;MSComm控件;串行异步通信

目录 前言 (1) 第1章串行异步通信基本原理 (2) 1.1 串行通信协议 (2) 1.2 串口通信的基本概念 (3) 1.3 RS-232简介 (4) 第2章 VC++软件简介 (5) 2.1 VC++6.0简介 (5) 2.2 Microsoft Communications Control 控件 (6) 第3章串行异步通信系统分析 (7) 第4章串行异步通信系统设计 (8) 4.1建立工程 (8) 4.2 在程序中添加MSComm控件 (9) 4.3 初始化串口:设置MSComm控件的属性 (11) 4.4 发送数据 (12) 第5章串行异步通信程序调试 (18) 5.1 计算机串口设置 (18) 5.2 程序运行结果 (18) 参考文献 (20) 附录 (21) 致谢 (29)

西门子自由口通讯

一、串口特性设置 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。

C#中串口通信编程

本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。 我们将使用标准的RS 232 C 在PC间通信。它工作在全双工模式下,而且我们不打算使用任何的握手或流控制器,而是使用无modem连接。 命名空间 System.IO.Ports命名空间中最重用的是SerialPort 类。 创建SerialPort 对象 通过创建SerialPort 对象,我们可以在程序中控制串口通信的全过程。 我们将要用到的SerialPort 类的方法: ReadLine():从输入缓冲区读一新行的值,如果没有,会返回NULL WriteLine(string):写入输出缓冲 Open():打开一个新的串口连接 Close():关闭 Code: //create a Serial Port object SerialPort sp = new SerialPort (); 默认情况下,DataBits 值是8,StopBits 是1,通信端口是COM1。这些都可以在下面的属性中重新设置: BaudRate:串口的波特率 StopBits:每个字节的停止位数量 ReadTimeout:当读操作没有完成时的停止时间。单位,毫秒 还有不少其它公共属性,自己查阅MSDN。

串口的硬件知识 在数据传输的时候,每个字节的数据通过单个的电缆线传输。包包括开始位,数据,结束为。一旦 开始位传出,后面就会传数据,可能是5,6,7或8位,就看你的设定了。发送和接收必须设定同样 的波特率和数据位数。 无猫模式 没有Modem模式的电缆只是简单地交叉传送和接收线。同样DTR & DSR, 和 RTS & CTS也需要交叉。RS232针图 这里,我们三条线。互连2和3(一段的2pin连接3pin),连接两端的5pin。 [示例程序] 主程序

MFC串口通信编程详解解析

MFC串口通信编程介绍 主要介绍了用CreateFile(函数和WriteFile(函数读写串口的实例,以及设置串口属性的实例. 在工业控制中,工控机(一般都基于Windows平台经常需要与智能仪表通过串口 进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点.每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答. 在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件,这种方法程序简单,但欠灵活.其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活.下面只介绍API串口通信部分. 串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步操作方式.同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中, 虽然不会阻塞主线程,但是仍然会阻塞监听线程;而重叠操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞. 无论哪种操作方式,一般都通过四个步骤来完成: (1打开串口 (2配置串口 (3读写串口 (4关闭串口

一打开串口 Win32系统把文件的概念进行了扩展.无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的.该函数的原型为: HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile; ?lpFileName:将要打开的串口逻辑名,如“COM1”; ?dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列; ?dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为0; ?lpSecurityAttributes:引用安全性属性结构,缺省值为NULL; ?dwCreationDistribution:创建标志,对串口操作该参数必须置为 OPEN_EXISTING; ?dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值为FILE_FLAG_OVERLAPPED,表示使用异步的I/O;该值为0,表示同步I/O操 作;

西门子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. “发送完中断”中断子程序

VC++串口通信编程

在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。串口通信方便易行,应用广泛。 一般情况下,工控机和各智能仪表通过RS485总线进行通信。RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点。每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答。 在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX 控件,这种方法程序简单,但欠灵活。其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。本文我们只介绍API串口通信部分。 串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步操作方式)。同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程);而重叠操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞。 无论那种操作方式,一般都通过四个步骤来完成: (1)打开串口 (2)配置串口 (3)读写串口 (4)关闭串口 (1)打开串口 Win32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。该函数的原型为: HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); ?lpFileName:将要打开的串口逻辑名,如“COM1”; ?dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列; ?dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为0; ?lpSecurityAttributes:引用安全性属性结构,缺省值为NULL; ?dwCreationDistribution:创建标志,对串口操作该参数必须置为OPEN_EXISTING; ?dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值为FILE_FLAG_OVERLAPPED,表示使用异步的I/O;该值为0,表示同 步I/O操作; ?hTemplateFile:对串口而言该参数必须置为NULL;

西门子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

相关主题