標題: 三菱 PLC梯型圖(指令編碼)反匯編程序--開源 PLC 編程重點參考資料 [打印本頁]

作者: 電子黑    時間: 2016-6-27 00:20
標題: 三菱 PLC梯型圖(指令編碼)反匯編程序--開源 PLC 編程重點參考資料
本三菱 PLC梯型圖(指令編碼)反匯編程序是 三菱 PLC梯型圖 轉(zhuǎn) HEX 文件的重要組成部分,由于考慮到今后程序移植的方便,未使用控件,僅用最基本的 C 語言語句編寫。  
    本程序的 三菱 PLC梯型圖 測試程序 PLC2N.PMW 由 ourDEV 網(wǎng)友 easygoing 編寫,再次表示感謝其對開源 PLC 的支持, 在本例中轉(zhuǎn)換成同名的 PLC2N.C 程序。再經(jīng) Keil C 編譯成 HEX 文件執(zhí)行。
    本“三菱 PLC梯型圖(指令編碼)反匯編程序”將和“PLC梯型圖(指令編碼)轉(zhuǎn) 51 C語言”組合,由網(wǎng)友 xingliu 編寫操作界面軟件,使之更適合廣大片機愛好者使用。         
    由于作者水平有限,未正規(guī)學(xué)過 C 語言,失誤和錯誤難免,請廣大網(wǎng)友指正,拍磚。

/*----------------------------------------------------------------------------------------------------*/
/*                                                                                                    */
/*                  三菱 PLC梯型圖(指令編碼)反匯編程序 轉(zhuǎn) C 程序示范程序                            */
/*                                                                                                    */
/*     為防止 PLC 指令編碼和 C 語言關(guān)鍵字混淆,特規(guī)定,所有 PLC 指令前面加下劃線"_",所有點(BIT型)  */
/*  前后各加下劃線"_",所有點(WORD型)前加下劃線"_",指令后面的數(shù)據(jù)用( )包含,數(shù)據(jù)中間用","分隔,  */
/*  以示和 C 語言關(guān)鍵字區(qū)分及適應(yīng)于 C 語言書寫方法。                                                  */
/*      所有十進制常數(shù)去掉前導(dǎo)"K",所有十進制常數(shù)去掉前導(dǎo)"H"再加前導(dǎo)數(shù)字"0x",以便適應(yīng)于 C 語言常數(shù)   */
/*  書寫方法。這些下劃線和加減前導(dǎo)數(shù)字將由 PLC 梯型圖反編譯程序自動加入。                             */  
/*                                                                                                    */
/*     本程序支持混合編程,即在 PLC 指令編碼中可任意插入 C 語言語句,符合 C 語言規(guī)范的匯編語言語句。  */
/*  可使用現(xiàn)有的調(diào)試軟件仿真器設(shè)置斷點,單步,多步,跟蹤,連續(xù),全速等手段調(diào)試 PLC 程序,修改和監(jiān)控   */
/*  PLC 點元件狀態(tài)和內(nèi)容,使之更適合廣大片機愛好者使用。                                            */
/*                                                                                                    */
/*     目前支持下列點(繼續(xù)完善中):                                                                 */
/*  _X0_---_X57_,_Y0_---_S57_,_M0_---_M255_,_S0_---_S255_,_T0---_T31,_C0---_C31,_D0---_D31;     */
/*                                                                                                    */   
/*     目前支持常數(shù)(繼續(xù)完善中):                                                                   */
/*  K 范圍:-32768---32767;  H 范圍:0---FFFFH;                                                       */
/*                                                                                                    */
/*      目前支持特殊點數(shù)(繼續(xù)完善中):                                                              */
/*  _M8000_,_M8001_,_M8002_,_M8003_,_M8004_,_M8011_,_M8012_,_M8013_,_M8014_,                 */
/*  _M8020_,_M8021_,_M8022_,_M8121_,_M8122_,_M8123_,_M8124_;                                   */
/*                                                                                                    */
/*      目前支持下列基本指令和擴展指令(繼續(xù)完善中):                                                */
/*  _LD,_LDI,_AND,_ANI,_OR,_ORI,_INV,_OUT(_OUT_T,_OUT_C),_SET,_RST(_RST_T,_RST_C),                    */
/*  _ANB,_ORB,_LDP,_LDF,_ANDP,_ANDF,_ORP,_ORF,_PLS,_PLF,_MPS,_MRD,_MPP,_NOP,END,                      */
/*  _ADD,_SUB,_MUL,_DIV,_INC,_DEC,_WAND,_WOR,_WXOR,_NEG,_ALT,_MOV,_CML,_XCH,_BCD,_BIN,                */
/*  _LD>=,_LD<=,_LD>,_LD<,_LD<>,_LD=,_AND>=,_AND<=,_AND>,_AND<,_AND<>,_AND=,                          */
/*  _OR>=,_OR<=,_OR>,_OR<,_OR<>,_OR=;                                                                 */
/*                                                                                                    */
/*      由于 C語言無法識別下列符號,特用下列英文縮寫表示:                                            */
/*  大于等于(>=)  _GE,小于等于(<=)  _LE,大于(>)  _GT,小于(<)  _LT,不相等(<>)  _NE,相等(=)  _EQ;  */
/*  即指令集:_LD>=,_LD<=,_LD>,_LD<,_LD<>,_LD=,_AND>=,_AND<=,_AND>,_AND<,_AND<>,_AND=,                */
/*            _OR>=,_OR<=,_OR>,_OR<,_OR<>,_OR=;                                                       */
/*      用下列指令書寫方式替代(由 PLC 梯型圖反編譯程序自動生成)。                                   */
/*  _LD_GE,_LD_LE,_LD_GT,_LD_LT,_LD_NE,_LD_EQ,_AND_GE,_AND_LE,_AND_GT,_AND_LT,_AND_NE,_AND_EQ,        */
/*  _OR_GE,_OR_LE,_OR_GT,_OR_LT,_OR_NE,_OR_EQ;                                                        */
/*                                                                                                    */
/*                                                                                                    */
/*   CPU  : 51系列單片機                                                                              */
/*   晶振 : 11.0592MHz                                                                                */
/*                                                                                                    */
/*----------------------------------------------------------------------------------------------------*/

