这是西门子plc与丹佛斯变频器DP通信的程序,用的是profidrive profile
L 0
A #I_EnableSetPointSetting //~ falls Sollwertvorgabe 黚er Bus erlaubt
JCN SWDR //~ --> aufbereiten Sollwert an Frequenzumformer ausgeben
L #I_SetPointSetting //~ Sollwert vorbereitend laden
A #I_SetPointType //~ Normierung gew黱scht?
JC SWDR
//~ --- Sollwertnormierung ---
ITD //~ umwandeln in 32-Bit Ganzzahl
DTR //~ umwandeln in Gleitpunktzahl
L 1.638400e+001 //~ mit 16,384 multiplizieren (0.0% - 100.0% entspricht 0 - 16384)
*R
RND //~ zur點kwandeln in 32-Bit Ganzzahl
L L#0 //~ mit "0" vergleichen
>=I
JCN SWDR
TAK //~ 0 <= Sollwert <= 4000 hex (= 16384 dez)
L W#16#4000
<=I //~******************************************************************
JCN SWDR
TAK
SWDR: NOP 0
T #Control.SetPoint
这是给定值处理,请问为什么乘以 1.638400e+001 ,我知道16384是对应100%,哪位大虾能逐句解释下,谢谢了!
问题补充:
为什么要乘以16,384,还有为什么要TAK交换低高字,16.384对应是10%,哪位大侠帮帮我谢谢了!
最佳答案
看了这段程序感觉有点问题,前面的第一个JCN和第一个JC跳转觉得没有什么问题,因为跟具体的应用有关;而后面再数据处理的过程中的JCN跳转,感觉有点问题,都跳转到NOP 0
时,只要跳转到该位置不论什么值都会被传送给#Control.SetPoint,就失去了数据处理的意义了;所以我觉实际的应用中#I_SetPointType常为1 ,数据的处理过程被跳过。
我认为的程序:
L 0
A #I_EnableSetPointSetting //为0时直接跳转并将0给#Control.SetPoint;
JCN SWDR
L #I_SetPointSetting //ACC1的值为 #I_SetPointSetting
A #I_SetPointType //为1时直接跳转并ACC1里的值直接转入#Control.SetPoint中,这里与数据的类型有关;
JC SWDR
// 以下这段程序就是对设定值#I_SetPointSetting进行处理:
ITD
DTR
L 1.638400e+001
*R
RND // #I_SetPointSetting乘以16.384后取整后保存在ACC1里。
L L#0
>=I // 小于0时跳转到SWDR 1
JCN SWDR1
TAK
L W#16#4000
<=I //大于 W#16#4000跳转到SWDR1
JCN SWDR1
TAK
SWDR: T #Control.SetPoint
BEC
SWDR1 : L 0
JU SWDR
NOP 0
提问者对于答案的评价:
谢谢了!!!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc240112.html