Linux下串口与工业协议的开发

1、串口通信原理

串口通信定义

串口通信:数据的串行传送方式。串口通信可分为同步通信异步通信

同步通信:按照软件识别同步字符来实现数据的发送和接收。

  • 将许多字符组成一个信息组进行发送
  • 要求发送时钟和接收时钟保持严格的同步
  • 效率相对高,对双发时钟的误差要求也高

   

异步通信:利用字符的再同步技术的通信方式。

  • 按字符一个一个进行传输
  • 每传输一个字符,就用起始位来通知对方,以此来重新核对收发双方同步
  • 可靠性较高,但效率较低

  

  同步通信按帧为单位传输,异步通信按字符为单位传输。(数据链路层)

9针串口管脚布局

  

串口通信重要参数:

波特率、数据位、停止位、奇偶校验

串口通信的测试:

连接com1和com2两个串口,在/dev/ttyS0设备文件中写入数据“Hello”,然后看/dev/ttyS1设备文件。串口设备可以使用read/write直接访问。

ttyS0对应com1,ttyS1对应com2。

2、串口编程常用的API

串口参数设置

串口编程需要用到的头文件

1 #include <stdio.h>        /*标准输入输出*/
2 #include <stdlib.h>       /*标准函数库*/
3 #include <unistd.h>      /*Unix标准函数定义*/
4 #include <sys/types.h>  /*定义数据类型*/
5 #include <sys/stat.h>    /*定义状态相关的数据类型*/
6 #include <fcntl.h>         /*文件控制定义*/
7 #include <termios.h>    /*POSIX终端控制定义*/
8 #include <errno.h>       /*错误号定义*/
9 #include <string.h>      /*字符串功能函数*/

波特率的设置

cfsetispeed() 设置输入端口的波特率

cfsetospeed() 设置输出端口的波特率

cfgetispeed() 获取输入端口的波特率

cfgetospeed() 获取输出端口的波特率

struct termios opt; 定义指向termios结构的指针opt

termios结构体

#define NCCS 19
struct termios{
    tcflag_t c_iflag;     //输入参数
    tcflag_t c_oflag;    //输出参数
    tcflag_t c_cflag;    //控制参数
    tcflag_t c_ispeed;  //输入波特率
    tcflag_t c_ospeed; //输出波特率
    cc_t c_line;           //线控制
    cc_t c_cc[NCCS];  //控制字符
};

波特率设置实例

cfsetispeed(&opt, B9600); //指定输入波特率为9600bps
cfsetospeed(&opt, B9600);

串口常见操作

fd=open("/dev/ttyS0", O_RDWR | O_NOCTTY);  

int read(int fd, *buffer, length);

int write(int fd, *buffer, length);

int close(int fd);

串口控制流程

  • 设置波特率
  • 校验位和停止位的设置
  • 打开串口
  • 发送串口数据
  • 读取串口数据
  • 关闭串口

3、串口编程实践

4、Modbus协议介绍

属于应用层协议,用于电子控制器进行控制和通讯的通讯协议。通过此程序,控制器相互之间、控制器经由网络和器它设备之间可以进行通信。

ModBus的两种常用传输模式:

ASCLL模式:在消息中的每个8Bit字节都作为两个ASCLL字符发送,字符发送的时间间隔可达到1秒而不产生错误。

RTU模式:在同样的波特率下,可比ASCLL方式传送更多的数据。(更为常用一些)

两种模式的比较

功能代码位

例:ModBus一个实例

  发送指令: 01 04 00 28 00 02 F1 C3

 <slave address 1 Byte><Function 1 Byte><Start Address 2 Bytes><NumberofBytes 2 Bytes><Checksum 2 Bytes>

  接收回复: 01 04 04 42 0B 99 9A 74 05

<slave address 1 Byte><Function 1 Byte><NumberofBytes 1 Bytes><DataIEEE32 x Byte><Checksum 2 Bytes>

ModBus通信协议的通信方式

5、Modbus编程实践

时间: 2024-10-08 10:36:29

