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