fgh1991
级别: 正式会员
精华主题: 0
发帖数量: 13 个
工控威望: 90 点
下载积分: 473 分
在线时间: 7(小时)
注册时间: 2018-07-23
最后登录: 2020-01-09
查看fgh1991的 主题 / 回贴
楼主  发表于: 2018-07-23 21:37
我用FX3G PLC 把8348和8349用MOV传送出来,8349正常,8348是个很大的值。再用MOV传值时,8349减速设置的值无效,但会还会影响8348的值不知道怎么回事,??有没有大神知道的
john42tw
级别: 网络英雄
精华主题: 0
发帖数量: 1278 个
工控威望: 6109 点
下载积分: 52282 分
在线时间: 1123(小时)
注册时间: 2012-04-24
最后登录: 2024-12-23
查看john42tw的 主题 / 回贴
1楼  发表于: 2018-07-24 08:10
應該是受到其他設定影響

例如:
MOV  寫成 DMOV

將設定寫到最後一行看看
john42tw
级别: 网络英雄
精华主题: 0
发帖数量: 1278 个
工控威望: 6109 点
下载积分: 52282 分
在线时间: 1123(小时)
注册时间: 2012-04-24
最后登录: 2024-12-23
查看john42tw的 主题 / 回贴
2楼  发表于: 2018-07-25 08:20
引用
引用第5楼fgh1991于2018-07-24 21:56发表的  :


确实和十六位 三十二位有关,把显示值改为16位正常了。再请教下,16位的数值用32位表达会有异常吗?为什么减速时间没问题呢?

沒看到設定,不知道。
但推測:
1.D3847 被設定到,影響D3848
2.D3848被設定32位,第16位符號被當成數字。
........................


以下資料請參考


資料寄存器(D)
a.為可對數值資料(-32768 ~ 32767 或 0000H ~ FFFFH) 進行存儲的記憶體。

b.資料寄存器的位元結構
1)1點數據寄存器由16 位組成,以16 位元為單位對資料進行讀寫操作。資料寄存器資料是帶符號使用的。在使用十六進位的情況下,可對 0000H ~ FFFFH 進行存儲。但是,由於最高位元為符號位元,因此只能指定-32768~ 32767 範圍內的十進位數字。
2)在32 位元指令中使用資料寄存器時,以連續2 點的資料寄存器(Dn 和Dn+1) 作為處理對象。低16 位元對應於順控程式中指定的資料寄存器編號(Dn),高16 位元對應於順控程式中指定的資料寄存器編號+1。
在DMOV 指令中指定D12 的情況下,D12 為低16 位,D13 為高16 位。在2 點的資料寄存器中可以存儲-2147483648 ~ 2147483647 或0H ~ FFFFFFFFH 範圍內的資料。(32 位元結構中的最高位元為符號位元。)



MOV : 16位元傳送
[MOV K5 D0]    將 5     (0000 0000 0000 0101) 傳送到 D0   => D0 = 0101 = 5
[MOV K1X0 D0]  將 X3~X0 (0000 0000 0000 0111) 傳送到 D0   => D0 = 0111 = 7
[MOV K5 K1Y0]  將 5     (0000 0000 0000 0101) 傳送到 Y3~Y0 =5 => Y2 Y0 = ON
[MOV K2X0 K2Y0]將 X7~X0 (0000 0000 0010 0111) 傳送到 Y7~Y0 =39 => Y6 Y2 Y0 = ON


DMOV : 32位元傳送
[DMOV K5 D0]    將 5     (0000 0000 0000 0000 0000 0000 0000 0101) 傳送到 (D1)D0
(D1)D0 =0000 0000 0000 0000  0000 0000 0000 0101  = 5
(D1)               (D0)




16位元: + - * / > < = <>  (作除法時,除數不可為0)
[+ K10 K20 D0]    10 + 20 = D0 => D0= 30
D0數値必須在:-32768~32767之間,否則會產生溢位;造成數値判斷錯誤。而溢位的數値將跑到D1。

[- D0  D2  D4]    D0 – D2 =D4

[* D0  D2  D4]    D0 * D2  =(D5)D4

[/ K10 K3  D4]    10 /  3  = 3…1 => D4=3 (商) D5=1 (餘數)

[> D0  D2  ]      若D0 > D2 條件成立    [> D0  D2  ]=ON
若D0 < D2 條件不成立  [> D0  D2  ]=OFF


32位元:D+  D-  D*  D/  D>  D<  D=  D<>  (作除法時,除數不可為0)
[D+ D0  D2  D4]    (D1)D0 + (D3)D2 =(D5)D4

[D* D0  D2  D4]    (D1)D0 * (D3)D2 =(D7)(D6)(D5)D4
(D7)(D6)(D5)D4數値必須在:-2147483648~2147483647 之間,否則會造成數値判斷錯誤。因為(D7)(D6)(D5)D4為64位元,而PLC只能判斷32位元也就是(D5)D4;當多餘的數字跑到(D7)(D6)時,會造成PLC只讀到(D5)D4而非(D7)(D6)(D5)D4的正確値。

[D/ D0  D2  D4]    (D1)D0 / (D3)D2 =(D5)D4(商) (D7)D6 (餘數)