|
各位同學(xué)是否有以下疑惑:
1. INT數(shù)據(jù)類型與WORD 數(shù)據(jù)類型有何區(qū)別?DINT與TIME呢?
2. S5 TIME數(shù)據(jù)類型結(jié)構(gòu)是什么樣的?怎樣自行修改或生成符合S5 TIME數(shù)據(jù)類型的值?
3. 儀表傳送一組流量數(shù)值,是用字符串方式發(fā)送,接收到數(shù)值后,怎樣還原為浮點(diǎn)數(shù)?
4. MOVE指令與數(shù)據(jù)類型轉(zhuǎn)換指令怎樣區(qū)分?都有什么樣的應(yīng)用場(chǎng)合?
5. 隱式轉(zhuǎn)換和顯示轉(zhuǎn)換是什么含義,在TIA 博途中,設(shè)置IEC檢查對(duì)數(shù)據(jù)類型轉(zhuǎn)換會(huì)有什么影響。
另外,復(fù)雜數(shù)據(jù)類型的應(yīng)用,如:STRUCT與UDT的應(yīng)用與區(qū)別、*數(shù)組、ANY數(shù)據(jù)類型,各種數(shù)據(jù)類型的存儲(chǔ)與尋址方式,相互轉(zhuǎn)換也在本話題討論范圍之內(nèi),大家不要吝嗇筆墨,踴躍發(fā)言,談?wù)剳?yīng)用過(guò)程中的疑惑與認(rèn)識(shí),希望大家收獲多多!
字符串轉(zhuǎn)換為浮點(diǎn)數(shù)的方法
可以用程序編輯器的IEC庫(kù)中的FC39 STRNG_R,將字符串轉(zhuǎn)換為REAL數(shù)據(jù)類型格式變量。
用IEC庫(kù)中的FC30 R_STRNG,可以將REAL格式的變量轉(zhuǎn)換為字符串。
字符串由符號(hào)、小數(shù)點(diǎn)前的1位數(shù)字、小數(shù)點(diǎn)、小數(shù)點(diǎn)后的7位數(shù)字、E和2位指數(shù)數(shù)字字符組成。
下面是一個(gè)例程:
在DB1中定義字符串STR1[14],下面是OB1中的程序:
CALL "R_STRNG" //調(diào)用FC30,將REAL格式變量轉(zhuǎn)換為字符串
IN :=1.234567e+003
RET_VAL:=DB1.STR1
CALL "STRNG_R" //調(diào)用FC39,將將字符串轉(zhuǎn)換為REAL格式變量
S :=DB1.STR1
RET_VAL:=MD0
由監(jiān)控可知FC30將1.234567e+003轉(zhuǎn)換后,DB1.STR1中的字符串為’+0.1234567E+04’。用FC39將字符串DB1.STR1轉(zhuǎn)換后,MD0中的浮點(diǎn)數(shù)為1.234567e+003。
一、在S7編程中字符類型[CHAR]使用比較少見,但在一些與條碼掃描的通訊設(shè)備中卻較為常見,例如工裝線產(chǎn)品質(zhì)檢和計(jì)數(shù)或商場(chǎng)收銀系統(tǒng)。
二、這類條碼掃描設(shè)備通常先與PLC進(jìn)行RS232C或RS485串口通訊后讀入CHAR數(shù)據(jù)類型,然后經(jīng)組合和轉(zhuǎn)換后,在觸摸屏Touch中顯示。
三、其實(shí)CHAR數(shù)據(jù)類型處理很簡(jiǎn)單,具體使用事項(xiàng)和方法如下:
1、首先CHAR字符采用ASCII編碼;
2、其次CHAR字符占用一個(gè)Byte;
3、因此將讀取的CHAR字符存放至定義為CHAR類型的存儲(chǔ)區(qū)變量中,例如MB2→CHAR即可;
4、如果要對(duì)定義的CHAR類型的變量賦值,需對(duì)輸入的字符常量加一對(duì)單引號(hào),例如:'$'、'F'、'【'、'?'。
5、使用效果見以下ASCII碼表與程序?qū)φ請(qǐng)D。

