中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

西门子SIEMENS

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 西门子SIEMENS → 浏览主题: 【话题】马乐:玩转485通讯系列【连载】(20140918)
发表新帖 回复该主题
回帖:277个,阅读:55524 [上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] ... [28] [下一页]
* 帖子主题:

【话题】马乐:玩转485通讯系列【连载】(20140918)

分享到
49161
kdrjl 版主
文章数:24274
年度积分:50
历史总积分:49161
注册时间:2004/2/17
发站内信
2018论坛优秀版主
2017论坛优秀版主
2016论坛优秀版主
2015论坛优秀版主
2014论坛优秀版主
我秀我做2014
2013论坛优秀版主
秀秀我的办公桌
晒晒工控小礼品
2012论坛优秀版主
2011论坛贡献奖
2010年论坛优秀版主
发表于:2014/9/22 7:39:29
#30楼
继续关注更新....。
我是你的朋友
992
马乐
文章数:17
年度积分:50
历史总积分:992
注册时间:2014/9/17
发站内信
发表于:2014/9/22 9:31:29
#31楼
【玩转485】6.数据的接收4【连载6】

个人微信:mayue_66

上一篇文章我们搞清楚了固定长度报文,和不固定长度报文通过时间来判断报文的起始与结束的原理,本文我们先对固定长度报文方式进行编程。

1.寄存器设定
编写程序之前我们先看看对应的特殊位寄存器应该如何设置。

SMB30 = 2#00001001 =16#9

附件 01.jpg

图 1-1

1) 自由口模式。第0、1位。SM30.0=1、SM30.1=0
2) 通讯速率9600bps。第2、3、4位。SM30.2=0、SM30.3=1、SM30.4=0
3) 每个字符的数据位是8位。第5位。SM30.5=0
4) 不选用奇偶效验。第6、7位。SM30.6=0、SM30.7=0

SMB87 = 2#10011100 = 16#9C

附件 02.jpg
图 1-2

1) 不使用中断条件作为检测信息的开始。第1位。SM87.1=0
2) 当SMW92中的定时时间超出时终止接收。第2、位。SM87.2=1
3) 定时器是信息定时器。第3位。SM87.3=1
4) 使用SMW90的值检测空闲状态。第4位。SM87.4=1
5) 不检测结束字符。第5位。SM87.5=0
6) 不检测起始字符。第6位。SM87.6=0
7) 允许信息接收功能。第7位。SM87.7=1
注:第0位为无效位不使用,永久为0。

SMW90 = 4
将SMW90设定成4表示报文间空闲时间大于4ms后接收的第一个字符是新信息的开始。

SMW92 = 6
由于我们设定SM87.3为1确定使用固定报文长度方式,假设报文长度为6个字符,那么在9600bps通讯速率下1个字符(10个位)的接收需要1.04ms,6个字符的接收就需要6.24ms,因此将SMW92设定成6表示从接收到第一个字符开始后6ms停止接收信息,同时空闲4ms后(SMW90 = 4)接收到的第一个字符是新信息的开始。

SMB94 = 255
SMB94定义接收缓冲区大小,此处定义为最大255字节。(注:接收缓冲区是用来存放接收到的数据的区域,最大255字节,大家可以根据通讯情况自由定义。)

2.程序编写
附件 03.jpg
图 2-1

附件 04.jpg

图 2-2

以上就是固定报文长度方式下接收数据的程序,此处我们设定的报文长度是6个字符,下面我们通过串口调试软件给PLC发送7个字符长度(AA 11 22 BB 23 45 C1)的一个报文看看会发生什么情况。

附件 05.jpg
图 2-3

附件 06.jpg

图 2-4

由图 2-4状态表监控结果我们可以发现我们只能接收到6个字符,第7个字符C1并没有接收到

附件:【玩转485】6.数据的接收4.pdf
[本地下载]
附件:程序.rar
[本地下载]