Linux下串口与工业协议的开发的相关文章

linux下串口通信与管理

linux下的串口与windows有一些区别,下面将介绍一下linux下串口通信管理 查看是否支持USB串口: #lsmod | grep usbserial 如果没有信息:sudo apt-get install setserial 插上USB转串口,在终端输入命令 #dmesg | grep ttyUSB0 如果出现连接成功信息,则说明系统已经识别该设备 一.找到自己的串口设备 查找自己的开发板与电脑的连接的COM口方法 Windows:设备管理器 linux: (1)dmesg #查看带有

linux 下安装 mysql 并配置 python 开发环境

1.安装 mysql ,安装过程中将提示设置 root 用户的密码,默认可以设置为 rootadmin . $ sudo apt-get install mysql-server 2.安装 mysql 开发工具(不安装时,安装 MySQL-python 提示错误 "mysql_config not found"). $ sudo apt-get install libmysqld-dev 3.安装 python 的 mysql 库 MySQL-python (首先安装 python-d

【转】Linux下nginx配置https协议访问的方法

一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/nginx -V 如下所示: configure arguments: --prefix=/usr/local/nginx --with-google_perftools_module --without-http_memcached_module --user=www --group=www --

Linux下串口编制【转】

串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准.串口通讯指的是计算机依次以位(bit)为单位来传送数据,串行通讯使用的范围很广,在嵌入式系统开发过程中串口通讯也经常用到通讯方式之一. Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口

Linux下串口编程【转】

本文转载自:http://blog.csdn.net/w282529350/article/details/7378388 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但是这个完整的程序里面本来有语法错误的,现在让我改过来了************/ --------------------------------------------------------- Author             :tiger-johnWebSite            :b

Linux下串口通信工具minicom

minicom是linux下的串口通信工具,类似于Windows下的超级终端. 一般在yum源中可以直接安装 minicom -s可以设置minicom的速率,流控之类. 如上图:A是你的设备名.如在台式机上用console接串口则一般为/dev/ttyS0, 如果笔记本上使用USB-串口转换则为/dev/ttyUSB0之类. Linux下一般均默认安装了USB-串口的驱动 将配置保存为默认(Save setup as dfl),下次输入minicom则可以启动 注意:非正常关闭minicom,

linux下串口的阻塞和非阻塞操作

有两个可以进行控制串口阻塞性(同时控制read和write):一个是在打开串口的时候,open函数是否带O_NDELAY:第二个是可以在打开串口之后通过fcntl()函数进行控制. 阻塞的定义: 对于read,block指当串口输入缓冲区没有数据的时候,read函数将会阻塞在这里,移植到串口输入缓冲区中有数据可读取,read读到了需要的字节数之后,返回值为读到的字节数: 对于write,block指当串口输出缓冲区满,或剩下的空间小于将要写入的字节数,则write将阻塞,一直到串口输出缓冲区中剩

linux下播放器的设计和开发

本文根据DawnLightPlayer的开发经验写成.DawnLithtPlayer是今天3月份开始,和maddrone一起在业余时间开发的一个跨平台,多线程的播放器,主要是在Linux下面开发的,文中所用示例代码均截自其中.DawnLightPlayer目前可以运行在Linux和Windows系统上,并使用VC和Python开发了GUI,支持大部分的音视频文件格式和网络流,另外新增对CMMB协议的支持,不支持 RMVB, SWF 等尚未公开协议的视频文件格式. 目录:一. 播放器的流程   1

linux下串口工具minicom

系统环境:ubuntu  14 .04  和ubuntu 16.04 我当时的需要主要是两个,能够看到正常串口输出,并且把串口内容实时输出到文件中 那接下来工作主要是两个:1.安装 2.配置 相信各位也都是至少会操作一些全令行的,我们在这里用apt-get安装(不会的同学请google一下) 1.安装 sudo apt-get install minicom 2.配置 (1)首先在命令行下执行sudo minicom启动程序 (2)进入主界面后按 Ctrl+A 然后再按Z 进入配置界面 我在这里