恭喜,你发布的帖子
发布于 2023-04-03 16:54:15
14楼
怎么说呢?
你这是用G120C-PN;S7-1200做IO控制器,它作为IO,构成PN/IO的过程控制系统。
这些和ProfiBus 的DP/IO过程控制是一样的。(本来就是继承的)
什么是过程控制?形象地说,就是控制器时时、处处地在控制着IO对象。发送控制字,接收对象的状态字。一刻也不停。具体来说,就是PZD格式的连续报文交换。
这种连续交换,在S1200中、在G120C-PN中是由专用芯片来处理的。(你组态、下载配置后,上电运行,这种交换就自动运行了。DP系统也是一样!没写程序也在交换!按设置自己在更新IO。)
你一楼的MOVE写法本来就有问题。不是MOVE不可以,但这里有个数据一致性的问题。
PN/IO通讯更新IO是独自处理的,而程序扫描周期读写的是IO映像,它在周期开始读到(放入映像区的)并不是PN/IO更新整体的报文PZD,有可能一半是上个IO周期,一半是本周期的。
所以,通常(除了标准报文1:2/2PZD)都是用DPRD_DAT/DPWR_DAT功能块来读写。这是一致性读写。
比如:你这个报文352,读到的转速、电流、转矩等等是同一时刻的,而不是转速是当前的;电流、转矩是几毫秒前的。
调用这两功能块,就是在调用时,一次交换数据。和你的MOVE方式,完全不同。
至于,为啥没有提供像USS_Drive那样的功能块。
因为,那个功能块太死板了。而面对的过程控制有千百种要求。你完全可以自己做成不同的FB、FC。在程序某处,调用一次DPRD_DAT/DPWR_DAT 就可以了。
而DPRD_DAT使用特别简单,就两参数;指定是哪个IO;只用一个指针,就指定了那个数据块DB,报文的长度。
你的任务,就是自己做你需要的FB,FC来处理这个DB而已;100个驱动,就是100个DB。(当然也可以用多重背景的一个DB )
这是7年前的帖子,可以参考。
而非周期的读写参数功能块,是读写参数用的,它们使用的是PKW字段。平时它处于无任务状态。
在底层,读写参数过程其实是很麻烦的。读一个参数,首先是调用写,告诉驱动,要读哪个参数?索引号?什么数据类型等等,然后,下一个周期是等待,直到返回确认,然后再调用读,获得参数值。
所以,需要调用这个功能块。
您好,为什么您说有可能一半是上个IO周期,一半是本周期的,我理解用MOVE的话数据是从PII和PIQ取出来的,CPU扫描周期更新才更新,如果G120的周期是2MS,也就是每2ms更新到外设IO缓冲区,CPU循环周期是50MS,那数据是每50MS从外设IO缓存区取一次到PII/PIQ,数据会滞后,但是不存在一致性的问题啊,每次读取的电流电压都是同一个时间节点的啊,不知道这里我理解的是否有误?
还有用DPRD_DAT/DPWR_DAT就是跟着外设IO数据的更新而更新吗,这个指令的本质是跟随哪个时间点或者哪个数据更新呢?如果是直接根据外设IO缓冲区更新也就是G120的周期更新,那不就跟:P的功能类似了吗?我想了一下没想明白,还请赐教
请填写推广理由:
分享
只看
楼主