串口通信 校验码_一文读懂S7-200 SMART自由口通信!
学习S7-200 SMART时了解到,基于RS485接口可实现一下几种通信:
1)modbus RTU通信
2)PPI协议通信
3)USS协议通信
4)自由口通信
何为自由口通信呢?
前三种通信必须要PLC和与其通信的设备支持相同的通信协议,如果两者之间没有共同的通信协议则需要用到自由口通信。自由口通信也称无协议通信,需要根据对方设备的通信数据格式编写一个临时协议,不仅需要编程人员学会如何编写程序,还需要了解对方的通信数据格式,所以对编程人员要求较高,随着标准协议(modbus,USS等)普及,自由口应用越来越少,但是对于一下小的设备如扫码枪等,并没有集成标准通信协议,所以只能选用自由口通信,Moubus和USS其实是自由口的一个特例。很多人碰到自由口通信就手足无措了,其实只要掌握规律,自由口通信不一定很难。为此我总结了自由口通信的基本步骤:
1)读懂对方的数据格式。
串行通信中,数据是一位一位的进行发送,也就是0和1。为了能够准确的将数据发送过去,往往会加上1个起始位,1个校验位,1个停止位(无校验是为2个停止位)如图1-1所示。
图1-1
我们就以Modbus RTU为例详细看一下串口通信中数据是如何发送和就收的。
ModbusRTU代码系统如下:
·1个起始位。
·7或8个数据位,最小的有效位先发送。
·1个奇偶校验位,设成无校验则没有。
·1个停止位(有校验时),2个Bit(无校验时)。
数据格式的描述如下表:
11-bit字符帧(BITl-BIT8为数据位):
起始位
Bit1
Bit2
Bit3
Bit4
Bit5
Bit6
Bit7
Bit8
校验位
停止位
10-bit字符帧(BITl-BIT7为数据位):
起始位
Bit1
Bit2
Bit3
Bit4
Bit5
Bit6
Bit7
校验位
停止位
通信中要保证通信双方要有相同的波特率,数据格式,奇偶校验位。
波特率:通信速度,每秒中发送的位的个数,单位为Bit/S或bps。
奇偶检验:偶校验的含义:在数据传输前附加一位偶校验位,用来表示传输的数据中“1”的个数是奇数还是偶数,为偶数时,校验位置为“0”,否则置为“1”用以保持数据的奇偶性不变。奇校验的含义:在数据传输前附加一位奇校验位,用来表示传输的数据中“1”的个数是奇数还是偶数,为奇数时,校验位置为“0”,否则置为“1”用以保持数据的奇偶性不变。
一个字符帧中,真正起作用的是数据位。起始位、检验位和停止位的加入只是为了将数据位正确地传输到对方设备。在实际应用时一定要将主站和从站数据位、奇偶校验、停止位设为一致。
在通信过程中一个完整的通信报文包括多个数据帧,一般包含地址帧、功能码帧、数据帧、检验帧。在Modbus RTU中,一个报文发送完成之后会保持3.5个字节的静默时间,再发送下一个报文,如图1-2所示。
图1-2
地址帧:指示从站的站号,以十六进制表示,如01H。
功能码帧:指示操作是读还是写,03H为读,06H为写操作。
数据帧:包含要读写的从站参数起始地址、个数及数值,数据帧在发送的时候每个字包含两个8位字符,先发高8位后发低8位。
校验帧:CRC校验值,也拆分成两个字节,先发低字节后发高字节。校验帧的原理是将将所有数据帧进行CRC运算,算出一个检验值,加在数据帧后面一起发送过去,从站设备接收到数据后再进行一次运算,将运算的检验值和接收的值进行比较,如果不一致则说明数据发送出错。
例如:从01H号站变频器,读取从0004H地址开始的2个数据的值。
发送报文:01H(地址帧),03H(功能码帧),00H(起始地址高位),04H(起始地址低位),00H(数据个数高位),02H(数据个数低位),85H(CRC低位),CAH(CRC高位)
例如:将5000(1388H)写到从站地址02H变频器的0004H地址中。
发送报文:02H,06H,00H,04H,13H,88H,C5H,6EH
了解了通信协议的数据格式,接下来就是编写自由口通信程序:,下面就以通过自由口通信控制英威腾变频器启停为例讲解程序的编写。
归纳总结了一下分为以下几步:
1)定义通信端口。
SMB30 和 SMB130 分别为端口 0 和 1 的控制字节,提供了波特率、奇偶校验、数据位和通信协议的选择,如图1-3所示。
图1-3
利用字节传送指令将分析所得的控制字节数据写入到SMB30或SMB130中,如图1-4所示。
图1-4
往SMB30中写入2#01001001,则定义端口0为自由协议,波特率9600,8位数据位,偶校验。
2)按照发送指令XMT的缓冲区格式定义发送数据报文。
图1-5
图1-5中TBL(VB0)为发送缓冲区起始地址,格式为:
VB0:发送字节总数。
VB1:报文第一帧,即地址帧,16#01
VB2:功能码帧,写16#06。
VB3:通信地址高位,控制启停地址为16#2000,高位为16#20。
VB4:通信地址低位,16#00。
VB5:写入数值高位,16#00(写入16#0001正转,16#0002反转,16#0005停止)。
VB6:写入数值低位,16#01。
VB7:CRC校验码低位,16#43。
VB8:CRC校验码高位,16#CA。(校验码为16#CA43)
程序如图1-6所示,此处用到一个CRC算法程序,
图1-6
3)触发发送指令XMT,如图1-7所示。
图1-7
3)接收数据,接收有两种方式,一是利用RCV指令接收,应用较为复杂,此处不介绍;一是利用SMB2缓冲地址接收,因为端口0接收到一个字符会触发8号中断,并将其存放于SMB2中,通常利用8号事件触发中断,在中断中将SMB2的数据转存到其它地址,否则下一数据将覆盖该数据,直到接收完所有数据后置位一个完成标志,延时一定事件再次触发发送指令。接收中断程序如图1-8所示。
图1-8
以上介绍了S7-200SMART的自由口通信,使用自由口通信时编写程并不是难点,关键在于读懂对方通信数据格式,在以后编程过程中尽量选用支持标准协议的设备,确实需要选用自由口也不用害怕,只要按照上述步骤一步步来完成,相信肯定可以通信成功。
串口通信 校验码_一文读懂S7-200 SMART自由口通信!相关推荐
- 网络切片技术缺点_一文读懂网络切片 - 技术综合版块 - 通信人家园 - Powered by C114...
在各种新兴业务不断涌现的今天,现有的4G LTE网络已经无法满足日益增多的业务需求,因此未来的网络需要通过网络切片技术从"one size fits all"向"one ...
- hdfs读写流程_一文读懂HDFS分布式存储框架分析
一文读懂HDFS分布式存储框架分析 HDFS是一套基于区块链技术的个人的数据存储系统,利用无处不在的私人PC存储空间及便捷的网络为个人提供数据加密存储服务,将闲置的存储空间利用起来,服务于正处于爆发期 ...
- mysql 默认事务隔离级别_一文读懂MySQL的事务隔离级别及MVCC机制
回顾前文: <一文学会MySQL的explain工具> <一文读懂MySQL的索引结构及查询优化> (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论 ...
- stata 求输出相关系数矩阵命令_一文读懂结果输出命令大全(上)
目录 描述统计量 help tabstat //Stata 官方命令 描述统计量组间均值差异检验 help ttest help ttable2 help estout 相关分析命令 help p ...
- psm倾向得分匹配法举例_一文读懂倾向得分匹配法(PSM)举例及stata实现(一)
原标题:一文读懂倾向得分匹配法(PSM)举例及stata实现(一) 一.倾向匹配得分应用之培训对工资的效应 政策背景:国家支持工作示范项目( National Supported Work,NSW ) ...
- stata 将数据集变量名称导出_一文读懂空间计量经济学及stata操作
在Stata 15中,推出了最新的空间计量官方命令,均以sp开头,表示 spatial data),可以处理横截面与面板形式的空间数据.本文主要为大家介绍空间计量命令之spregress的使用. 一. ...
- 三轴加速度传感器和六轴惯性传感器_一文读懂三轴,六轴,MEMS陀螺仪(角速率传感器)的区别...
原标题:一文读懂三轴,六轴,MEMS陀螺仪(角速率传感器)的区别 随着现代科技的不断发展,陀螺仪也被应用到越来越多的领域和行业,例如我们常见纸飞机等飞行类游戏,赛车类游戏等.以陀螺仪为核心的惯性制导系 ...
- java中date类型如何赋值_一文读懂java中的Reference和引用类型
简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...
- python输入什么就输出什么_一文读懂Python的输入和输出
本文介绍了Python的输入和输出,既然是Python代码,那么就一定有输出量,那么,Python是如何输出的呢? 输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'h ...
最新文章
- java将实体类转化为json_只有实践才能将知识转化为智慧
- 图片裁切,上传,自动匹配颜色。
- Websocket协议的学习、调研和实现
- 提高篇 第二部分 字符串算法 第3章 Trie字典树
- 强势回归丨2021数据库大咖讲坛(第1期):数据库高可用容灾方案的实践与探索
- centos7 mysql.h_centos7下致命错误:mysql/mysql.h:没有那个文件或目录
- C语言学习笔记---数组和指针的区别
- composer QA
- 【备忘】Java菜鸟到大牛学习路线之实战篇
- 詹姆斯高斯林_詹姆斯·高斯林(James Gosling)关于Java的立场:我几乎不在乎
- 巧用京东物流分享链接批量查询多个京东快递的物流信息
- 冬瓜哥祝大家新年快乐!
- VINS-Mono 理论详细解读——紧耦合后端非线性优化 IMU+视觉的残差residual、Jacobian、协方差、基于舒尔补的边缘化
- 爱了爱了!ALIENWAER外星人AW410K机械键盘Cherry茶轴RGB灯光全键无冲!免费包邮送到家!...
- 【IoT】加密与安全:动态密码 OTP 算法详解
- 微信「扫一扫识物」 的背后技术揭秘
- 小白都能看懂的go语言包管理工具DEP详解
- 计算机用户名和密码在哪个文件夹,登陆邮箱、论坛等的帐号和密码存放在电脑中的哪个文件夹中?...
- Android美化插件,Android控件美化Shape
- 【Arduino实验09 外部中断触发报警】
热门文章
- android studio 启动画面,Android Studio 利用Splash制作APP启动界面的方法
- spark算子_Spark篇之持久化算子
- nginx-zabbix监控脚本
- JDK源码解析之 java.lang.Thread
- Shell Pyramid【数学+二分】
- docker-compose 运行 Flask 应用最佳实践
- DAY3-“忙里偷闲”找你玩耍2018-1-11
- vue2.0 引用qrcode.js实现获取改变二维码的样式
- 中美共建大数据创新研究中心
- 【转载】浏览器缓存详解:expires cache-control last-modified