图
[此贴子已经被作者于2014/9/24 9:55:57编辑过]
1224
dwwzl302
文章数:9
年度积分:50
历史总积分:1224
注册时间:2009/3/4
发站内信
发表于:2014/9/22 9:56:58
#32楼
很不错,基本上简单通信已经面面俱到了
1063
lyx1971
文章数:12
年度积分:50
历史总积分:1063
注册时间:2008/4/28
发站内信
发表于:2014/9/22 18:47:23
#33楼
感谢楼主的分享!
一定得好好研究一下!
49161
kdrjl 版主
文章数:24274
年度积分:50
历史总积分:49161
注册时间:2004/2/17
发站内信
2018论坛优秀版主
2017论坛优秀版主
2016论坛优秀版主
2015论坛优秀版主
2014论坛优秀版主
我秀我做2014
2013论坛优秀版主
秀秀我的办公桌
晒晒工控小礼品
2012论坛优秀版主
2011论坛贡献奖
2010年论坛优秀版主
发表于:2014/9/23 7:58:47
#34楼
已下载,谢谢!
我是你的朋友
992
马乐
文章数:17
年度积分:50
历史总积分:992
注册时间:2014/9/17
发站内信
发表于:2014/9/23 9:15:33
#35楼
【玩转485】7.数据的接收5【连载7】

个人微信:mayue_66

通过时间方式判断进行数据的接收的两种方式,我已经详细的向大家介绍了固定长度报文情况下PLC如何接收数据,本文我就向大家介绍一下当报文长度不固定的情况下我们该如何控制PLC接收信息。
附件 01.jpg
首先我们回顾一下当协议中报文的长度不固定的情况下,我们是通过判断字符间的空闲时间的方式来判断一段报文的起始,通常是字符与字符之间空闲时间超过3.5个字符传输时间,我们就认为一段报文接收完毕,之后接收到的报文就是一段新的报文。下面我们来看看这个程序如何写。

1.寄存器设定

SMB30 = 2#00001001 =16#9
附件 02.jpg
图 1-1

1) 自由口模式。第0、1位。SM30.0=1、SM30.1=0
2) 通讯速率9600bps。第2、3、4位。SM30.2=0、SM30.3=1、SM30.4=0
3) 每个字符的数据位是8位。第5位。SM30.5=0
4) 不选用奇偶效验。第6、7位。SM30.6=0、SM30.7=0

SMB87 = 2#10010100 = 16#94
附件 03.jpg
图 1-2

1) 不使用中断条件作为检测信息的开始。第1位。SM87.1=0
2) 当SMW92中的定时时间超出时终止接收。第2、位。SM87.2=1
3) 定时器是内部字符定时器。第3位。SM87.3=0
4) 使用SMW90的值检测空闲状态。第4位。SM87.4=1
5) 不检测结束字符。第5位。SM87.5=0
6) 不检测起始字符。第6位。SM87.6=0
7) 允许信息接收功能。第7位。SM87.7=1
注:第0位为无效位不使用,永久为0。

SMW90 = 4
将SMW90设定成4表示报文间空闲时间大于4ms后接收的第一个字符是新信息的开始。

SMW92 = 4
由于我们设定SM87.3 = 0确定使用报文长度不固定方式,在9600bps通讯速率下1个字符(10个位)的接收需要1.04ms,3.5个字符的时间需要3.64ms,因此将SMW92设定成4表示当字符与字符之间的空闲时间超过4ms时停止接收信息(注:SMW92不支持小数),同时空闲4ms后(SMW90 = 4)接收到的第一个字符是新信息的开始。

SMB94 = 255
SMB94定义接收缓冲区大小,此处定义为最大255字节。(注:接收缓冲区是用来存放接收到的数据的区域,最大255字节,大家可以根据通讯情况自由定义。)

2.程序编写

附件 04.jpg
图 2-1
附件 05.jpg
图 2-2