#include "plc_start.h"

//-------------------------------------------------------------------------------------//
//  PLC 執(zhí)行程序                                                                       //
//-------------------------------------------------------------------------------------//

void main_PLC(void)
{  
_LDI (_X2_)
_OUT_ (_T100,124)
_EI
_LD (_M1_)
_MC (N1,_M0_)
_LDP (_M8000_)
_ORF (_M1000_)
_LDP (_M3000_)
_ORF (_M2000_)
_ANB
_LDP (_S100_)
_ORF (_M2999_)
_ANB
_OUT_ (_T100,30)
_RST (_D1)
_RST (_M2999_)
_SET (_S100_)
_OUT (_M8005_)
_LDP (_M1_)
_ADDP (_C20,_T35,_D11)
_LD (_X1_)
_OUT_ (_C210,123456789)
_LD (_X2_)
_TCMP (_C10,_K2M0,_K1M0,_D0,_M0_)
_P5:
_LD (_X10_)
_CJ (_P5)
_LD (_X13_)
_OUT (_Y13_)
_MCR (N1)
_LD (_X0_)
_CALL (_P2)
_DI
_FOR (4)
_LD (_M8000_)
_DADDP (_K8M1000,10,_D11)
_NEXT
_LD (_M8000_)
_ADD (-200,_D12,_D14)
_MPS
_AND (_M0_)
_SUB (_D1000,_D999,_D7000)
_MRD
_AND (_M1_)
_MUL (2,_D13,_D14)
_MRD
_AND (_M2_)
_DIV (_D14,_D12,_D15)
_MPP
_INC (_D0)
_DEC (_D0)
_MPS
_AND (_M3_)
_WAND (_D10,_D12,_D14)
_MRD
_AND (_M4_)
_WOR (_D10,_D12,_D14)
_MRD
_AND (_M5_)
_WXOR (_D10,_D12,_D14)
_MPP
_NEG (_D10)
_LD (_X16_)
_CMP (100,_D0,_M0_)
_ZCP (100,120,_C10,_M3_)
_MOV (100,_D18)
_SMOV (_D1,4,2,_D2,3)
_CMP (_D0,_K1Y17)
_BMOV (_D5,_D10,2)
_RMOV (0,_D0,2)
_XCH (_D18,_D19)
_BCD (_D12,_K2Y20)
_BIN (_K2X0,_D13)
_LD (_X17_)
_ROR (_D0,4)
_ROL (_D0,4)
_RCR (_D0,4)
_RCL (_D0,4)
_SFTR (_X0_,_M0_,16,1)
_SFTL (_X0_,_M0_,16,4)
_WSFR (_D0,_D10,16,4)
_WSFL (_D0,_D10,16,4)
_SFWR (_D0,_D1,10)
_SFRD (_D0,_D20,10)
_LD (_X20_)
_ZRST (_M500_,_M599_)
_DECO (_X0_,_M10_,2)
_DNCO (_M10_,_D10,3)
_SUM (_D0,_D2)
_BON (_D10,_M0_,15)
_MEAN (_D0,_D10,3)
_ANS (_T0,10,_S900_)
_ANR
_SOR (_D10,_D12)
_FLT (_D10,_D12)
_LD (_X21_)
_REF (_X100_,8)
_REFF (1)
_MTR (_X20_,_Y40_,_M0_,8)
_DHSCS (100,_C255,_Y10_)
_DHSCR (200,_C255,_Y10_)
_DHSZ (1000,2000,_C251,_Y0_)
_SPD (_X0_,100,_D0)
_DPLSY (1000,_D0,_Y0_)
_PWM (_D10,50,_Y0_)
_PLSR (500,_D0,3600,_Y0_)
_LD (_X23_)
_SER (_D100,_D0,_D10,10)
_ABSD (_D300,_C0,_M0_,4)
_INCD (_D300,_C0,_M0_,4)
_TTMR (_D300,0)
_STMR (_T10,100,_M0_)
_ALT (_M0_)
_RAMP (_D1,_D2,_D3,1000)
_ROTC (_D200,10,2,_M0_)
_SORT (_D100,5,4,_D200,_D0)
_LD (_X24_)
_TKY (_X0_,_D0,_M0_)
_HKY (_X0_,_Y0_,_D0,_M0_)
_DSW (_X0_,_Y10_,_D0,1)
_SEGD (_D0,_K2Y10)
_SEGL (_D0,_Y0_,0)
_ARWS (_X10_,_D0,_Y0_,0)
_ASC ("ABCD    ",_D300)
_PR (_D300,_Y0_)
_FROM (1,29,_K4M0,1)
_TO (1,29,_K4M0,1)
_LD (_X25_)
_RS (_D200,_D0,_D500,_D1)
_PRUN (_K4X0,_K4M0)
_ASCI (_D100,_D200,4)
_HEX (_D20,_D10,4)
_CCD (_D100,_D0,10)
_VRRD (0,_D0)
_VRSC (1,_D1)
_PID (_D0,_D1,_D100,_D150)
_LD (_M8000_)
_DECMP (_D10,_D20,_M0_)
_DEZCP (_D20,_D30,_D0,_M3_)
_DEBCD (_D50,_D20)
_DEBIN (_D20,_D50)
_DEADD (_D10,_D20,_D50)
_DESUB (_D10,_D20,_D50)
_DEMUL (_D10,_D20,_D50)
_DEDIV (_D10,_D20,_D50)
_DESOR (_D10,_D20)
_INT (_D10,_D20)
_DSIN (_D50,_D60)
_DCOS (_D50,_D60)
_DTAN (_D50,_D60)
_SWAP (_D10)
_LD (_X26_)
_TCMP (10,30,50,_D0,_M0_)
_TZCP (_D20,_D30,_D0,_M3_)
_TADD (_D10,_D20,_D30)
_TSUB (_D10,_D20,_D30)
_TRD (_D0)
_TWR (_D10)
_LD (_X27_)
_GRY (1234,_K3Y10)
_GBIN (_K3X0,_D10)
_LD_EQ (200,_C10)
_OUT (_M50_)
_LD_GT (_D200,-30)
_OUT (_M51_)
_LD_GE (_D200,100)
_OUT (_M52_)
_LD_LT (_D200,10)
_OUT (_M53_)
_LD_LE (_D200,10)
_OUT (_M54_)
_LD_NE (_D330,_D440)
_OUT (_M55_)
_LD (_M8000_)
_MPS
_AND_EQ (200,_C10)
_OUT (_M10_)
_MRD
_AND_GT (100,_D10)
_OUT (_M11_)
_MRD
_AND_GE (100,_D10)
_OUT (_M12_)
_MRD
_AND_LT (200,_D10)
_OUT (_M13_)
_MRD
_AND_LE (_D10,_D20)
_OUT (_M14_)
_MPP
_AND_NE (_D20,_D30)
_OUT (_M15_)
_NOP
_LD (_M8000_)
_OR_EQ (200,_C10)
_OR_GT (200,_D10)
_OR_GE (200,_D20)
_OR_LT (300,_D30)
_OR_LE (400,_D40)
_OR_NE (500,_D50)
_OUT (_Y10_)
_FEND
_P2:
_LD (_M8_)
_OUT (_M9_)
_SRET
_I101:
_LD (_M8000_)
_INC (_D0)
_DEC (_D1)
_IRET
_END
}






作者: csgtli    時間: 2016-8-9 01:44
怎么用?
作者: zwk34    時間: 2016-9-20 22:03
看起來比梯形圖復(fù)雜多了,需要仔細閱讀。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1