主要内容:C#通讯之串口编程
1。C#通讯理论简述:串口通讯(物理连接),网络通讯(网络连接)
2。通讯两大块:串口通讯(常用,有缺点,如通讯距离短),网络通讯(常用)
3。SerialPort控件类的使用(重要)
协议:合同,锲约 interface接口。
软件行业:
b/s架构:Browser/Server,即浏览器/服务器模式。web开发:一般采用b/s模式。
c/s架构:Client/Server,即客户端/服务器模式。桌面开发:一般采用c/s模式。
工业自动化:
主从架构:主站(Poll)和从站(Slave(奴隶))
网络通讯两个主要操作:
要东西:get, 即read,读取数据,要数据时先请求:request,服务器才能给出响应:response
给东西:post,即write 写入数据,让服务器存储,写入数据时也需要先请求,服务器存储成功或失败都后会给出响应
GET获取数据,POST提交数据,PUT修改数据,DELETE删除数据
客户端,服务器
串口通讯:
https://blog.csdn.net/bigger_belief/article/details/130367596
https://www.cnblogs.com/BinB-W/p/5687422.html
https://blog.csdn.net/m0_68615655/article/details/141323623
https://baijiahao.baidu.com/s?id=1766209153407382451
https://baijiahao.baidu.com/s?id=1768759127355084120
串口通讯协议:
https://blog.csdn.net/weixin_41442949/article/details/138337602
编码了解:
https://www.jianshu.com/p/c026645ab1e6
https://www.jb51.net/program/310669iwy.htm
https://blog.csdn.net/yangwenxue1989/article/details/119728263
https://www.cnblogs.com/xiaxveliang/p/17212404.html
Modbus协议中的功能码 0x03 和 0x10详细讲解
https://blog.csdn.net/CUI9015/article/details/148634210
二进制和十进制的转换机制是什么?
https://cloud.tencent.com/developer/article/2149695
在线字符转16进制ASCII码:
https://tool.ip138.com/chtohex/
1。通讯基础理论?
通讯:一般发生在两端或多端,是两端之间的通讯,一端负责发送信息(发送端,客户端,从站),另外一端负责接收信息(接收端,服务器端,主站)。
C#中的通讯两大块:串口通讯,网络通讯(重要,相对难些)
串口通讯有距离限制,且速度慢;而网络通讯传输距离远,且速度快。
通讯的双方要遵循约定好的数据格式【专业叫法:数据报文,即通讯协议中的数据帧】,双方才能通讯,这些约定的规则,称为通讯协议。
串口通讯协议:串口通讯执行标准。常见的协议:RS232,RS485,Modbus(通用),西门子S7协议等
https://blog.csdn.net/weixin_41442949/article/details/138337602
Modbus是工业自动化领域广泛应用的开放式串行通信协议,由【施耐德】电气前身Modicon公司于1979年推出,支持RS-485/232等传输方式,已成为工业控制系统的通用通信标准。
RTU:https://baike.baidu.com/item/远程终端单元/21508663
网络通讯协议:即制定的网络通讯标准。常见的协议:TCP,UDP,HTTP,HTTPS,STMP,FTP等。
在网络通讯中,一端称为服务器(Server);另一端称为客户端(Client),可以有多个客户端。
服务器也可以称为主机(Host),客户端也可以称为从机(Slave奴隶)
数据帧格式:即数据报文(重点,难点)
RS232:
https://baike.baidu.com/item/RS-232/2022036
https://baike.baidu.com/item/RS-422/6983214
https://baike.baidu.com/item/RS-485%E5%8D%8F%E8%AE%AE/10331544
RS232、RS422、RS485比较
https://baijiahao.baidu.com/s?id=1834579768259804104&wfr=spider&for=pc
RS232和RS485区别:https://blog.csdn.net/weixin_56459724/article/details/141685755
2。什么是串口?
串口英文:serial port
串口通信是一个广泛使用的【数字通信协议】,它用于在两个设备之间通过【专门设计的线路】(称为串行端口)传输数据。串口通信可以使计算机与外部设备进行【可靠地点对点连接】,例如打印机、调制解调器、传感器等。串口通信允许将信息从计算机中发送到其他设备(控制设备,有可能运动,设备参数),或者从其他设备中接收信息并传递回计算机(数据采集)。通常情况下,串口通信需要指定一些参数,如【传输速率】、【校验方式】、【数据位数】和【停止位】等来保证传输数据的准确性。
串行端口:也称串行通信接口或COM接口,简称串口。
串口端口按电气标准及协议来划分,包括【RS-232】,RS-232-C、RS-422、【RS485】,USB等
应用场景多的行业:1。运动控制 2。数据采集
提示:
RS-232是点对点的,RS485多点组网。
点对点连接:即端对端连接,即Point To Point 简称P2P。也称E2E:End To End。
COM===>Component组件
串口至少需要两个设备,一个主机(也叫主站,类似于网络通讯中的服务器),一个从机(也叫从站,类似于网络通讯中客户端)
波特率:传输的速度,单位:每秒比特数(bps),常用的波特率:传输波特率600bps,1200bps,2400bps,4800bps,【9600bps】,19200bps,38400bps。
3。串行通讯原理?
串行数据传输是通过【单个线路】按【顺序地】发送一个【比特的信息】。与串行相反,还有并行数据传输方式,该方式使用多个少量且同时传输的信道。
比特:指发送的消息的单位,bit,位,按位传递数据。 8bit = 1字节 b==bit,B==byte,KB,GB,MB,TB
串行数据:单个线路(一根线,一个信道),按顺序传输(即同步传输)
并行数据:多个信道,可以同时传输(即异步传输)
储存容量单位:Bit, Byte, KB, MB, GB, TB , PB, EB, ZB, YB等的关系!!可以参考第7条问题。
https://zhuanlan.zhihu.com/p/588496704
4。通信模式?(防面试)
单工模式
半双工模式
全双工模式
https://blog.csdn.net/craftsman2020/article/details/127879721
串口通讯是全双工通讯。
5。串行数据传输方式:同步和异步
串口通讯有两种传递方式:同步(串行),异步(并行)
同步 容易阻塞(界面卡死)
6。串口通讯数据格式(重点)
想想编程语言中的格式:xml,html,json,txt,doc等等。
提示:json是一种轻量级的数据交换格式,一般应用于web项目中。
json是一种简单的数据交换格式。参考:https://www.runoob.com/json/json-tutorial.html
串口通讯数据以字节形式存储。完整格式请参考:【串口通讯数据格式.jpeg】,【串口通讯格式案例.png】
8bit===1byte
串口通讯(Modbus)数据格式:一个完整的串口数据格式包括起始位、数据位、校验位、停止位几个参数。
起始位(1)+ 数据位(8)+ 奇偶校验位(1)+ 停止位(1)组成;
串口通讯数据格式中几个重要的部分:
【波特率】:
波特率表示信息传送的速率,是计算机与外设设备进行通信的重要参数。通俗地说,波特率描述的是单位时间内传输的比特数。波特率一般用“bps”来表示,它的单位为位/秒。串口常用的波特率有9600、115200、38400等,常用于MCU与计算机之间的通信。通信设备使用串口通信时,波特率必须相同,否则会导致数据传输出错。
【数据位数】:
数据位数表示接收和发送的数据字节数。一般情况下,常用的数据位数为7位或8位,而在通常的情况下默认使用8位数据位数。数据位数的选择取决于所传输的数据格式以及传输需要的准确度和速度。
【校验位】:
校验位是为了保证接收到的数据的准确性而设置的一个位。校验位主要有三种方式,分别为奇校验、偶校验和无校验。奇校验是指在数据位数上奇数的传输信息完成后,将其全部加起来,如果结果为奇数则校验位为0,否则为1。偶校验则是将其全部加起来,如果结果为偶数,则校验位为0,否则为1。无校验是指在数据传输后不对数据进行任何的校验位检验。
0000 0001===1 奇数位全部加起来 1 校验0
0000 0010===2 奇数位全部加起来 0 校验1
CRC循环冗余校验算法:用6个字节的数据,生成两个字节的校验码。
【停止位】:
停止位指的是数据传输完成后发送器发送的一位信号。其目的是告诉接收器,本次数据传输已经结束。例如,对于8位数据加一位停止位,停止位为1,这样就能够表示出本次的数据传输已经结束。
7。1024位是多少字节?8bit==1byte
8位等于1字节,1024位等于128字节。
https://www.cnblogs.com/Redskaber/articles/16912219.html
8。SerialPort控件类重要知识点:详情参考课件
属性:
PortName 端口,默认COM1
BaudRate 波特率,默认9600
DataBits 数据位,默认8
StopBits 停止位,默认One
Parity 校验位,默认无
IsOpen 串口是否已经打开
方法:
Open()打开串口
Close()关闭串口
Write()|WirteLine()|WriteTimeout()写数据(发送数据)
ReadByte()|ReadChar()|ReadExisting()|ReadLine()|ReadTimeout()|ReadTo()读数据(接收数据)
事件:
DataReceived
串口对象通讯步骤:
1。先建立连接(打开),需要参数(端口,波特率,数据位,停止位,校验位等)
2。发送数据(请求帧,问询帧), 循环等待(等待设备响应)响应帧
3。断开连接(关闭)
针角(信号线) 3线(接收信号线,发送的信号线,地线)
RXD接收信号线 TXD发送信号线
Receive接收
在工作当中,肯定会连接正式硬件设备,讲课先用模拟器(用来模拟硬件设备的)
Virtual Serial Port Driver虚拟串口.exe 虚拟的串口驱动
XCOM V2.0(串口连接).exe 串口工具(百度:串口工具助手会搜索很多的串口工具)
9。其他知识
ASCII对照表:https://zhuanlan.zhihu.com/p/388458283
正则表达式语法:https://www.runoob.com/regexp/regexp-syntax.html
格式化:https://learn.microsoft.com/zh-cn/dotnet/standard/base-types/standard-numeric-format-strings
正则表达式中常用语法:
+:匹配1次,N次
*:匹配0次,1次,N次
?:匹配0次,1次
[0-9]匹配0至9之间的数字
\d匹配任意数字,等价于 [0-9]
\D匹配任意非数字,等价于 [^0-9]
\w匹配任意单词字符(字母、数字、下划线),等价于 [a-zA-Z0-9_]
\W匹配任意非单词字符,等价于 [^a-zA-Z0-9_]
\s匹配任意空白字符(空格、制表符、换行符等)
\S匹配任意非空白字符
^以XXX开头,$以XXX结尾。提醒:[^0-9]这里的^表示取反,即不包含0-9之间的数字
常用数字格式化:C2,N0,P2, X2
在线进制转换:
https://tool.oschina.net/hexconvert/
https://www.sojson.com/hexconvert/2to10.html
主要内容:串口编程
1。串口助手源码讲解
2。Modbus模拟器工具(Modbus poll和Modbus Slave)
3。串口读写【威盟士五插针土壤多参数变送器(485型)数据采集】
4。CRC冗余循环校验码原理,CRC冗余循环校验码实现,大端序,小端序 (防面试)
RTU远程终端单元(Remote Terminal Unit,RTU),一种针对通信距离较长和工业现场环境恶劣而设计的具有模块化结构的、特殊的计算机测控单元。
Modbus默认使用的大端序,将来看产品说明书。
Modbus poll和Modbus slave:
https://blog.csdn.net/roujian0985/article/details/139606826
https://www.modbus.cn/11619.html
https://blog.csdn.net/qq_34059233/article/details/131755012
https://zhuanlan.zhihu.com/p/529828725
Modbus poll和Modbus Slave是两个重要的模拟器,用来模拟硬件设备。
Modbus poll用来模拟主机(主站,服务器)。
Modbus Slave用来模拟从机(从站,客户端)。
主机发送一段【报文】,【报文】需要满足某种格式。
Rx:主机发送的请求帧(报文)也称问询帧
Tx:从机响应的数据,称为响应帧,也称应答帧
CRC校验算法:
https://www.cnblogs.com/li-sx/p/17859420.html
https://blog.csdn.net/li_654/article/details/131144610
https://www.cnblogs.com/qq2806933146xiaobai/p/17204586.html
CRC原理:
https://baijiahao.baidu.com/s?id=1813419475733955908
https://blog.csdn.net/weixin_43719763/article/details/131780765
https://www.cnblogs.com/hwl1023/p/5013320.html
https://blog.csdn.net/jing_xin/article/details/99090306
PLC中的AB线:一般A线接正,B线接负,GND线接地
https://cloud.tencent.com/developer/article/1898623
大端序和小端序:
https://blog.csdn.net/2401_89872625/article/details/145125646
1。CRC概念: 数据报文= K码 + 校验码
CRC(Cyclic Redundancy Check)循环冗余校验码是常用的校验码,由两部分组成,前部分是信息码(发送数据 6字节称为K码),后部分是校验码(2字节)。如果CRC码共长N个bit,信息码长K个bit,就称为(N,K)码。 使用K位信息码,通过算法生成N位的校验码。
循环冗余校验CRC是数据通信领域常用的一种数据传输检错技术。通过在发送端对数据按照某种算法计算出校验码,并将得到的校验码附在数据帧的后面,一起发送到接收端。接收端对收到的数据和校验码之后会按照相同算法进行验证,以此判断接收到的数据是否正确、完整。
Modbus数据报文有两部分组成:信息码 + 2个字节的校验码
信息码:数据报文中排除2字节的校验外的部分。也称K码。
CRC16 N=16 CRC8 N=8
如果CRC码共长N个bit,信息码长K个bit,就称为(N,K)码。
数据报文多少bit? 信息码的K bit + CRC码的N bit
CRC16 校验码2个字节。
CRC16 K码多个位? 数据报文bit - 2*8
2。CRC原理:
https://baijiahao.baidu.com/s?id=1813419475733955908
3。常用CRC算法实现:
https://www.cnblogs.com/li-sx/p/17859420.html
4。左移和右移
https://www.runoob.com/csharp/csharp-operators.html
回顾位运算符:
a. 两个二进制&规律:(二进制并列and) 按位与
相同位保留,不同位取0
b. 两个二进制|规律:(二进制或者or) 按位或
相同位保留,不同位取1
c. 两个二进制^规律:(二制异或) 按位异或
相同位取0,不同位取1
d. 一个二进制~规律:(按位取反运算符) 按位取反
0变成1,1变成0
e. 左移运算<<规律:左移后,右边补0
f. 右移运算>>规律:右移后,左边补0
A = 60
A = 0011 1100 A左移4位 1100 0000 转换成10进制
A = 0011 1100 A右移4位 0000 0011 转换成10进制
更多推荐


所有评论(0)