欢迎来到西门子工业支持中心网站!
欢迎来到西门子工业支持中心网站!
![]() |
“西家技术派”公众号拥有如下功能: 1.专家知识经验分享 2.发布技术派活动的信息 3.申请加入技术派 4.技术派支持案例分享 5.常见问题搜索 6.技术资料链接 |
专家大讲堂《PLC通信原理探秘》系列视频:https://www.ad.siemens.com.cn/service/elearning/series/288.html
连载之一: 【PLC通信原理探秘】大讲堂幕后彩蛋之序言
连载之二: 【PLC通信原理探秘】大讲堂幕后彩蛋之初探
连载之三: 【PLC通信原理探秘】大讲堂幕后彩蛋之失败
连载之四: 【PLC通信原理探秘】大讲堂幕后彩蛋之曙光
连载之五: 【PLC通信原理探秘】大讲堂幕后彩蛋之黑暗
连载之六: 【PLC通信原理探秘】大讲堂幕后彩蛋之破局
连载之七: 【PLC通信原理探秘】大讲堂幕后彩蛋之扬帆
通过前面所描述的原理,理解了时间片和CCP通信的概念,理解了通信是如何进行的,同时也提醒我对于通信编程的一些注意事项。例如,同样的程序,未必在300PLC和400PLC的运行结果就相同,等等。对于完整的CPU循环周期,仅剩下PII和PIQ了,它们对于在CPU的完整循环周期中起到的作用是什么呢?它们又何通信有什么关系呢?
很遗憾,在当时并没有想这个问题,因为日常工作还需要做,有限的自由时间全部铺在了理解时间片和CCP的通信上面。不过,因为我日常也支持Profinet的相关工作,柳暗花明的故事也就出现了,这也恰恰说明通信服务的原理是相通的。
我们知道Profinet的IO是周期性的,这意味着CPU和分布式IO的设备之间周期性的交换过程数据。通过Wireshark能够看见CPU和分布式IO按照Step7定义的周期时间,例如刷新时间为2ms,进行交换过程数据。这些数据就是分布式IO上面的IO数据,在具体就是CPU向分布式IO周期性2ms发送Output的数据帧,相应的分布式IO发送Input帧周期性2ms给CPU。
那么分布式IO按照Step7定义的周期进行数据交换,而CPU也有自己的循环周期,那么这两个周期如何配合来实现交换数据呢?
首先,设置PN的IO刷新时间为1ms。我还使用那个延时程序,延时5秒钟,在OB1中,写一个简单的程序:
AN Q0.0
=Q0.0
A M100.0
JCN jmp
L MW0
Next: T MW2
CALL “WAIT”
WT:=10000
L MW2
LOOP next
jmp: NOP 0
结果就是IO模板上的Q0.0变化很慢,目测是和CPU的循环周期5秒钟一致。通过Wireshark,可以看见其相关的变化位的时间间隔约为5秒钟。这也是正常的,因为CPU的循环周期是5秒钟,这也意味着每隔5秒钟刷新PII和PIQ,即使外部的PN的刷新时间是1ms,那么真正的IO刷新确是按照CPU的周期完成的。
由此可见PII和PIQ的数据变化是在CPU的每一个循环周期开始才去刷新,从而可以保证IO数据在一个CPU循环周期中保持不变,那么这样想象一下,PII和PIQ每个CPU的周期都要和一个缓冲区去交换IO数据,而这个缓冲区的数据在不断的与外部的IO设备上的数据进行数据交换,也就是说这个缓冲区的数据随着外部PN的刷新时间在不断的变化,这个缓冲区我就叫它—外设IO区,即外设Output区对于PIQ过程映像Output,外设Input区,对应PII过程映像Input。PII和PIQ的数据随着CPU的循环周期是一致的,而外设IO区数据是不一致的,因为它不随着CPU的周期变化而变化。
那么需要注意的是如果想周期性的能够响应外部的IO变化,那么这种情况下就必须要使CPU的循环周期能够适应PN的刷新周期。例如,PN IO的刷新周期是8ms,那么CPU的循环周期要小于8ms,这样就可以按照大约按照8ms的周期来刷新IO了。
问题又来了,我的程序如果编写的很大呢,CPU运行的循环周期如果大于8ms呢?此外,又牵扯到数据一致性的概念,它对于通信的意义到底在哪里?如何定义数据一致性的长度?或者说数据一致性的长度是依据什么来设定的?再次记到笔记本中,用于提醒自己还有这些问题要继续探索。
----------未完待续----------
连载之九: 【PLC通信原理探秘】大讲堂幕后彩蛋之花明
连载汇总: 【PLC通信原理探秘】系列连载故事汇总
赵工,看到你对我的答复中提到了你对采样的理解。你和我的理解确实不同,我认为我的理解是正确的。采样并不是和通信没有关系,采样和通信的关系密切。所谓通信,就是传送采样信号的过程。采样信号被送到接收者那里进行还原,然后取得原始信号才能进行处理。这是通信的基本原理。CPU就是接收者,他来进行信号还原。IO设备就是采样者,他来进行采样。采样信号从IO设备到CPU的过程,就是Profinet通信的过程。IO设备取得的信号是数字信号没错,但是它只是一个孤立的时间点的采样信号(正如你在Wireshark里看到的那样),并非最终在CPU中进行处理的信号,这个采样信号要送到CPU那里进行还原。在IO设备那里,通信还没有发生呢,不会有还原的过程。当然,一个孤立的采样信号是无法进行还原的,至少要进行两次采样,这样就会涉及到采样频率的问题。Update time就是采样的周期,换算成频率就是采样频率。
历史Alick:
您好!早啊,我想也许我没有弄明白您的问题。但我的理解是
1,首先,CPU的循环周期和PN的循环周期的匹配问题,您可以参考
http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1621155&b_id=25&s_id=&num=43#anch,41楼。我想说的是这里的数据读取,都是已经被数字化的,也就是说无论是外部的实际的DI/DO,还是AI/AO的信号,已经被采样识别后的数据。两个循环周期的匹配问题,主要是能不能正常的刷新真正的IO问题
2,至于IO设备负责信号采样,PLC负责信号还原,这个问题我不是很理解。IO设备负责信号采集,这一点没有问题,CPU只是读写这些数据而已,IO设备会对信号再进行还原。说白的IO设备才是对信号采集和还原的设备,与CPU无关。
赵工,关于Profinet IO设备刷新时间和PLC循环周期之间的关系,还请深入研究一下。为了搞清楚这个问题,我在你们公司网站上找齐了上面所有能找到的《Profinet 系统说明》手册,包括中文版,英文版和德文版三种语言版,最新版是2012年3月的版本。关于这个问题,重点请看手册4.1刷新时间的说明中香农-奈奎斯特采样定理的部分。对比中英德三个版本您会发现,因为翻译的问题,英文版和中文版手册并不准确,德文版才能说明问题。IO设备负责信号采样,PLC负责信号还原,而采样定理说明要准确还原一个信号,需要采样频率为信号频率的2倍以上,所以至少需要两次采样才能谈得上采样频率。也就是说,至少要经过两个采样周期才能正确还原出一个信号。理想情况下,循环周期应是采样周期的两倍,这样采样周期和循环周期才能完美配合。
引用2楼
你是说在一个扫描周期中以1s间隔变化Q0.0吗?这个应该还是现在的现象,要不和文档描述的不一样了,只有在扫描周期结束才将输出PIQ刷新到外设
pkh2006: 您好,谢谢您的问题!文中我只是想提到两个周期的配合过程,不是强调过程映像区内和外的区别。而且还有一点就是无论在OB1中如何改变过程映像区的数据,都以执行的最后一次为准
质疑一下过程,虽然我对结论不质疑
延时5s的程序之所以Q0.0变化很慢,是因为Q0.0没变化
您应该每延时1s取反一次Q0.0,这样延时5s,取反5次,但是抓包发现每5s传输变化一次
请填写推广理由: