jww
級別: 探索解密
|
新手請教:1. 可不可以用PROFIBUS線進行MPI通信(在兩臺S7 300之間)? 2.我安裝的STEP7 V5.4中文版軟件編程窗口下左側目錄的“庫”里文件不全,只有SMATIC-NET-CP文件,如何補全? 敬請高手指教。謝謝! |
---|---|
|
deanhao
級別: *
|
1,可以的。 2 找一找庫文件,這個我倒是沒有遇到過。 |
---|---|
|
jww
級別: 探索解密
|
用PROFIBUS線進行MPI通信(在兩臺S7 300之間),是不是兩端接上DP頭,電阻都打在ON,然后按照MPI的編程操作就行了?我是這樣進行的,但兩臺300 PLC不通訊錯在哪里呢?請高手指教! |
---|---|
|
wwcwwc
級別: VIP會員
|
回519樓:請問你的硬件組態怎樣?發幾個圖片你看看 在組態完成后,加OB82;OB85;OB86;OB87;OB122塊上去. |
---|---|
|
jww
級別: 探索解密
|
感謝520樓,我用的兩臺PLC 是西門子300 CPU314 訂貨號是314-1AG14-0AB0,不能進行MPI通信(利用PROFIBUS線)的原因可能是這款PLC不支持PROFIBUS通信,它的硬件設置里就不能進行PROFIBUS通信設置。非常感謝,我說的對嗎? |
---|---|
|
hhjauto
級別: 探索解密
|
在FC中,定義臨時變量#TEMP12、#TEMP4、#TEMP5、#TEMP6、#TEMP7均為DWord類型。#TEMP12用于計算指針偏移量,#TEMP4-7用于指向4個ARRY[1……112]BOOL類型的數組)STL代碼如下: OPN #IN0 //打開相應的DB …… …… L DBW 8 //DBW8保存了一個值為112的INT數據 L 8 /I SLD 3 L P#DBX 0.0 //這里為何是用P#DBX0.0而不是用P#0.0?可否用P#0.0? +D T #TEMP12 //相加之后#TEMP12的內容是怎樣的? L P#DBX 10.0 T #TEMP4 L #TEMP12 +D T #TEMP6 //我的問題是:用到P#DBX byte.bit來相加,則高字節的內容是否相加?對尋址有無影響? L #TEMP12 +D T #TEMP7 L #TEMP12 +D T #TEMP5 L DBW 8 M001: T #TEMP3 …… …… A DBX[#TEMP4] A DBX[#TEMP5] = DBX[#TEMP6] …… …… L #TEMP3 LOOP M001 |
---|---|
|
hhjauto
級別: 探索解密
|
就我的理解,將P#DBX byte.bit裝入到32位指針中,指針的內容為1000_0100_0000_0BBB_BBBB_BBBB_BBBB_BXXX。而若是將這樣的2個32位指針相加,那么第25、26、27位是否一樣地也相加呢??則相加的結果是否會導致尋址不再指向DBX了??然而別人程序就是這么編的應該是沒錯的,有點想不通。我是新手,剛接觸S7300,望前輩或是明白人給予指點,感激不盡。 |
---|---|
|
deanhao
級別: *
|
這個編程我覺得有點不嚴謹,有可能會有莫名的問題。 首先要肯定你的理解是正確的,兩個雙字相加,是沒有那個位被放棄的,正如你說的25、26、27位也是相加。而這程序之所以出現正確結果是因為:他使用的是存儲器間接尋址,而該尋址類型都是區域內間接尋址,也就說1000_0100_0000_0BBB_BBBB_BBBB_BBBB_BXXX,比B高的位都是無效的,原則上是應該給清零的,以免出現不必要的麻煩。 就本程序而言,只有位號和字節號有效,高位也是相加只是無效,,因此你所說的區域代碼DBX DIX等就是無用的,所以編程的結果的會出現對的,但是建議把高位都清零,因此這個編程是不嚴謹的。 還有就是要會利用仿真監控,你可以監視累加器,地址寄存器,狀態字等等,很容易能看出來到底高位有沒有變化。 |
---|---|
|
deanhao
級別: *
|
羅嗦一下,你說的區域代碼是區域間間接尋址用的,可使用寄存器間接尋址。 |
---|---|
本帖最近評分記錄: |
hhjauto
級別: 探索解密
|
感謝deanhao的指點,也就是說尋址正確的原因在于A DBX[#TEMP4]這樣的指令中已經指定了尋址DBX了是嗎?就是說區域內尋址一般使用P#byte.bit裝入指針中,而在區域間尋址才使用P#M byte.bit這樣的數據裝入指針中,而后面的指令就可以直接使用A #TEMP4的形式了。PLCSIM電腦上有裝,還不熟悉怎么監視,還需慢慢摸索?傊芨兄x你的回答……一個人摸索真的是很郁悶的一件事情。此論壇真是個好地方。 |
---|---|
|
hhjauto
級別: 探索解密
|
“而后面的指令就可以直接使用A #TEMP4的形式了”,似乎不對,這樣的指令似乎是錯的,必須使用A DBX[#TEMP4],百度了一下,總算是明白了,寄存器間接尋址支持X [AR1,P#byte.bit]的形式。區域代碼的作用就在這里是吧?? |
---|---|
|
deanhao
級別: *
|
你的理解是正確的,以為上面已經指定區域,即區域內間接尋址,所以剩下的只用指定字節號和位號就可以了。 而寄存器的尋址可以使用你說的區域間,這時候的區域代碼就是很重要了。 但是我不贊成你給的程序的編程方式,因為很不規范回造成一些錯誤。 還有什么問題歡迎討論。 |
---|---|
|