利用RCM2200实现以太网与异步串口的通信(一)
- 格式:docx
- 大小:23.15 KB
- 文档页数:10
多个S7-200 站通过SIMATIC NET OPC Server 建立S7连接与WinCC 之间进行通信配备 CP 243-1 的 CPU 22x 可与其它 S7-200、S7-300 和 S7-400 系统及 OPC 服务器进 行通信。
除 STEP 7 Micro/WIN 连接外,最多还可以建立 8 个连接。
例:PC 站 IP :192.168.0.46 本地TSAP :10.11对应S7-200 IP :192.168.0.47 本地TSAP :11.11对应S7-200 IP :192.168.0.48 本地TSAP :12.11对应S7-200 IP :192.168.0.49 本地TSAP :13.11对应S7-200 IP :192.168.0.50 伙伴(远程) TSAP :10.00 例:CP 243-1 IP :192.168.0.47 本地TSAP :10.00 远程TSAP :10.11 例:CP 243-1IP :192.168.0.48本地TSAP :10.00远程TSAP :11.11IP :192.168.0.49 本地TSAP :10.00 远程TSAP :12.11 IP :192.168.0.50 本地TSAP :10.00 远程TSAP :13.11实现通信之前要求有下列组件:S7-200部分•STEP 7 - Micro / WIN 3.2 + SP1或更高版本(截至2013年最新版本为4.0 SP9) 注:用高版本打开的项目无法用低版本打开,即不能向下兼容。
•PC/PPI电缆或一个带MPI电缆的CP 5611/5511•或PC Adapter USB (与S7-200通讯方法见S7-200配置步骤1))•下列类型的CPU 22x- 不低于1.10版本的CPU 222或- 不低于1.10版本的CPU 224或- 不低于1.00版本的CPU 226或- 1.00 或更高版本的CPU 226XM•CP 243-1(6GK7 243-1-1EX00-0XE0)PC站部分•拥有Ethernet网卡的PC•SIMATIC NET CD 07/2001(截至2013年最新NET版本WinXP下支持2008版本,Win7 32bit、64bit下支持2010版本)•WinCC V5.1或更高版本(截至2013年最新WinCC版本为7.2)•带网络连接电缆的集线器或直接连接电缆一)S7-200端配置步骤:1)通过PC Adapter USB配置CP 243-1:注:由于现在PC机COM口非常少,在此仅介绍使用PC Adapter USB连接S7-200配置CP 243-1。
1、基本知识:1、-- 异步串行通信数据帧格式如下:起始位为‘0’,停止位为1-2位‘1’;奇偶校验位为可选,数据为5-8位可选。
2、波特率指的是每秒钟发送的字符(一位数据位)的个数,1B=1b/s。
如波特率为9600B,那么发送一个数据位所需要的时间为1/9600 s;发送/接收时钟的频率与波特率的关系为:发送/接收时钟的频率= n x发送/接收波特率。
其中n = 1 、16、64;我们在这里取n = 16 ;即对每一位数据都采样16次。
2、功能实现-- 本模块的功能是验证实现和PC机进行基本的串口通信的功能。
需要在PC机上安装一个串口调试工具来验证程序的功能。
程序实现了一个收发一帧10个bit(即无奇偶校验位)的串口控制器,10个bit是1位起始位,8个数据位,1个结束位。
程序分为三个模块:时钟分频模块,接收数据模块,发送数据模块。
具体程序代码为:library IEEE;use IEEE.STD_LOGIC_1164.ALL;-- Uncomment the following library declaration if using-- arithmetic functions with Signed or Unsigned values--use IEEE.NUMERIC_STD.ALL;-- Uncomment the following library declaration if instantiating-- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity uart isport( CLK50M : in std_logic;reset : in std_logic;uart_tx : out std_logic;uart_rx : in std_logic);end uart;architecture Behavioral of uart issignal div_clk50M :std_logic; ----分频后的时钟信号s ignal rx_data : std_logic_vector(7 downto 0); --- 接收数据缓存s ignal tx_data : std_logic_vector(7 downto 0); ----发送数据缓存s ignal data_buf: std_logic_vector(7 downto 0); --- 接收数据存储t ype state_rx is (rx_idle,rx_start,rx_sample,rx_stop); ---接收状态机s ignal rx_state : state_rx := rx_idle;t ype state_tx is (tx_idle,tx_start,tx_send,tx_stop); --发送状态机s ignal tx_state : state_tx := tx_idle;s ignal send_enable : std_logic :='0';begin--- --------CLK_Div module---------------------Bauds = 9600B clk=50M division factor = 50M/(9600x16)=325---------------------------------------------CLK_DIV: process(CLK50M,reset)variable div_count : integer :=0; -----分频系数变量beginif(reset='1') then div_clk50M <='0'; div_count :=0;elsif(rising_edge(CLK50M)) thenif div_count>=325 then div_clk50M <= '0'; div_count :=0;elsif div_count>=162 thendiv_count := div_count + 1;div_clk50M <= '1';else div_count :=0; div_clk50M <= '0';end if;end if;end process CLK_DIV;-----------------------------------------------------------DATA Receive module------------DATA_R : process(div_clk50M,reset)variable rx_count : integer :=0; -- 实现每16个时钟采样一次的中间变量。
第4章异步串行通信本章导读:目前几乎所有的台式电脑都带有9芯的异步串行通信口,简称串行口或COM 口.由于历史的原因,通常所说的串行通信就是指异步串行通信。
USB、以太网等也用串行方式通信,但与这里所说的异步串行通信物理机制不同。
有的台式电脑带有两个串行口: COM1 口和COM2 口,部分笔记本电脑也带有串行口。
随着 USB接口的普及,串行口的地位逐渐降低,但是作为设备间简便的通信方式,在相当长的时间内,串行口还不会消失,在市场上也可很容易购买到USB到串行口的转接器因为简单且常用的串行通信只需要三根线(发送线、接收线和地线),所以串行通信仍然是MCU与外界通信的简便方式之一。
实现异步串行通信功能的模块在一部分MCU中被称为通用异步收发器(Universal Asynch¬ronous Receiver/Transmitters, UART ),在另一些 MCU 中被称为串行通信接口( Serial Communication Interface, SCI)。
串行通信接口可以将终端或个人计算机连接到MCU,也可将几个分散的 MCU连接成通信网络,本章的主要知识点有①阐述了串口相关的基础知识;②描述了K60串口糢块的功能概要;③介绍了串口模块驱动构件编程时涉及的相关寄存器;④设计并封装了串行通信的驱动构件;⑤给出第一个中断例程的执行过程和设计流程。
本章介绍的K60UART模块的工作原理以及编程实例,这些编程实例都使用了基于构件的编程思想,读者在阅读时可以仔细体会,以求得对编程方法有更深刻的理解本章所出现的UART 字眼,在没有其他说明的情况下,都是特指K60的UART模块,本章串口驱动编程涉及的寄存器全部给出其详细介绍,目的是让读者对嵌入式底层驱动编程设计的寄存器有个直观的了解,以后各章节将不再给出相关寄存器的详细介绍。
4.1异步串行通信的基础知识本节简要概括了串行通信中常用的基本概念,为学习MCU的串行接口编程做准备。
多台S7-200SMART系列PLC之间的以太网通信一、以太网通信的概念和认识200 SMART PLC 上自带了一个RJ45的通讯网口,还有一个RS485(以太网)的串口,在这两个通讯口中,均能实现设备与设备之间的通信,以太网我们常用的有给CPU上下载程序及固件升级等。
除此以外,还可以实现设备与设备之间的以太网通信,(比如触摸屏、组态王等)实现两个或多个PLC之间的数据交换;以太网的通信传输速度比自由口等其他串口通信速率要快,一次最多可传输200个字节的数据西门子与西门子设备之间的通信更多的是走S7通信,但如果西门子需要和其他品牌的设备通信时,S7通信就无法满足了;此时可使用TCP/IP、UDP、MODBUS TCP等。
在200 SMART PLC中,固件版本在2.2 以上时就增加了TCP/IP、UDP等(开放式通信)SMART PLC和其他设备做通信时,分本地站和远程站。
远程站无需编写通信程序。
本地站类似串口通信的主站,远程站类似从站;区别在于串口通信需要发送通信请求,而开放式通信是时刻进行数据交换的二、以太网通信的具体操作200SMART系列PLC之间的以太网通信,两台PLCC之间要实现以太网通信的话固件版本一定要在2.0 以上才行;要实现以太网通信我们可以通过两种方式去完成:一是通过编程的方式,编程方式灵活;二是通过向导的方式。
要实现PLC之间通过以太网进行数据交往,可使用GET(读)/PUT(写)操作配置;GET/PUT操作配置通过向导的方式进行配置:1、分别对本地站和远程站PLC进行硬件组态,配备好IP地址(目的是让需要建立通信的PLC在同一个网段)2、在本地站中使用GET/PUT向导配置通信程序,远程站中不需要编写任何通信程序选择操作向导:一个操作项就是一个读或写的操作;一个操作针对一个PLC,最多添加24个一个PLC做本地站的时候可最多带8个远程站PLC ,同时一个本地站的PLC也可以响应8个远程站的请求。
一:TCP 协议通讯(一)S7 200 SMART之间的TCP通讯TCP是一个因特网核心协议。
在通过以太网通信的主机上运行的应用程序之间,TCP 提供了可靠、有序并能够进行错误校验的消息发送功能。
TCP 能保证接收和发送的所有字节内容和顺序完全相同。
TCP 协议在主动设备(发起连接的设备)和被动设备(接受连接的设备)之间创建连接。
一旦连接建立,任一方均可发起数据传送。
TCP协议是一种"流"协议。
这意味着消息中不存在结束标志。
所有接收到的消息均被认为是数据流的一部分。
S7 200 SMART与之间的TCP通讯可以通过两边调用OUC(开放式用户通讯)指令库中的TCP_CONNECT、TCP_SEND、TCP_RECV、DISCONNECT指令来实现。
图1.开放式用户通讯库开放式用户通信库需要使用50 个字节的V 存储器。
开放式的用户通讯连接资源包括8个主动连接和8个被动连接。
只可从主程序或中断例程中调用库函数,但不可同时从这两个程序中调用。
所需条件:1、软件版本:STEP 7-Micro/WIN SMART V2.22、SMART CPU固件版本:V2.23、通讯硬件:TP电缆(以太网电缆)所完成的通讯任务:将作为客户端的PLC(IP地址为192.168.0.101)中VB0-VB3的数据传送到作为服务器端的PLC(IP地址为192.168.0.102)的VB2000-VB2003中。
S7-200 SMART 客户端编程1、设置本机IP地址在客户端设置IP地址为192.168.0.101图2.设置IP地址2、建立TCP连接调用TCP_CONNECT指令建立TCP连接。
设置连接伙伴地址为192.168.0.102,远端端口为2001,本地端口为5000,连接标识ID为1。
利用SM0.0使能Active,设置为主动连接。
图3.调用TCP_CONNECT指令指令的参数输入参数:EN :使能输入Req:沿触发Active :TURE=主动连接(客户端)FALSE=被动连接(服务器)ConnID:连接ID为连接标识符,可能范围为0-65534。
利用MSCOMM串口通信控件进行异步串行通信的VC程序设计一课程设计题目利用MSCOMM串口通信控件进行异步串行通信的VC程序设计二课程设计要求●环境要求:Windows95/98/2000/XP●功能要求:能将键盘上输入的数据发送到另一台计算机上;能将接收到的数据显示到屏幕窗口内;了解常用通信网络设备的操作和应用,掌握常用的通信协议的工作原理,能利用Visual C++、开发工具完成相应的通信程序的设计工作。
学习简明地介绍自己的设计工作。
三课程设计目的用Visual C++编程工具主机提供的接口,解决网络用户之间的交互式对话问题。
进一步深入掌握网络设计和通信程序的设计原理。
使学生对计算机通信网络的设计实现有较深的了解,培养较高的通信网络设计能力。
四程序思路硬件连接方面:数据的发送和接收由软件控制,不进行硬件握手,其连接方法如图真正需要互相连接的是RXD、TXD和GND;软件方面:串行端口的本质功能是作为CPU和串行设备间的编码转换器。
当数据从 CPU经过串行端口发送出去时,字节数据转换为串行的位。
在接收数据时,串行的位被转换为字节数据在Windows环境(Windows NT、Win98、Windows2000)下,串口是系统资源的一部分。
应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。
VC++ 6.0提供的MSComm控件通过串行端口发送和接收数据,为应用程序提供串行通信功能。
使用非常方便。
⑴.在当前的Workspace中插入MSComm控件。
Project菜单------>Add to Project---->Components and Controls----->RegisteredActiveX Controls--->选择Components: Microsoft Communications Control,version 6.0 插入到当前的Workspace中。
plc以太网口和触摸屏通讯接线PLC(Programmable Logic Controller)以太网口和触摸屏通讯接线在现代工业自动化领域中,PLC(可编程逻辑控制器)被广泛应用于各种生产过程的控制和监控系统中。
而以太网口和触摸屏则是PLC系统中重要的通讯设备。
本文将探讨PLC以太网口和触摸屏的通讯接线方式以及其在工业自动化中的应用。
PLC以太网口连接触摸屏的通讯接线方式有两种常见的方式:串行通讯和以太网通讯。
串行通讯主要是通过RS232或RS485接口实现,而以太网通讯则是通过以太网口进行数据传输。
根据不同的PLC厂家和型号,可能会有一些稍微不同的接线设置,但总体原则是一致的。
在常见的串行通讯接线方式中,PLC的串行通讯口与触摸屏的串行通讯口通过一对或多对接线进行连接。
其中,一对为数据接收线(RXD)和数据发送线(TXD),用于双方之间的数据传输;另外,还需要连接地线(GND)以确保电信号的稳定传输。
通过这种串行通讯方式,PLC可以向触摸屏发送控制命令,并接收触摸屏返回的数据,实现对触摸屏的控制。
而在以太网通讯接线方式中,PLC的以太网口与触摸屏的以太网口之间通过网线进行连接。
通常情况下,PLC和触摸屏会分别具有一个IP地址,通过这个IP地址进行网络通讯。
在接线时,需要将一端的网线连接到PLC的以太网口上,另一端连接到触摸屏的以太网口上。
通过这种以太网通讯方式,PLC和触摸屏之间可以高速、稳定地进行数据传输和通讯。
PLC以太网口和触摸屏通讯的接线方式主要取决于具体应用的要求和设备的兼容性。
在选择接线方式时,需要根据实际情况进行评估和决策。
例如,在一些需要长距离传输的场景中,以太网通讯可能更加适合;而在一些低速、较短距离传输的场景中,串行通讯则是一种较为简单和经济的选择。
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 AR T 串口参数CPU 本体集成通讯口通信信号板(S B C M 01)通讯口类型R S 485R S 485R 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信号 B4发送请求R T S (T T L )55V 返回逻辑地(5V 公共端)6+5V +5V ,通过100 O h m 电阻7+24V +24V8R S -485信号 A R S -485信号 A9不用10位协议选择(输入)金属壳屏蔽机壳接地表 3.通信信号板(P o r t 1)引脚定义通信信号板(S B C M 01)引脚标记R S 485R 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 /AR S 485-AR S 232-R x通信信号板通信信号板可以扩展 C P U 的通信端口,其安装位置如图 1所示。
plc两个网口通讯PLC(Programmable Logic Controller)是一种常见的自动化控制设备,用于实现对工业生产过程的监视和控制。
而PLC的通讯功能对于现代工业自动化来说至关重要,尤其是网络通讯。
本文将介绍PLC的两个网口通讯,探讨其原理、应用以及未来发展趋势。
一、PLC的两个网口通讯原理PLC的两个网口通讯是指PLC与其他外部设备进行信息交流和数据传输的过程。
一般而言,PLC通讯接口有RS232串行口和以太网口(Ethernet),它们分别代表了两种不同的通讯方式。
RS232串行口是PLC与其他设备之间传输数据的一种常见方式,其特点是传输距离短、速度慢,通常用于与较近的设备进行连接,如触摸屏、伺服控制器等。
而以太网口则具有传输速度快、稳定性好等特点,可以与远程设备进行数据交换。
二、PLC的两个网口通讯应用PLC的两个网口通讯在工业自动化领域具有广泛的应用。
下面将分别介绍两种通讯方式的应用情况。
1. RS232串行口的应用在较短距离的设备连接中,RS232串行口是一种经常使用的通讯方式。
例如,在生产线上,PLC可以通过RS232串行口与触摸屏进行通讯,实现对生产过程的监控和控制。
此外,还可以通过RS232串行口与伺服控制器、温度传感器等设备连接,实现对运动控制和环境监测的精确调控。
2. 以太网口的应用以太网口作为一种高速稳定的通讯方式,在现代工业自动化中得到广泛应用。
PLC可以通过以太网口与上位机、服务器以及其他PLC进行通讯,实现数据的共享和实时监视。
在生产过程中,通过以太网口的通讯,可以实现生产数据的采集和远程监控,提高生产效率和质量。
三、PLC两个网口通讯的发展趋势随着工业自动化的发展和智能制造的兴起,PLC的通讯方式也在不断演进。
未来,PLC两个网口通讯将有以下几个发展趋势。
1. 通讯速度提升随着生产过程的复杂性增加和数据量的不断增加,PLC的通讯速度需求也在不断提高。
使用串口的流程介绍串口是一种用于在计算机和外部设备之间进行数据传输的通信接口。
它是一种一对一的全双工通信方式,可以实现数据的收发。
本文将介绍使用串口进行数据通信的基本流程。
步骤使用串口进行数据通信的流程一般包括以下几个步骤:1.打开串口:首先需要打开串口以建立与外部设备的连接。
在打开串口之前,需要先确定要使用的串口号、波特率、数据位、停止位和校验方式等参数。
2.配置串口参数:在打开串口后,需要根据实际需求配置串口的各种参数。
可以通过串口的配置接口来设置波特率、数据位、停止位和校验方式等参数。
3.发送数据:配置完串口参数后,就可以向外部设备发送数据了。
可以通过串口的发送接口将数据发送给外部设备。
在发送数据之前,需要将要发送的数据准备好,并将其转换成适合串口发送的格式。
4.接收数据:在发送完数据后,可以通过串口的接收接口来接收外部设备发送的数据。
可以通过串口的接收缓冲区来获取接收到的数据。
5.处理数据:接收到数据后,还需要对其进行处理。
可以根据实际需求对接收到的数据进行解析、处理或显示等操作。
6.关闭串口:在完成数据通信后,需要关闭串口以释放资源。
可以通过串口的关闭接口来关闭串口。
注意事项在使用串口进行数据通信时,还需要注意以下几个事项:•串口参数配置要与外部设备保持一致:在配置串口参数时,需要与外部设备的参数保持一致,否则可能会导致通信失败。
•数据格式要一致:在发送和接收数据时,要确保数据的格式一致。
可以约定好数据的格式,并在发送和接收时进行相应的转换。
•错误处理:在使用串口进行数据通信时,难免会出现一些错误。
因此,需要在程序中加入错误处理的代码,以便及时发现并处理错误。
•建立通信协议:在使用串口进行数据通信时,建议制定一套通信协议,包括数据的格式、指令的定义等。
这样可以更好地进行数据交换和数据处理。
示例代码下面是一个使用Python语言进行串口数据通信的示例代码:import serial# 打开串口ser = serial.Serial('COM1', 9600, timeout=1)# 配置串口参数ser.bytesize =8ser.stopbits =1ser.parity ='N'# 发送数据ser.write(b'Hello World')# 接收数据data = ser.readline()print(data)# 关闭串口ser.close()总结使用串口进行数据通信时,需要按照一定的流程进行操作。
利用RCM2200实现以太网与异步串口的通信(一)摘要本文研究基于RCM2200嵌入式系统对网络和串口的编程技术。
介绍了RCM2200微控制器核心模块以及DynamicC软件开发环境,讲述了如何利用DynamicC语言通过RCM2200核心模块实现UDP报文和异步串口数据的互相转换。
DynamicC是与RCM2200配套使用的软件开发语言,它拥有丰富的库函数以便程序员编程时调用,结果表明,运用该语言能实现基于RCM2200以太网与异步串口之间的成功通信。
关键词嵌入式系统;RCM2200;UDP报文;串口通信1引言目前,嵌入式技术已经广泛渗入并应用到各领域,涉及到多种传统及现代技术,形成了前所未有的多学科、多领域的交叉与融合。
由Z-World 公司推出的RCM22001]是一款低成本的嵌入式微控制器核心模块,它采用DynamicC®2]这一专门为Z-World产品创建的集成的C编译器、编辑器、链接器、装载器和调试器,便于实现快速开发应用,加快产品投放到市场。
UDP协议3]4]是比较著名的传输层协议之一,它与TCP协议一样是基于IP协议的,但与TCP不同的是它不需要协议层提供质量保证,因此,在需要实时数据传输的情况下应用比较广泛。
并且,因为不提供质量保证,服务器没有必要一直处于等待状态,从而大大减轻了服务器的负担。
在某些情况下,还可以根据需要给UDP报文加上一些质量保证控制,有很大的灵活度。
在不远的将来,将设备与网络相连将成为一种趋势。
在诸如GPS串口数据网络收发以及某些语音传输、实时监控等多种场合,实现以太网与异步串口数据之间的通信是非常必要的。
本文介绍了一种基于RCM2200嵌入式微控制器核心模块利用UDP报文实现网络与串口互通的方法,可以迅速实现将串口与网络相连接。
2系统原理及功能RCM2200采用Rabbit半导体公司推出的高性能8位器件-Rabbit2000型微处理器;带RJ-45插口的内置10Base-T端口简化了网络连接,便于开发带以太网接口的监控、通讯设备;配备有4个串行口,方便扩展联接;拥有26根并行的I/O引线以及16根可设置的I/O引线,无须扩展即可完成一般的I/O任务;拥有256KFlash,128KSRAM,用于代码存储和数据存储;时间、日期、看门狗、定时器等一应俱全;且其采用双列直插式引脚,尺寸仅为59x41x22mm。
这种结构促进了嵌入式系统的快速开发,并可实现集成的以太网连接。
RCM2200系统的基本框架结构如图1所示。
图1RCM2200系统结构RCM2200采用DynamicC®语言进行软件开发,与标准C语言相比,DynamicC的改进和差异在于使得在功能强大的嵌入式系统上进行实时编程变得非常容易。
语言的扩展包括多任务和优先多任务的构造,当供电失败时,能够保护写入变量,能够写入到中断程序中去。
标准C函数库,特定板的外围驱动,芯片外围设备,以及其他的性能以源代码的形式包含在DynamicC中。
完全支持汇编语言,在对时间要求较高的应用中,汇编代码可以方便的与C代码混用。
在该开发系统中将RCM2200的以太网接口与当地局域网相连,选择一个串口与计算机的串口相连。
由以太网发送UDP报文给RCM2200微控制器核心模块经过处理后通过串口发送给计算机,由计算机串口发送数据给RCM2200微控制器核心模块经过处理后通过其上的网络口发送UDP报文给以太网,从而实现基于RCM2200以太网和串口之间的通信。
3UDP协议的实现UDP协议是比较著名的传输层协议之一,它使用IP作为网络层协议,为应用程序发送和接收数据报。
但是,它提供无连接服务,是不可靠传输。
因此,UDP报文主要用于需要实时数据传输的情况,一次传输少量的数据。
在某些对实时性要求很高的场合,利用UDP报文进行数据传输是非常必要的,但往往要采用一些可靠性方案,以防止有漏传、误传的现象发生。
3.1客户机/服务器程序设计模式客户机/服务器的程序设计模式在网络程序设计中被大量的应用。
这种设计模式将整个系统分为两大部分——服务器部分和客户机部分。
客户机向服务器提出请求,服务器对请求作相应的处理将结果返回给客户机。
根据不同的实际情况,客户机/服务器的通信存在对称和非对称两种方式。
在对称的方式下,通信的每一方都可能扮演主从角色;在非对称的方式下,一方不可改变的认为是主机,而另一方则是从机。
无论是对称的或是非对称的,当服务被提供时必然存在客户进程和服务进程。
基于UDP协议的通信既可采用对称方式也可采用非对称方式。
3.2数据报套接字套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。
它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
UDP协议支持数据报套接字。
这种套接字可以采用客户/服务器模式,以全双工方式工作,接收发送可以同时进行,但并不保证数据传输的可靠性、有序性和无重复性,需要由程序员负责管理数据报的排序和可靠性。
3.3使用DynamicC实现UDP报文的传输DynamicC提供了许多支持TCP/IP协议的库函数。
其中,DCRTCP.LIB是最主要的函数库。
下面将简要介绍UDP协议下的基本通信流程。
3.3.1调用本地初始化函数voidsock_init(void)该函数将使用默认配置初始化本地信息包驱动器以及DCRTCP.LIB函数库。
该函数必须在其他网络库函数被使用前进行调用。
3.3.2打开数据报套接字intudp_open(*s,lport,remote_IP,port,*data_handler())其中的参数解释如下:s:指向UDP套接字的指针;lport:本地协议端口;remote_IP:可接受的远地主机IP地址,如果该项为-1,则支持广播通信;port:可接受的远地进程协议端口,如果该项为-1,则为广播数据报;data_handler():如果接收到数据则调用该函数;该函数的返回值,如果成功返回非零,否则返回零值。
3.3.3接收远地主机发送的数据报intudp_recv(*s,*buf_recv,recv_len)当套接字初始化后用该函数扫描接收缓冲区,,察看是否有数据报到达。
其中,buf_recv:指向用于存放已到达数据报的数组的指针;recv_len:存放数据报的数组的大小。
如果接收到数据报则返回数据报的长度;否则返回-1。
3.3.4发送数据报给远地主机intudp_send(*s,*buf_send,send_len)调用该函数发送数据报给远地主机。
如果成功返回该数据报的长度,否则返回-1。
buf_send:指向待发送数据报的指针;send_len:待发送数据报的长度。
3.3.5网络信息处理函inttcp_tick(*s)该函数将察看网络连接状态,检查数据报的到达情况,处理新到数据报并重传丢失的数据报。
若出现网络连接被复位及套接字已关闭的情况或参量s为NULL,则返回值为零;否则返回非零值。
3.3.6关闭套接字voidsock_close(*s)当数据传送工作完成或传送过程中发生错误时,可调用该函数关闭套接字4串口通信的实现4.1RS232电平与TTL电平的转换PC机的串行接口是符合EIARS-232C规范的外部总线标准接口,而RCM2200配备有四个串行接口,都是采用TTL电平,因此两者之间必须进行电平转换。
以RCM2200的串行口C(位于核心模块的J4插槽上)为例,电平转换如图2所示。
图2RS232与TTL电平转换图4.2使用DynamicC实现串口数据的传输DynamicC提供了一些与计算机串行口进行通信的函数可供用户程序调用,下面简要介绍其中的一部分。
4.2.1打开串行接口intserXopen(bard)bard:长整型,每秒钟传送的比特数。
该函数用于打开RCM2200的串行接口,由于RCM2200核心模块拥有四个串行口,故X可根据需要取为A\B\C\D其中一个。
在调用该函数之前,还必须先定义串行口的输入输出缓冲区大小,通常情况下设定为2n-1,否则就采用默认值31,但在编译时会给出警告。
该函数的返回值:成功则为1,否则为0。
4.2.2读取PC机串行口数据intserXgetc()/*X=A|B|C|D*/程序可以调用该函数查询串行口是否有字符来到,如果有,返回该字符值;否则,返回值-1。
4.2.3发送数据到PC机串行口intserXputs(*s)intserXwrite(s,length)/*X=A|B|C|D*/这两个函数均可用于发送字符串给计算机的串行口,返回成功发送的字符数。
s:待发送字符串的首地址;length:待发送字符串的长度。
4.2.4关闭串行口voidserXclose()/*X=A|B|C|D*/该函数用于关闭已经打开的串行口。
5实现以太网与串口之间的通信5.1定义网络以及串口初始化数据在程序的开头,必须使用#define定义一些初始化数据,比如:RCM2200所使用的本地IP地址以及端口,与之通信的远地IP地址以及端口以及串口输入输出缓冲区的大小等等。
5.2主程序在主程序中调用PC机串口发送字符串给RCM2200经过处理后再由RCM2200发送UDP报文给以太网以及RCM2200接收以太网发送来的UDP报文后再送给计算机的串行口两个子程序。
main(){sock_init();//初始化网络库函数://打开串行口及网络套接字for(;;;){tcp_tick(NULL);//察看套接字状态init_comm();//网络发报文串口接收comm_init();//串口发数据网络接收}}5.3网络发报文串口接收子程序init_comm()使用库函数udp_recv查询RCM2200以太网接口是否有UDP报文来到,如果没有则返回主程序,否则将UDP报文存放到buf_init数组中,然后调用serCputs(buf_init)通过RCM2200的串行口C 发送到计算机的串行口。
值得一提的是,当RCM2200接收到了一次报文之后,它将自动关闭接收报文的套接字,因此,如果还想接受下一次发送的报文,必须再次调用函数udp_open打开该套接字。
5.4串口发字符串网络接收子程序comm_init()调用函数serCgetc()用于查询计算机的串行口是否有数据到来,如果没有则返回主程序,否则将接收到的字符存储到buf_comm数组中,直到检测到结束符到来,将字符串以UDP报文的形式通过函数udp_send发送给以太网。
如果发送成功,则返回主程序等待下一次数据的到来,否则关闭该套接字后重新打开再返回主程序等待。