Linux下串口与工业协议的开发
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下串口与工业协议的开发的更多相关文章
- Linux下串口编程入门
简介: Linux操作系统从一开始就对串行口提供了很好的支持,本文就Linux下的串行口通讯编程进行简单的介绍. 串口简介 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用 ...
- linux下串口通信与管理
linux下的串口与windows有一些区别,下面将介绍一下linux下串口通信管理 查看是否支持USB串口: #lsmod | grep usbserial 如果没有信息:sudo apt-get ...
- 【转】Linux下nginx配置https协议访问的方法
一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/ ...
- Linux下串口編程遇到的接收数据错误及原因(0x0d,0x11接收错误)
摘要:Linux下串口编程遇到的接收数据错误及原因 来源:https://dotblogs.com.tw/k/2012/07/24/73572 近日在调试串口的时候发现,另一设备向我ARM板的串口发送 ...
- Linux下串口编制【转】
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...
- Linux下串口编程【转】
本文转载自:http://blog.csdn.net/w282529350/article/details/7378388 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但 ...
- Linux下串口ttyS2,ttyS3不能用的问题解决办法
PC104,Xlinux下,突然发现串口3,4不能用... 以为是硬件的问题,换成wince后,3,4工作正常,排除电路问题 在linux下查看dmesg: serial8250: ttyS0 at ...
- linux下串口的阻塞和非阻塞操作
有两个可以进行控制串口阻塞性(同时控制read和write):一个是在打开串口的时候,open函数是否带O_NDELAY:第二个是可以在打开串口之后通过fcntl()函数进行控制. 阻塞的定义: 对于 ...
- Linux下几种RTP协议实现的比较和JRTPLIB编程讲解
流媒体指的是在网络中使用流技术传输的连续时基媒体,其特点是在播放前不需要下载整个文件,而是采用边下载边播放的方式,它是视频会议. IP电话等应用场合的技术基础.RTP是进行实时流媒体传输的标准协议和关 ...
随机推荐
- Bootstrap非常简单实用的web前端开发框架
今天无意间用firebug看网站的代码发现了Bootstrap,之前从来没有听说过这个东东,于是对它产生了好奇感,通过百度我了解到了Bootstrap是一款非常简单,强悍,实用,移动设备端优先使用的这 ...
- 记录一些容易忘记的属性 -- UILabel
一:UILabel lbl.alpha=0.f; lbl 透明,会影响子视图的显示 lbl.backgroundColor=[UIColor clearColor]; lbl 背景色透明,子视图 ...
- PAT 05-树7 File Transfer
这次的题让我对选择不同数据结构所产生的结果惊呆了,一开始用的是结构来存储集合,课件上有现成的,而且我也是实在不太会,150ms的时间限制过不去,不得已,看到这题刚好可以用数组,结果7ms最多,有意思! ...
- Math 对象的方法
Math 对象的方法 方法 描述 abs(x) 返回数的绝对值 acos(x) 返回数的反余弦值 asin(x) 返回数的反正弦值 atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返 ...
- MySQL中like的使用方法
Like的运用场合主要在模糊查询的时候,一般以查询字符串居多,这里据一些例子来说他的一般用法: <1>查询name字段中包含有“明”字的:例 select * from table1 wh ...
- android application plugins framework
android插件式开发 android application plugins framework http://code.google.com/p/android-application-plug ...
- IOS开发在线文档 记录下
View Programming Guide for iOS https://developer.apple.com/library/prerelease/ios/documentation/UIKi ...
- 偶遇makeblock
上周出去吃饭在公交站牌上看到一家叫“创客工场”的公司在打招聘广告,当时在想这公司有钱啊,广告都打到这儿了,也没细想让韩总扫了一下他们的二维码,回来搜了一下这个公司,我靠,是做开源硬件的:再一看各种机器 ...
- Interview----First single charactor
题目:在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 分析:这道题是 2006 年 google 的一道笔试题. 分析: 用 Hash, 时间和空间复杂度是 O(N ...
- Android crash特殊位置定位
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 通常情况下,在我们开发的过程中遇到的crash,可以到logcat中找原因:如果做定制App,对方用 ...