以上就是报文长度不固定方式下,接收数据的程序,下面我们从电脑向PLC发送两组长度不同的报文AA 11 22 BB 23 45 C1和AA 11 22 BB 23 45 C1 54,看看效果。

附件 06.jpg
图 2-3
附件 07.jpg
图 2-4
附件 08.jpg
图 2-5
附件 09.jpg
图 2-6

由上面两次操作我们可以看到当报文长度不固定的时候电脑向PLC发送几个字符PLC就会接收几个字符。

附件:【玩转485】7.数据的接收5.pdf
[本地下载]
附件:程序.rar
[本地下载]

图
[此贴子已经被作者于2014/9/24 9:50:35编辑过]
644
1150405
文章数:21
年度积分:50
历史总积分:644
注册时间:2014/9/16
发站内信
发表于:2014/9/23 14:10:15
#36楼
回复 #35楼 马乐
楼主辛苦了!!!
1063
lyx1971
文章数:12
年度积分:50
历史总积分:1063
注册时间:2008/4/28
发站内信
发表于:2014/9/23 20:43:16
#37楼
楼主辛苦!
也不知后面还有吗?是否继续呢?很期待啊!
49161
kdrjl 版主
文章数:24274
年度积分:50
历史总积分:49161
注册时间:2004/2/17
发站内信
2018论坛优秀版主
2017论坛优秀版主
2016论坛优秀版主
2015论坛优秀版主
2014论坛优秀版主
我秀我做2014
2013论坛优秀版主
秀秀我的办公桌
晒晒工控小礼品
2012论坛优秀版主
2011论坛贡献奖
2010年论坛优秀版主
发表于:2014/9/24 7:34:06
#38楼
已下载之7.谢!
我是你的朋友
992
马乐
文章数:17
年度积分:50
历史总积分:992
注册时间:2014/9/17
发站内信
发表于:2014/9/24 9:47:14
#39楼
【玩转485】8.中断的使用【连载8】

个人微信:mayue_66


如何发送数据如何接收数据,我们现在已经分别和大家讲完了,但是如何让PLC既可以发送数据,又可以接收数据,我们还没有向大家讲解,在开始讲解这个内容之前,我们先帮助大家熟悉一下我们要涉及到的两个中断的使用,发送完成中断和接收完成中断。

说到中断可能很多人都对中断的本质含义都似懂非懂,这里如果我还是把定义和概念拉出来,肯定有人就要骂娘了,所以我还是拿讲课和大家打个比方,用这个例子把中断和大家讲清楚

首先我们来看什么是中断工作方式,比方说有1个老师和10个学生,那么老师讲课的过程就相当于执行主程序,这时有学生突然有问题,举手向老师提问,那么这个学生就打断了老师的讲课,就相当于中断了主程序。老师停止讲课去回答这个学生的问题就相当于在执行中断程序。当老师回答完这个学生的问题,继续开始讲课。这对于PLC来说就相当于执行完中断程序,返回继续执行主程序。
附件 222.jpg

那对于发送完成中断来说,数据发送完成就是一个事件,当我们调用这个中断的时候,一旦数据发送完成就会产生发送完成中断,那么该中断就会打断主程序的运行,然后进入该中断程序中进行执行,执行完毕后重新回到主程序。
对于接收完成中断它的工作原理和发送完成中断是一模一样的,只是这个中断是产生在数据接收完成之后。

在S7-200中中断的调用是由中断号来决定的,通过查询《S7-200系统手册》 (6-94页,表6-44)我们可以看到通讯0端口的发送完成中断的中断号是9,接收完成中断中断号是23。通讯端口1的发送完成中断的中断号是26,接收完成中断号是24。

下一篇文章我将会具体给大家讲解如何在程序中使用这两个中断。

附件:【玩转485】中断的使用【连载8】.pdf
[本地下载]

图
[此贴子已经被作者于2014/9/24 9:56:14编辑过]
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

124.8008