黃輝馮某某
微信 F1049305119
級別: 家園常客
![]() |
圖片:
![]()
圖片:
![]() 松下的寫法,不知道算不算滿足要求 ![]() |
|
---|---|---|
|
方奇10010
級別: 略有小成
![]() |
牛逼 |
---|---|
|
ljb6688
級別: 論壇先鋒
![]() |
臥虎藏龍啊,開眼長見識了 |
|
---|---|---|
|
source08
級別: 網(wǎng)絡英雄
![]() |
優(yōu)秀,又學習了。 |
---|---|
|
羅玩玩
級別: 正式會員
![]() |
根據(jù)三菱PLC的指令特性,可以通過以下步驟實現(xiàn)D2低N位置位的需求: 數(shù)學原理驗證 公式D2 = 2^D0 -1在數(shù)學上是成立的。例如: 當D0=4時,2^4 -1 = 15(二進制00001111),低4位全為1。 當D0=5時,2^5 -1 = 31(二進制00011111),低5位全為1。 三菱PLC實現(xiàn)方法 由于三菱PLC沒有直接的指數(shù)運算指令,需通過移位指令或循環(huán)乘法實現(xiàn)冪運算: 方法一:使用移位指令(推薦) 若PLC支持以寄存器值作為移位次數(shù),可用以下代碼: MOV K1 D10 ; 將1存入臨時寄存器D10[[2]] SFL D10 D0 ; 將D10左移D0次(需確認指令支持寄存器指定次數(shù))[[16]] SUB D10 K1 D2 ; D2 = 2^D0 -1[[8]] 方法二:循環(huán)乘法(通用方案) 通過循環(huán)實現(xiàn)2的D0次方計算: MOV K1 D10 ; 初始化D10=1 MOV D0 D11 ; 設置循環(huán)次數(shù)為D0 LOOP: CMP D11 K0 ; 檢查循環(huán)次數(shù)是否完成 JLE EXIT ; 若D11≤0則跳轉(zhuǎn)退出[[12]] MUL D10 K2 D10; D10 *=2(等價于左移1位)[[13]] DEC D11 ; 循環(huán)次數(shù)減1 JMP LOOP ; 繼續(xù)循環(huán) EXIT: SUB D10 K1 D2 ; D2 = D10 -1[[8]] 注意事項 寄存器位數(shù)限制:若D0值較大(如≥16),需使用32位寄存器(如D1:D0組合)避免溢出。 指令兼容性:不同型號PLC支持的指令可能略有差異,需參考具體手冊調(diào)整語法。 效率優(yōu)化:對于固定范圍D0值(如≤16),可預先計算掩碼值并存入表格,通過查表直接讀取 |
---|---|
|
黃輝馮某某
微信 F1049305119
級別: 家園常客
![]() |
圖片:
![]() 這樣行不行 |
|
---|---|---|
|
gxtmdb82164
級別: 論壇先鋒
![]() |
使用SFR指令應可以3行搞定 初始化0xffff到D0 將目標位數(shù)用16相減獲得移位數(shù),比如說sub K16 n D1,n=6時,D1是10 SFR D0 D1,將0xffff右移10位,因為高位補0,最終的結(jié)果在D0中是6個1 |
---|---|
|