2. S5 TIME數(shù)據(jù)類型結(jié)構(gòu)是什么樣的?怎樣自行修改或生成符合S5 TIME數(shù)據(jù)類型的值?
1) S5TIME為16位數(shù)據(jù),BCD碼格式。當(dāng)使用S5TIME時(shí),最大計(jì)時(shí)為S5T#2h46m30s(9990s).
格式如:2#0011 1001 1001 1001,即S5T#2h46m30s
10s 9 9 9
第14,13位表示時(shí)間基準(zhǔn),00為10ms,01為100ms,10為1s,11為10s.上例為11,即10s時(shí)基。
后12位為BCD碼表示的時(shí)間值,上例為999,則999*10s=2h46m30s.
2)知道S5TIME的格式后,就可以在程序中正確的使用了。常見的如在觸摸屏中有個(gè)INT變量設(shè)定的時(shí)間, 在程序中要轉(zhuǎn)換成S5TIME.(INT轉(zhuǎn)S5TIME).
因?yàn)镾5TIME為BCD碼格式,所以要先將INT轉(zhuǎn)BCD(ITB).記得一定要轉(zhuǎn)?梢钥3樓的例子。我們也可以 自己編程做一下實(shí)驗(yàn)。ITB不寫的話就會(huì)報(bào)錯(cuò)。
L 999 //0000 0011 1110 0111
ITB //0000 1001 1001 1001
L W#16#3000 //0011 0000 0000 0000
OW
T MW 700 //0011 1001 1001 1001 (S5T#2h46m30s)
A M 100.0
L MW 700
SD T 1
3)其他關(guān)于INT,TIME和S5TIME的轉(zhuǎn)換見下帖。
http://www.ad.siemens.com.cn/clu ... d=4&a_id=898840
字符串?dāng)?shù)據(jù)類型[STRING]的使用也比較少見,常用于存儲(chǔ)消息文本。
關(guān)于STRING類型變量使用事項(xiàng)如下:
1、STRING變量字符串以ASCII編碼存儲(chǔ)每個(gè)字符,最大長(zhǎng)度256Byte,前兩個(gè)Byte存儲(chǔ)字符串長(zhǎng)度信息,所以STRING變量最多包含254個(gè)字符。其中第一個(gè)Byte存儲(chǔ)最大長(zhǎng)度;第二個(gè)Byte存儲(chǔ)實(shí)際字符長(zhǎng)度。
2、STRING類型的變量可傳遞至相同類型(即相同的STRING長(zhǎng)度)的塊參數(shù)中,也可以傳遞至POINTER或ANY類型的FC/FB塊參數(shù)中。
3、給STRING變量賦值常量需使用一對(duì)單引號(hào),例如:'String'、'S7'、'failure_4'。
4、如果用ASCII編碼的字符賦值,則該字符也必需使用一對(duì)單引號(hào),而如果包含用于控制術(shù)語(yǔ)的特殊字符,則必需在字符前添加前綴符號(hào)$。例如:$$→美元字符;$P→換頁(yè)字符;$L→換行字符;$R→回車字符;$T→空格字符。
5、STRING變量定義聲明和初始化方法:變量名稱:STRING[最大字符數(shù)]: '初始化文本',變量定義聲明時(shí)可以無(wú)初始化文本。例如:FALT_SIG:STRING 'Motor failure_4'、Warning:STRING [50] ''。
如果變量定義聲明時(shí)未指定最大字符數(shù),那么STL/LAD/FBD程序編輯器則自動(dòng)默認(rèn)長(zhǎng)度最大為254個(gè)字符。
6、可使用基本的STL指令訪問STRING變量的各個(gè)字符。例如:L FALT_SIG[5] //裝載變量FALT_SIG的第5個(gè)字符,即'r'。
7、還可以使用IEC庫(kù)的FC功能塊實(shí)現(xiàn)對(duì)STRING變量的訪問和處理。
數(shù)據(jù)類型是什么?
數(shù)據(jù)類型是什么?數(shù)據(jù)類型是人為規(guī)定的數(shù)據(jù)的屬性。在計(jì)算機(jī)和PLC中,數(shù)據(jù)實(shí)際上以二進(jìn)制數(shù)的形式儲(chǔ)存。按長(zhǎng)度分為1位、8位、16位、32位的二進(jìn)制數(shù)據(jù)。
除了數(shù)據(jù)的長(zhǎng)度,數(shù)據(jù)類型包含了更多的內(nèi)容,例如32位的數(shù)據(jù)類型有雙字、32位整數(shù)、Time、浮點(diǎn)數(shù)、TIME_OF_DAY等。
數(shù)據(jù)的數(shù)據(jù)類型需要在符號(hào)表、塊的局部變量表中定義,因此數(shù)據(jù)類型是人為指定的數(shù)據(jù)的屬性。
指令和塊的輸入、輸出參數(shù)的實(shí)參的數(shù)據(jù)類型必須與對(duì)應(yīng)的形參要求的相同,否則程序?qū)?huì)出錯(cuò)。
OB40的參數(shù)OB40_MDL_ADDR的數(shù)據(jù)類型為WORD,不能直接用于要求數(shù)據(jù)類型為INT的整數(shù)比較指令。怎樣解決這一難題呢?在梯形圖中,可以用MOVE指令把OB40_MDL_ADDR的值傳送給沒有定義數(shù)據(jù)類型的一個(gè)絕對(duì)地址,例如MW10,MW10就可以用于比較指令了。MW10并沒有因此自動(dòng)獲得數(shù)據(jù)類型INT,只是CPU“認(rèn)為”MW10中的數(shù)據(jù)類型是INT,CPU被我們蒙騙了!
我見過(guò)不良小販把白色的小雞染成五顏六色來(lái)騙小孩,放到水里一洗,小雞的彩色就消失了。如果把小雞看成數(shù)據(jù),染的顏色就是數(shù)據(jù)類型。把定義了數(shù)據(jù)類型的數(shù)據(jù)裝入絕對(duì)地址MW10或累加器(累加器也是一個(gè)特殊的絕對(duì)地址),數(shù)據(jù)類型的屬性就被剝?nèi)チ耍皇O鲁嗦懵愕臄?shù)據(jù),就像小雞的顏色被水洗掉了一樣。這時(shí)就可以把數(shù)據(jù)當(dāng)作規(guī)定了長(zhǎng)度的各種數(shù)據(jù)類型來(lái)使用。
|
|