1、串口通信原理

串口通信定义

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

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

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

   

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

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

  

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

9针串口管脚布局

  

串口通信重要参数:

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

串口通信的测试:

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

ttyS0对应com1,ttyS1对应com2。

2、串口编程常用的API

串口参数设置

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

 #include <stdio.h>        /*标准输入输出*/
#include <stdlib.h> /*标准函数库*/
#include <unistd.h> /*Unix标准函数定义*/
#include <sys/types.h> /*定义数据类型*/
#include <sys/stat.h> /*定义状态相关的数据类型*/
#include <fcntl.h> /*文件控制定义*/
#include <termios.h> /*POSIX终端控制定义*/
#include <errno.h> /*错误号定义*/
#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编程实践

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

  1. Linux下串口编程入门

    简介: Linux操作系统从一开始就对串行口提供了很好的支持,本文就Linux下的串行口通讯编程进行简单的介绍. 串口简介  串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用 ...

  2. linux下串口通信与管理

    linux下的串口与windows有一些区别,下面将介绍一下linux下串口通信管理 查看是否支持USB串口: #lsmod | grep usbserial 如果没有信息:sudo apt-get ...

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

    一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/ ...

  4. Linux下串口編程遇到的接收数据错误及原因(0x0d,0x11接收错误)

    摘要:Linux下串口编程遇到的接收数据错误及原因 来源:https://dotblogs.com.tw/k/2012/07/24/73572 近日在调试串口的时候发现,另一设备向我ARM板的串口发送 ...

  5. Linux下串口编制【转】

    串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...

  6. Linux下串口编程【转】

    本文转载自:http://blog.csdn.net/w282529350/article/details/7378388 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但 ...

  7. Linux下串口ttyS2,ttyS3不能用的问题解决办法

    PC104,Xlinux下,突然发现串口3,4不能用... 以为是硬件的问题,换成wince后,3,4工作正常,排除电路问题 在linux下查看dmesg: serial8250: ttyS0 at ...

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

    有两个可以进行控制串口阻塞性(同时控制read和write):一个是在打开串口的时候,open函数是否带O_NDELAY:第二个是可以在打开串口之后通过fcntl()函数进行控制. 阻塞的定义: 对于 ...

  9. Linux下几种RTP协议实现的比较和JRTPLIB编程讲解

    流媒体指的是在网络中使用流技术传输的连续时基媒体,其特点是在播放前不需要下载整个文件,而是采用边下载边播放的方式,它是视频会议. IP电话等应用场合的技术基础.RTP是进行实时流媒体传输的标准协议和关 ...

随机推荐

  1. C++全局变量的声明和定义

    (1)编译单元(模块)     在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作: 第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件: 第二步,将工程中所有 ...

  2. Note_Master-Detail Application(iOS template)_05_ YJYMasterViewController.m

    //  YJYMasterViewController.m #import "YJYMasterViewController.h" #import "YJYDetailV ...

  3. STL中的lower_bound和upper_bound的理解

    STL迭代器表述范围的时候,习惯用[a, b),所以lower_bound表示的是第一个不小于给定元素的位置 upper_bound表示的是第一个大于给定元素的位置. 譬如,值val在容器内的时候,从 ...

  4. 王家卫i

    〈旺角卡门〉 因为我很了解我自己,我不能对你承诺什么. 你不要说两次,说两次我就相信了. 我宁愿做一日英雄,都不想成世做条虫! 厨房里有煮好的饭,另外我还买了几个杯子,我知道,用不了多久就都会被打破, ...

  5. Jira中Activity Stream中显示Localhost不能正常访问的处理

    在“介绍”中 “你可以在系统管理页面 编辑此段文字.”将地址改为IP和端口即可

  6. 学习php前需要了解的知识

    1.静态网站与动态网站 A)静态网站: 不支持数据交互的网站(后缀:   .html  .htm) B)动态网站: 支持数据交互的网站,动态网站可以放静态网页的 i.实现动态网站的技术 1.Asp   ...

  7. html5zero 网站模板 影片素材

    1. http://www.html5zero.com/ HTML5 Zero 收录来自各个网站的网站模版资源,支持响应式网页设计,部分能直接套用于 WordPress.Bootstrap 外,有 M ...

  8. Magento请求分发与控制器

    Magento请求分发与控制器 Magento使用的是MVC结构,模型-试图-控制器结构,这样更好的实现显示逻辑和数据,业务逻辑的分离,更好的适合开发! 下面为传统的mvc结构 URL请求被一个PHP ...

  9. BS模式的模型结构详解

    编号:1004时间:2016年4月12日16:59:17功能:BS模式的模型结构详解 URL:http://blog.csdn.net/icerock2000/article/details/4000 ...

  10. fn

    var avalon = function (el) { return new avalon.init(el) } avalon.init = function (el) { this[0] = th ...