引用
引用第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 (餘數)