邵毅
沈陽機床(集團)有限責任公司 遼寧沈陽 110142
隨著數控機床發展的潮流,復合機床成為熱門產品,由于更多的不同加工過程復合在一臺機床上,因此需要大量的輔助功能M代碼來控制機床動作,簡化外部開關,提高機床自動化程度。西門子840D sl系統中只提供了M0~M99這100個動態M功能,可以直接對應PLC接口信號。如果需要M100以后的靜態M功能時,需要在PLC內進行破解編譯,才能形成PLC對應的接口[1-3]。這就造成每次增加一個靜態M功能時,都需要在PLC內部增加相應程序,不僅重復編制的程序過多,而且容易出現錯誤。因此有必要編制一個靜態M功能的解譯程序功能塊,來減少編制PLC程序的工作量,使程序變得模塊化,從而提高準確性。
輔助功能即M代碼,是用地址M和后面的數值組成的指令,實現不同的功能。西門子系統提供了靜態M功能從NCK到PLC的接口地址,具體見表1,可以對應單段程序中5組不同的M功能。

表1 靜態M功能從NCK到PLC的接口地址
所謂靜態M代碼解譯,就是當在單段程序中執行5組靜態M代碼時,第1組靜態M代碼對應的PLC地址DB21.DBX 58.0為1,此時DB21.DBW68內存儲的是M代碼的擴展地址,DB21.DBD70內存儲的是M代碼后面的數值,根據這3個地址內數值不同的變化在PLC內對應的輔助功能進行編程;第2組靜態M代碼對應的PLC地址DB21.DBX 58.1為1,DB21.DBW74與DB21.DBD76存儲著相應M代碼的擴展地址和后面的數值,以此類推。由此可以看出,只有將靜態M功能接口地址通過PLC程序處理后,才能得到一一對應的PLC地址,編程量是非常大的。
使用PLC編程軟件STEP7,建立一個用于存儲M功能解譯地址的DB塊,DB塊的容量為900個字節,解譯地址是DBX0.0~DBX112.3,用于存儲M100~M999共計900個M功能。靜態M代碼不像動態M代碼那樣,對應的PLC地址只在一個PLC的掃描周期內為1,而是一直為1,直到下一個靜態M代碼執行后,前一個才會變為0。因此在解譯程序塊中首先要對存儲DB塊做清0處理。在對靜態M功能接口地址存儲DB塊清0時,需要用雙字指針來確定解譯后的地址,雙字指針用于存儲器間接尋址,具有32bit的結構:0000 0000 0000 0BBB BBBB BBBB BBBB BXXX,其中0~2bit(3個X)的數值表示被尋址的位地址,3~18bit(16個B)的數值表示被尋址的字節地址。通過雙字指針確定具體地址byte.Bit,程序中DIB是將所對應的字節地址清零,因此要進行左移3位的操作。具體程序如下。

對單段程序中執行的靜態M代碼對應的PLC地址DB21.DBX58.0~DBX58.4循環5次進行檢測,當地址位由0變為1時,在對應的DB21.DBD70~DBD92讀取M后面的數值,經計算后將對應解譯地址DBX0.0~DBX112.3置1,完成解譯,具體程序如下。


調用解譯程序塊并賦予用于存儲M功能解譯DB塊的具體地址,例如DB200,那么當NC程序段中執行M100時,對應的PLC地址DB200.DBX0.0在PLC一個掃描周期內為1,PLC程序內就可以直接利用DB200.DBX0.0的上升沿進行實現具體功能的編程工作。這里需要注意的是此解譯程序塊只是第一通道并且M代碼的擴展地址為1的靜態M代碼,如果需要使用更多通道或者更多M代碼擴展地址,可以在本功能塊的基礎上改寫。
在了解西門子840D sl系統PLC程序對靜態M代碼的解譯原理后,編寫出了M100~M999的解譯程序塊,解譯結果準確,可以實現在西門子NC程序的單程序段上編制、執行多組M功能,增強了PLC程序的結構化、模塊化和通用性,同時大幅減少了編制PLC程序的工作量。