在西门子DP-MM440通讯例程中有:例1修改单字参数P02010(1)为6,PWE1=DB1.BDW28=0000,PWE2=DB1.DBW30=0006。例2修改双字参数P2200(1)为1,PWE1=DB1.DBW28=0001,PWE2=DB1.DBW30=0000.请问:例1的参数值在DB1.DBW30,为何例2的参数值在DB1.DBW28?如何判断P参数是单字或是双字?
问题补充:
补充:
1.本问题例子是选择PPO1,4PKW/2PZD;
2.请解答例1参数值6放在PWE2,例2参数值1为何放在PWE1?
3.写参数P*x之前,如何判断是单字或双字参数?
4.请就本例解答问题,不要介绍其他参考资料。
最佳答案
因为例1中参数值即(PWE=PWE1+PWE2)为0000 0006为单字。而例2中参数值为0001 0000为双字。P参数是双字还是单字取决于该参数的值是单字长,还是双字长。
如果你是读P参数就不需要知道它是单字还是双字,系统自动会读取该P参数的数值并计算返回的数值是单字还是双字(返回的第个位为1表示单字长,为2并表示双字长)。
实例:
1.如读P0700,PNU为700=2BC(HEX)
PLC PKW输出=12BC 0000 0000 0000 0000 其中第一个参数1表示读请求。
PLC PKW输入=12BC 0000 0000 0000 00006 其中第一个参数1表示返回为单字长,值为0006
如果你是写P参数就需要确定它是单字还是双字,再用相应的字符进行写操作。
实例:
2.写P1082,PNU为1082=43A(HEX)
PLC PKW输出=343A 0000 41F0 0000 其中第一个参数3表示写双字请求;41F0 0000(HEX)=30.0(REAL)
PLC PKW输入=243A 0000 41F0 0000 其中第一个参数2表示返回为双字长。
(注:如果你写入的数据为0000 0010的话,则返回第一个参数应为1,表示单字长)
关于PKW定义和参数定义可参考:
1.怎样用PKW(参数区)方式读写参数:
http://www2.ad.siemens.com.cn/download/Upload/LD/faq/518.zip
根据你提问做补充回答:
1.PPO1,4PKW/2PZD:
PKW数据区为PIW256-PIW263,PQW256-PQW263;
PZD数据区为PIW264-PIW267,PQW264-PQW267;
2.总是以双字(32位)来传送参数值(PWE)。在PPO报文中,仅一个参数值能被传送。由PWE1(高位有效字)和PWE2(低位有效字)组成一个32位参数值。用PWE2传送一个16位参数值,这种情况下,必须在PROFIBUS-DP主站中,设定PWE1位0000(例1参数值6放在PWE2就是这种情况)。
3.写参数P*x之前,如何判断是单字或双字参数.这就要看你写的参数值PWE是否超过16位。如4248 0000(HEX)=50.0(REAL),41F0 0000(HEX)=30.0(REAL)。
4.当写P2010参数时将PNU(即参数号2010)减去2000为10再转换为十六进制A。
至于P2010=200A的含义就是20-代表写请求(无数据分组、单字);0A-就是上述2010-2000=0A,即所修改的参数号(PNU)。200A就组成PKW定义中PKE(即参数表示符)。0180即表示PKW定义中IND(即索引或参数下标),其中1表示数据分组编号,8表示该参数在2000-3999范围内。后面跟着就是PWE(即参数值),包括PWE1和PWE2.故由PKE、IND和PWE组成PKW定义。0000 0006即是要写入P2010的参数值(即PWE)。(注:该PKW的定义在你所述文档中第4页里面讲得很清楚)
提问者对于答案的评价:
谢谢大侠费心指导了。看来此方面知识,知者甚少,我今后一定努力学习。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc250148.html