gk-auto 发表于 2020-1-28 18:54:56

详解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所示。https://5b0988e595225.cdn.sohucs.com/images/20200128/834d7dac6db54a409e0335f5c1662fc8.jpeg图1-1我们就以Modbus RTU为例详细看一下串口通信中数据是如何发送和就收的。ModbusRTU代码系统如下:·1个起始位。·7或8个数据位,最小的有效位先发送。·1个奇偶校验位,设成无校验则没有。·1个停止位(有校验时),2个Bit(无校验时)。数据格式的描述如下表:https://5b0988e595225.cdn.sohucs.com/images/20200128/1f827755e88f4ad18958591ebdf26395.png通信中要保证通信双方要有相同的波特率,数据格式,奇偶校验位。波特率:通信速度,每秒中发送的位的个数,单位为Bit/S或bps。奇偶检验:偶校验的含义:在数据传输前附加一位偶校验位,用来表示传输的数据中“1”的个数是奇数还是偶数,为偶数时,校验位置为“0”,否则置为“1”用以保持数据的奇偶性不变。奇校验的含义:在数据传输前附加一位奇校验位,用来表示传输的数据中“1”的个数是奇数还是偶数,为奇数时,校验位置为“0”,否则置为“1”用以保持数据的奇偶性不变。一个字符帧中,真正起作用的是数据位。起始位、检验位和停止位的加入只是为了将数据位正确地传输到对方设备。在实际应用时一定要将主站和从站数据位、奇偶校验、停止位设为一致。在通信过程中一个完整的通信报文包括多个数据帧,一般包含地址帧、功能码帧、数据帧、检验帧。在Modbus RTU中,一个报文发送完成之后会保持3.5个字节的静默时间,再发送下一个报文,如图1-2所示。https://5b0988e595225.cdn.sohucs.com/images/20200128/90e37973ea7a4b6ba6f416c074bdda0b.jpeg图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所示。https://5b0988e595225.cdn.sohucs.com/images/20200128/6311b060461f448989cc42ab2fcee355.jpeg点击添加图片描述(最多60个字)
图1-3利用字节传送指令将分析所得的控制字节数据写入到SMB30或SMB130中,如图1-4所示。https://5b0988e595225.cdn.sohucs.com/images/20200128/6333111385f94a8e95c9fb728a96f7bd.jpeg图1-4往SMB30中写入2#01001001,则定义端口0为自由协议,波特率9600,8位数据位,偶校验。2)按照发送指令XMT的缓冲区格式定义发送数据报文。https://5b0988e595225.cdn.sohucs.com/images/20200128/ebe14735f6b04695b59c11dcb3258520.jpeg图1-5图1-5中TBL(VB0)为发送缓冲区起始地址,格式为:VB0:发送字节总数。VB1:报文第一帧,即地址帧,16#01VB2:功能码帧,写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算法程序,https://5b0988e595225.cdn.sohucs.com/images/20200128/cd43c1435a4048cd9d2cc5cf76f7b5d0.jpeg点击添加图片描述(最多60个字)
图1-63)触发发送指令XMT,如图1-7所示。https://5b0988e595225.cdn.sohucs.com/images/20200128/f1803d4719374a728e58b36b7732b80d.jpeg点击添加图片描述(最多60个字)
图1-73)接收数据,接收有两种方式,一是利用RCV指令接收,应用较为复杂,此处不介绍;一是利用SMB2缓冲地址接收,因为端口0接收到一个字符会触发8号中断,并将其存放于SMB2中,通常利用8号事件触发中断,在中断中将SMB2的数据转存到其它地址,否则下一数据将覆盖该数据,直到接收完所有数据后置位一个完成标志,延时一定事件再次触发发送指令。接收中断程序如图1-8所示。https://5b0988e595225.cdn.sohucs.com/images/20200128/435224a301814d6c89425409da40e261.jpeg点击添加图片描述(最多60个字)
图1-8   以上介绍了S7-200SMART的自由口通信,使用自由口通信时编写程并不是难点,关键在于读懂对方通信数据格式,在以后编程过程中尽量选用支持标准协议的设备,确实需要选用自由口也不用害怕,只要按照上述步骤一步步来完成,相信肯定可以通信成功。(文章来源网络,仅供参考。评论处大家可以补充文章解释不对或欠缺的部分)

李涛涛~ 发表于 2020-1-28 18:59:09

真是难得给力的帖子啊。

cjhen 发表于 2020-3-3 11:47:33

强烈支持楼主ing……

yoyo 发表于 2020-10-23 01:18:10

在遇到你之前我对人世间是否有技术大佬保有怀疑,现在我是彻底被你征服了

小小小叶子 发表于 2025-11-12 23:28:49

谁懂啊!真的被戳中笑点 / 泪点了

wshdz 发表于 2025-11-12 23:41:49

学到了学到了,这波分享太实用啦!

wei4330 发表于 2025-11-12 23:54:04

救命!这回复笑到我捶桌,必须置顶~

ertye 发表于 2025-11-13 00:06:59

谁懂啊!这内容我能循环看十遍

ge芃生 发表于 2025-11-13 00:17:57

楼主太会说了,字字句句都在理

Daisy11 发表于 2025-11-13 00:18:06

评论区人才辈出,笑到停不下来😂
页: [1] 2
查看完整版本: 详解S7-200 SMART自由口通信!