串口网络编程
C语言实现串口通信

C语言实现串口通信在使用系统调用函数进行串口通信之前,需要打开串口设备并设置相关参数。
打开串口设备可以使用open(函数,设置串口参数可以使用termios结构体和tcsetattr(函数。
以下是一个简单的串口通信接收数据的示例代码:```c#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <unistd.h>#include <termios.h>int mainint fd; // 串口设备文件描述符char buff[255]; // 存储接收到的数据int len; // 接收到的数据长度//打开串口设备fd = open("/dev/ttyS0", O_RDONLY);if (fd < 0)perror("Failed to open serial port");return -1;}//设置串口参数struct termios options;tcgetattr(fd, &options);cfsetspeed(&options, B1200); // 设置波特率为1200 tcsetattr(fd, TCSANOW, &options);//接收数据while (1)len = read(fd, buff, sizeof(buff)); // 从串口读取数据if (len > 0)buff[len] = '\0'; // 将接收到的数据转为字符串printf("Received data: %s\n", buff);}}//关闭串口设备close(fd);return 0;```这段代码首先通过open(函数打开串口设备文件"/dev/ttyS0",然后使用tcgetattr(函数获取当前设置的串口参数,接着使用cfsetspeed(函数设置波特率为1200,最后使用tcsetattr(函数将设置好的串口参数写回。
java 串口通信案例

java 串口通信案例Java串口通信是指使用Java编程语言实现与串口设备之间的数据通信。
串口通信在很多应用场景中都有广泛的应用,比如物联网、工业自动化、智能家居等领域。
本文将列举十个以Java串口通信为题的案例,介绍其实现方法和应用场景。
1. 串口读取数据通过Java编程语言实现串口读取数据的功能,可以使用Java的串口通信库,如RXTX、JavaComm等。
首先需要打开串口,并设置串口参数,然后通过监听串口数据的方式实时读取串口传入的数据。
这个案例适用于需要实时监控串口设备数据的应用场景,比如环境监测。
2. 串口发送数据通过Java编程语言实现串口发送数据的功能,可以使用Java的串口通信库。
首先需要打开串口,并设置串口参数,然后通过写入数据的方式将数据发送到串口设备。
这个案例适用于需要向串口设备发送指令或数据的应用场景,比如控制外部设备。
3. 串口数据解析通过Java编程语言实现串口数据解析的功能,可以将从串口读取的原始数据进行解析,提取出有用的信息。
可以根据数据格式进行解析,比如按照特定的协议解析数据。
这个案例适用于需要对串口设备传输的数据进行处理和分析的应用场景。
4. 串口数据存储通过Java编程语言实现串口数据存储的功能,可以将从串口读取的数据保存到本地文件或数据库中。
可以根据需求选择适当的存储方式,比如文本文件、二进制文件或数据库。
这个案例适用于需要对串口设备传输的数据进行长期存储和分析的应用场景。
5. 串口数据转发通过Java编程语言实现串口数据转发的功能,可以将从一个串口读取的数据转发到另一个串口。
可以实现串口设备之间的数据交互,比如串口设备之间的数据通信或设备之间的数据同步。
这个案例适用于需要多个串口设备之间进行数据交互的应用场景。
6. 串口数据监控通过Java编程语言实现串口数据监控的功能,可以监控串口设备的状态和传输数据。
可以实时显示串口设备的连接状态、波特率、数据位、停止位等信息,并实时显示串口传输的数据。
计算机网络实验RS232串口通信程序的编写

计算机网络实验RS232串口通信程序的编写RS232是一种常见的串行通信接口,用于在计算机和其他外部设备之间传输数据。
它广泛应用于各种设备和应用程序,如串口调试工具、点阵打印机等。
本文将介绍如何编写一个基本的RS232串口通信程序。
我们将使用C 语言和Linux操作系统来演示。
在开始编写程序之前,我们需要了解一些RS232串口的基本概念和通信协议。
RS232串口由发送线(TX)、接收线(RX)、控制线(如RTS、CTS、DTR和DSR)等组成。
通信时,发送方将数据从TX线发送到接收方的RX线,然后接收方通过RX线接收数据。
以下是一个简单的RS232串口通信程序示例:```c#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <termios.h>#include <unistd.h>int maiint fd = open("/dev/ttyS0", O_RDWR , O_NOCTTY); // 打开串口设备if (fd == -1)perror("打开串口失败");exit(1);}struct termios options;tcgetattr(fd, &options); // 获取当前串口设置//设置波特率为9600cfsetispeed(&options, B9600);cfsetospeed(&options, B9600);//设置数据位为8位,无奇偶校验,停止位为1位options.c_cflag &= ~PARENB;options.c_cflag &= ~CSTOPB;options.c_cflag &= ~CSIZE;options.c_cflag ,= CS8;//更新串口设置tcsetattr(fd, TCSANOW, &options);char buffer[255];while (1)ssize_t len = read(fd, buffer, sizeof(buffer)); // 从串口读取数据if (len == -1)perror("读取串口失败");exit(1);}printf("接收到数据:%.*s\n", len, buffer);ssize_t nwrite = write(fd, buffer, len); // 向串口写入数据if (nwrite == -1)perror("写入串口失败");exit(1);}}close(fd);return 0;```该程序首先打开串口设备`/dev/ttyS0`,如果打开失败则会输出错误信息并退出。
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;同步I/O方式打开串口的示例代码:HANDLE hCom; //全局变量,串口句柄hCom=CreateFile("COM1",//COM1口GENERIC_READ|GENERIC_WRITE, //允许读和写0, //独占方式NULL,OPEN_EXISTING, //打开而不是创建0, //同步方式NULL);if(hCom==(HANDLE)-1){AfxMessageBox("打开COM失败!");return FALSE;}return TRUE;重叠I/O打开串口的示例代码:HANDLE hCom; //全局变量,串口句柄hCom =CreateFile("COM1", //COM1口GENERIC_READ|GENERIC_WRITE, //允许读和写0, //独占方式NULL,OPEN_EXISTING, //打开而不是创建FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, //重叠方式NULL);if(hCom ==INVALID_HANDLE_VALUE){AfxMessageBox("打开COM失败!");return FALSE;}return TRUE;(2)、配置串口在打开通讯设备句柄后,常常需要对串口进行一些初始化配置工作。
VC++串口通信编程详解

在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。
串口通信方便易行,应用广泛。
一般情况下,工控机和各智能仪表通过RS485总线进行通信。
RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点。
每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答。
在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件,这种方法程序简单,但欠灵活。
其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。
本文我们只介绍API串口通信部分。
串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步操作方式)。
同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程);而重叠操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞。
无论那种操作方式,一般都通过四个步骤来完成:(1)打开串口(2)配置串口(3)读写串口(4)关闭串口1、打开串口Win32系统把文件的概念进行了扩展。
无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。
该函数的原型为:C++代码HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWOR D dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dw CreationDistribution, 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。
串口接收数据包(协议带帧头帧尾且帧头帧尾都为两个字节)的编程实现方法

串口接收数据包(协议带帧头帧尾且帧头帧尾都为两个字节)的编程实现方法要实现串口接收带有帧头和帧尾的数据包,可以按照以下步骤进行编程:1. 配置串口通信参数:设置串口的波特率、数据位、停止位和奇偶校验位等参数。
2. 初始化接收缓冲区:创建一个缓冲区用于存储接收到的数据包。
3. 等待接收数据:通过串口的接收中断或者轮询方式等待接收数据。
当接收到数据时,将数据保存到接收缓冲区中。
4. 解析数据包:从接收缓冲区中读取数据,并根据帧头和帧尾进行解析。
可以使用状态机或者字符串匹配等方法,找到完整的数据包。
5. 处理数据:对解析得到的完整数据包进行处理。
根据协议的要求,可以提取或者操作数据包的各个字段。
下面是一个示例代码,利用状态机实现串口接收带有帧头和帧尾的数据包解析:```c#define FRAME_HEAD1 0xAA#define FRAME_HEAD2 0xBB#define FRAME_TAIL1 0xCC#define FRAME_TAIL2 0xDD#define BUFFER_SIZE 100enum State {STATE_IDLE,STATE_HEAD1,STATE_HEAD2,STATE_DATA,STATE_TAIL1,STATE_TAIL2};unsigned char buffer[BUFFER_SIZE];unsigned int bufferIndex = 0;enum State currentState = STATE_IDLE;void processPacket(unsigned char *packet, unsigned int length) { // 处理接收到的完整数据包// ...}void receiveData(unsigned char data) {switch(currentState) {case STATE_IDLE:if(data == FRAME_HEAD1) {currentState = STATE_HEAD1;}break;case STATE_HEAD1:if(data == FRAME_HEAD2) {currentState = STATE_HEAD2;} else {currentState = STATE_IDLE; // 未匹配到帧头,返回初始状态}break;case STATE_HEAD2:buffer[bufferIndex++] = data;currentState = STATE_DATA;break;case STATE_DATA:buffer[bufferIndex++] = data;if(data == FRAME_TAIL1) {currentState = STATE_TAIL1;}break;case STATE_TAIL1:if(data == FRAME_TAIL2) {currentState = STATE_TAIL2;} else {currentState = STATE_DATA; // 未匹配到帧尾,返回数据状态}break;case STATE_TAIL2:processPacket(buffer, bufferIndex); // 处理完整数据包bufferIndex = 0; // 重置缓冲区索引currentState = STATE_IDLE;break;}}void receiveSerialData() {if(Serial.available()) {unsigned char data = Serial.read();receiveData(data);}}void setup() {Serial.begin(9600);}void loop() {receiveSerialData();}```以上是一个简单的示例代码,根据实际需求可能需要进行适当修改。
c语言串口编程实例

c语言串口编程实例摘要:1.串口编程基础2.C 语言串口编程步骤3.C 语言串口编程实例4.实例详解5.总结正文:一、串口编程基础串口编程是指通过计算机串行接口进行数据通信的编程方式。
串口(Serial Port)是一种计算机硬件接口,可以通过串行通信传输数据。
与并行通信相比,串行通信只需一条数据线,传输速度较慢,但具有线路简单、成本低的优点。
因此,串口编程在电子设备、计算机外设、通信设备等领域有广泛的应用。
二、C 语言串口编程步骤1.包含头文件:在使用C 语言进行串口编程时,首先需要包含头文件`<reg52.h>`或`<intrins.h>`。
2.配置串口:配置串口包括设置波特率、数据位、停止位、奇偶校验等参数。
3.初始化串口:初始化串口主要是初始化串口硬件,如配置UART(通用异步收发器)等。
4.打开串口:打开串口是指使能串口通信功能,以便数据传输。
5.读写串口:通过`in`和`out`语句实现数据的输入输出。
6.关闭串口:在数据传输完成后,需要关闭串口以节省资源。
7.串口通信:通过循环寄存器、缓存寄存器或FIFO(先进先出)等方法实现数据的收发。
三、C 语言串口编程实例以下是一个简单的C 语言串口编程实例,该实例通过串口发送数据“Hello, World!”:```c#include <reg52.h>#include <intrins.h>sbit UART_TXD = P3^1; // 配置UART TXD 引脚void init_uart(); // 初始化UART 函数void send_data(unsigned char dat); // 发送数据函数void main(){init_uart(); // 初始化UARTsend_data("H"); // 发送字符"H"send_data("e"); // 发送字符"e"send_data("l"); // 发送字符"l"send_data("l"); // 发送字符"o"send_data(" "); // 发送空格send_data("W"); // 发送字符"W"send_data("o"); // 发送字符"r"send_data("r"); // 发送字符"l"send_data("d"); // 发送字符"d"while(1); // 循环等待}void init_uart() // 初始化UART 函数{TMOD = 0x20; // 设置定时器1 为工作状态TH1 = 0xfd; // 设置定时器1 的计数值TL1 = 0xfd; // 设置定时器1 的计数值TR1 = 1; // 使能定时器1SCON = 0x40; // 设置串口工作状态ES = 0; // 开总中断EA = 1; // 开总中断允许}void send_data(unsigned char dat) // 发送数据函数{SBUF = dat; // 将数据存入缓存寄存器while(!TI); // 等待发送缓存清空TI = 0; // 清空发送缓存}```四、实例详解1.配置串口:通过设置UART TXD 引脚为P3.1,确定波特率、数据位、停止位和奇偶校验等参数。
vb串口编程实例

VB串口编程实例介绍VB(Visual Basic)是一种基于对象的编程语言,可用于开发Windows应用程序。
串口编程是指通过串行通信接口与外部设备进行数据交互。
本文将介绍如何使用VB进行串口编程,以实现与外部设备的通信。
前提条件在开始编写VB串口程序之前,需要确保以下条件已满足: - 安装了Visual Studio开发环境,可以选择最新版本的Visual Studio Community免费版。
- 确保计算机上有可用的串口(如COM1、COM2等)或USB转串口适配器。
步骤1. 创建新项目打开Visual Studio,选择创建一个新的VB Windows应用程序项目。
2. 添加控件在窗体上添加以下控件: - 一个ListBox控件用于显示接收到的数据。
- 两个Button控件分别用于打开和关闭串口。
- 一个ComboBox控件用于选择串口号。
- 一个TextBox控件用于输入要发送的数据。
- 一个Button控件用于发送数据。
3. 设置串口属性在窗体代码中添加如下代码:Imports System.IO.PortsPublic Class Form1Dim serialPort As New SerialPort()Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Lo ad' 获取可用的串口号并添加到ComboBox中Dim ports As String() = SerialPort.GetPortNames()ComboBox1.Items.AddRange(ports)End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click' 打开串口TryserialPort.PortName = ComboBox1.SelectedItem.ToString()serialPort.BaudRate = 9600serialPort.Parity = Parity.NoneserialPort.DataBits = 8serialPort.StopBits = StopBits.OneserialPort.Open()Button1.Enabled = FalseButton2.Enabled = TrueCatch ex As ExceptionMessageBox.Show("无法打开串口:" + ex.Message)End TryEnd SubPrivate Sub Button2_Click(sender As Object, e As EventArgs) Handles Button 2.Click' 关闭串口TryserialPort.Close()Button1.Enabled = TrueButton2.Enabled = FalseCatch ex As ExceptionMessageBox.Show("无法关闭串口:" + ex.Message)End TryEnd SubEnd Class4. 接收数据和发送数据在窗体代码中添加如下代码:Imports System.IO.PortsPublic Class Form1Dim serialPort As New SerialPort()Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Lo ad' 获取可用的串口号并添加到ComboBox中Dim ports As String() = SerialPort.GetPortNames()ComboBox1.Items.AddRange(ports)End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button 1.Click' 打开串口' 省略部分代码...AddHandler serialPort.DataReceived, AddressOf DataReceivedHandlerserialPort.Open()Button1.Enabled = FalseButton2.Enabled = TrueEnd SubPrivate Sub Button2_Click(sender As Object, e As EventArgs) Handles Button 2.Click' 关闭串口' 省略部分代码...RemoveHandler serialPort.DataReceived, AddressOf DataReceivedHandler serialPort.Close()Button1.Enabled = TrueButton2.Enabled = FalseEnd SubPrivate Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedE ventArgs)' 接收数据并显示在ListBox中Dim data As String = serialPort.ReadLine()ListBox1.Invoke(Sub() ListBox1.Items.Add(data))End SubPrivate Sub Button3_Click(sender As Object, e As EventArgs) Handles Button 3.Click' 发送数据If serialPort.IsOpen ThenDim dataToSend As String = TextBox1.TextserialPort.WriteLine(dataToSend)TextBox1.Clear()ElseMessageBox.Show("请先打开串口")End IfEnd SubEnd Class5. 运行程序点击运行按钮,程序将打开一个窗口,其中包含串口选择、打开/关闭串口、接收数据和发送数据的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
联系。因此,个人计算机向主计算机传输数据时,同时要考
虑硬件和软件握手。
19
例如:在个人计算机通过调制解调器向主计算机发送数据时, 只有在调制解调器DSR(有时可能使用CD)线电位变高,且没 有收到来自主计算机的“停止传输”软件信号时,才送出数 据。
一些计算机会自动监测硬件握手信号,所以应用程序只
需要处理软件握手信号即可。但这种情况并不等于硬件握手 不存在,依然是软硬结合的握手。
在数据传输中,如果发送端的发送速度大于接收端的接收速
度,同时接收端处理数据的速度不够快,那么接收端的缓冲 区必定在一定时间后溢出,从而造成以后发送过来的数据不 能进入缓冲区而丢失。 15
发送端何时可以继续发送数据,何时必须暂停发送,从而让 接收端有时间处理数据,则必须靠握手信号来解决这个问题。 例如,打印机和计算机进行通信时,一些打印机的打印速度 可能跟不上计算机发送数据的速度,就必须通过握手信号通
在这里选择COM。
(3) 在弹出的窗口中设置相关的参数,如图3-1所示。
23
图3-1 超级终端参数设置
24
(4) 单击“确定”按钮后,就会出现一个工作窗口,这说 明已经连接到需要连接的设备上。 设置完成后,会出现连接提示,包括连接时间、终端类 型、连接参数等。如果串口不存在,或已被其他设备使用,
10
只有当DSR和DTR都处于有效(ON)状态时,才能在DTE 和DCE之间进行传输操作。若DTE要发送数据,则预先将 DTR线置成有效(ON)状态,等CTS线上收到有效(ON)状态的 回答后,才能在TXD线上发送串行数据。这种顺序的规定对
半双工的通信线路特别有用,因为半双工的通信确定DCE已
由接收端向改为发送端向,这时线路才能开始发送。从计算 机的角度来看这些引脚的通信状况,流进计算机端的,可以
动化的实现技术变得简单化。
21
3.2.1 串行通信软件工具
除了用户自己动手编写串口通信软件之外,目前也有一
些现成的串口通信软件工具。
1.超级终端程序
超级终端程序是Windows操作系统自带的串口通信软件,
用户可以选择“开始/程序/附件/通信/超级终端”命令来调用 它。使用超级终端程序需要对其进行设置,设置步骤如下: (1) 首先按照“开始/程序/附件/通信”顺序,执行“超级 终端”操作(对应系统目录“C:\Program Files\Windows NT”下 的hypertrm.exe应用程序),
8
通过RS-232C接口连接调制解调器(Modem)可远距离地与其他 计算机通信;将RS-232C接口转换为RS-422或RS-485接口, 可实现一台个人计算机与多台现场设备之间的通信。 RS-232的每一引脚都有它的作用,也有其信号流动的方向,
各引脚的信号功能描述见表3-1。原来的RS-232是用来连接调
度提高到10 Mb/s,速率低于100 kb/s时的传输距离延长到
4000英尺(1英尺=0.3048 m),并允许在一条平衡总线上连接 最多10个接收器。RS-422是一种单机发送、多机接收的单向、
平衡传输规范。
12
3.RS-485
为扩展应用范围,EIA又于1983年在RS-422基础上制定
了RS-485标准,增加了多点、双向通信能力,即允许多个发 送器连接到同一条总线上,同时增加了发送器的驱动能力和
232/422/485,其技术简单成熟,性能可靠,所要求的软硬件
环境和条件都很低,是一种最简单的建立网络连接的方式。
3
3.1.1 串行通信的模式
通过单线传输信息是串行数据通信的基础,数据通常是
在两个站(点对点)之间进行传输的。按照数据流的方向,串 行通信可分成三种传输模式:单工、半双工、全双工。
1.单工模式
第3章 串口网络编程
3.1 串行通信概述 3.2 串口通信程序设计
3.3 串口通信程序设计
小结
1
串口通信是一种通信条件要求最低却十分重要的网络通 信模式,网络设备调试、极端条件下的网络通信都可以通过 串口来实现,特别是对一些便携式、小型设备,串口通信可 能是它们的唯一通信手段。串口通信处于OSI模型的数据链
对于软件握手,现在已经建立了一些标准协议,其中最
常用的是通信协议。通信协议是指通信双方的一种约定,包 括对数据格式、同步方式、传输速度、传输步骤、检/纠错方
式以及控制字符定义等问题进行统一规定,通信双方必须共
同遵守,也叫做通信控制规程或传输控制规程,它属于OSI 七层参考模型中的数据链路层。
18
3.软硬结合握手
可以采用RS-485总线。
14
3.1.3 串行通信握手协议
串行通信需要使用握手协议保持数据收发双方的同步,
握手协议靠握手信号实现。握手信号实际上就是控制信号, 用来控制数据的传输。通过握手信号,发送端可以得知接收
端是否有数据要发送。接收端通过握手信号通知发送端它是
否已经准备好了接收信号。握手信号遵循某种协议。当发送 端和接收端处理数据的速度不一样时,可能会造成数据丢失。
22
会出现一个本次联机的名称设置窗口(第一次使用该应用程序 时,可能还会被要求设置国家、区号等属性参数),在其中输 入名称并选择一个代表图标。此名称通常应使用易记的名称 来命名,以后再进行联机操作时,只要加载该名称,一切其
它的设置就会恢复。
(2) 然后在出现的界面中选择所要连接的设备。可以根据 需要连接相应的设备,可选得选项包括:COM、TCP/IP等,
知计算机暂停发送数据。通常,串行通信握手的协议可以是
硬件握手、软件握手或二者的结合,具体如下所述。
16
1.硬件握手
在硬件握手中,发送端通过将某一条导线拉到高电平或
者低电平,以表示发送端可以发送数据。接收端已经准备好 接收数据之后,也把某一个导线拉到高电平或者是低电平,
以通知发送端,发送端一直在检测这个信号。接收端可以在
机)和数据通信设备(DCE,如Modem)的接口标准。RS-232C 是PC与通信工业中应用最广泛的一种串行接口,PC上的
COM1和COM2大多是RS-232C接口。
利用RS-232C串行通信接口可实现两台个人计算机之间 点对点的通信;通过RS-232C接口可与其他外设(如打印机、
逻辑分析仪、智能调节仪、PLC等)近距离串行连接
20
3.2 串口通信程序设计
现在的产品若要自动化,一定要提供一个能与计算机进
行通信的通道。最简单的方式就是在产品内部烧上一颗单芯 片,利用单芯片上的串行通信功能进行自动化的工作,由于
计算机中的串口是必备的通道,且从价格及技术上来说是最
能被厂商所接受的,因此,市面上很多自动化产品也就加上 了串行通信的功能,从而扩大了产品的使用领域,使产品自
在使用个人计算机器进行基于串口的远程配置的情 况),一般会采用软硬结合的握手。这种握手同时采用了硬件
握手和软件握手:一方面,个人计算机与调制解调器、主计
算机与调制解调器之间,使用硬件握手方法进行联系;另一 方面,主计算机和个人计算机之间将使用软件握手方法进行
目前,常用的串口标准有RS-232C、RS-422、RS-485标
准。
1.RS-232C
RS-232C是美国电子工业协会(Electronic Industry
Association,EIA)于1962年公布并于1969年修订的串行接口 标准,它已经成为了国际上通用的标准。1987年1月,RS232C经修改后,正式改名为EIA-232D。由于标准修改内容并 不多,因此现在很多厂商仍使用旧的。RS-232C标准(协议)的 全称是EIA-RS-232C标准,
信息传输效率也较低。
5
3.全双工模式
全双工数据通信分别由两根可以在两个不同的站点同时
发送和接收的传输线进行传输,通信双方都能在同一时刻进 行发送和接收操作。在全双工模式中,每一端都有发送器和
接收器,有两条传输线,可在交互式应用和远程监控系统中
使用,信息传输效率较高。
6
3.1.2 串口的基本参数与标准
路层,通信协议简单、编程接口函数数量较少,适合作为进
行网络编程技术的入门学习内容。 本章由串口通信的基本原理、接口入手,介绍串口通信
的API函数;并以主机与单片机、主机间的通信为实例,介
绍串口网络编程的方法。
2
3.1 串行通信概述
串行总线是一种目前经常使用的通信方式,单片机、
PLC、测试仪器、PC、打印机、交换机、路由器、防火墙、 工业控制设备都带有串口总线。串行接口包括RS-
看做数字输入;而流出计算机端的,则可以看做数字输出。
从工业应用的角度来看,所谓的输入就是用来“监测”的, 而输出就是用来“控制”的。
11
2.RS-422
RS-422由RS-232发展而来,是为了弥补RS-232的不足而
提出的。为了改进RS-232抗干扰能力差、通信距离短、传输 速度低等缺点,RS-422定义了一种平衡通信接口,将传输速
单工模式的数据传输是单向的。通信双方中,一方固定 为发送端,另一方则固定为接收端。信息只能沿一个方向传 输,使用一根传输线。单工模式一般用在只向一个方向传输 数据的场合。例如计算机与打印机之间的通信是单工模式, 因为只有计算机向打印机传输数据,而没有相反方向的数据 传输。在某些通信信道中,存在单工无线发送等单工模式。 4
任何时候把这个信号变为无效,甚至是在接收一个数据块的 过程中。当发送端检测到这个信号变为无效之后,就必须停
止本次发送,直到这个信号变为有效为止。
17
2.软件握手
在软件握手中,以数据线上特定的数据信号来代替实际
的硬件电路电平变化。这种方法用在直接连接或者通过调制 解调器连接的两台计算机之间进行双向通信的场合。
2.半双工模式
半双工通信中使用同一根传输线,既可发送数据又可接