在拿到da模塊說(shuō)明書(shū)時(shí),有很多人看不懂里面的說(shuō)的什么,怎么樣,對(duì)于ad和da是如何轉(zhuǎn)換的不清楚,今天就將一下轉(zhuǎn)換機(jī)制:
ad和da模塊中有個(gè)緩沖存儲(chǔ)器分配(bfm),它是與plc數(shù)據(jù)交換時(shí)暫時(shí)存放數(shù)據(jù)的地方,fx2n的bfm使用如下表:
bfm
很多人看不懂這個(gè)表說(shuō)的什么,首先bfm是16位存儲(chǔ),(plc中的16位、32位就是二進(jìn)制的位而不是10進(jìn)制)。
b15、b14、b13、b12、b11、b10、b9、b8、b7、b6、b5、b4、b3、b2、b1、b0
對(duì)于fx2da,我們只用到bfm的16和17兩個(gè)編號(hào),其他保留不用看,在#16里面,只用前8位,b7~b0,其他保留不用看。#17里面,只用到b2~b0,其他保留不用看。這就簡(jiǎn)單了。這個(gè)bfm怎么和plc進(jìn)行數(shù)據(jù)交換呢,用from和to指令來(lái)完成,form是從bfm中取數(shù)據(jù),to是存數(shù)據(jù)。
fx2da轉(zhuǎn)換的數(shù)字量最大為4000,也就是2^12,因此da模塊只能轉(zhuǎn)換12位數(shù)據(jù),而#16只能暫存儲(chǔ)8位數(shù)據(jù),怎么辦?那就分兩次以低8位和高4位順序進(jìn)行寫(xiě),所以才有低8位數(shù)據(jù)保持,不然第二次就把第一次寫(xiě)的覆蓋掉了。
#17里面有b2~b0,它的功能是:
b0:通過(guò)將1改變?yōu)?,通道2的d/a轉(zhuǎn)換開(kāi)始
b1:通過(guò)將1改變?yōu)?,通道2的d/a轉(zhuǎn)換開(kāi)始
b2:通過(guò)將1改變?yōu)?,d/a轉(zhuǎn)換的低8位數(shù)據(jù)保持。
這里是什么意思呢?
想要通道2的d/a轉(zhuǎn)換開(kāi)始,就必須要降b0的值從1變成0,怎么實(shí)現(xiàn)呢,先傳送個(gè)1給b0,再傳送個(gè)0就好了。
想要通道1的d/a轉(zhuǎn)換開(kāi)始,就必須要降b1的值從1變成0,怎么實(shí)現(xiàn)呢,先傳送個(gè)1給b1,再傳送個(gè)0就好了。
想要通d/a轉(zhuǎn)換的低8位數(shù)據(jù)保持,就必須要降b2的值從1變成0,怎么實(shí)現(xiàn)呢,先傳送個(gè)1給b2,再傳送個(gè)0就好了。
已說(shuō)明書(shū)例子來(lái)講解下如何實(shí)現(xiàn)的:
da模塊plc程序
a:數(shù)字?jǐn)?shù)據(jù)d100擴(kuò)展到輔助繼電器(m100~m115),k4m100表示m100~m115,k1表示連續(xù)4個(gè)m,例如下面的k2m100就表示m100~m107。(為什么要用m來(lái)表示d呢,因?yàn)槲抑晦D(zhuǎn)換12位,d是16位的)
d換成m(12位數(shù)據(jù)的傳輸)
m怎么能存儲(chǔ)數(shù)據(jù)呢,因此m是個(gè)位軟元件,只有斷開(kāi)(0)和閉合(1),而plc數(shù)據(jù)都是二進(jìn)制處理的,比如字軟元件d是16位的,所以就能通過(guò)m來(lái)表示,一個(gè)d需要16個(gè)m來(lái)儲(chǔ)存。
b:這條指令時(shí)將數(shù)據(jù)d100的低8位傳送到bfm的#16編號(hào)進(jìn)行輸出。
c:將d100的低8位寫(xiě)到#16后,還要寫(xiě)高4位,為了不覆蓋,得先把低8位保持,c的指令就是保持功能,h0004是16進(jìn)制的數(shù)字4.轉(zhuǎn)換成二進(jìn)制就是100,對(duì)應(yīng)b2b1b0;c的第一條指令就是將b2置1,第二條將b2置0,這樣就完成#17的低8位保持功能了。
c指令的低8位保持功能
e:e的指令就是d/a轉(zhuǎn)換,h0002是16進(jìn)制的數(shù)字2.轉(zhuǎn)換成二進(jìn)制就是010,對(duì)應(yīng)b2b1b0;c的第一條指令就是將b1置1,第二條將b1置0,這樣就完成#17d/a轉(zhuǎn)換功能。
da轉(zhuǎn)換開(kāi)始功能
以上就是da模塊與plc之間的數(shù)據(jù)轉(zhuǎn)換過(guò)程。