在進(jìn)行PLC與PC進(jìn)行TCP通訊時如何運用CP傳過來的數(shù)值呢?
下面我做兩種方式的解析: 1.簡單粗暴!2.精簡功能塊.
1.簡單粗暴!
ASCII字符和等價的十六進(jìn)制值
簡單粗暴的轉(zhuǎn)換方式:
有時我們會用PC給西門子PLC發(fā)送幾個字符,我們?nèi)绾巫x取字符呢?
我們先要進(jìn)行一個BCD轉(zhuǎn)2進(jìn)制的轉(zhuǎn)換,然后再運用減法取出我們需要的數(shù)
1.將字符存儲的字節(jié)轉(zhuǎn)存到字里
MOVE (分配值)通過啟用EN輸入來激活。在IN輸入端指定的值將復(fù)制到在OUT輸出端指定的地址。ENO與EN的邏輯狀態(tài)相同。MOVE只能復(fù)制BYTE、WORD或DWORD數(shù)據(jù)對象。
2.使 BCD碼轉(zhuǎn)換整數(shù)
BCD_I (BCD碼轉(zhuǎn)換為整型)將參數(shù)IN的內(nèi)容以三位BCD碼數(shù)字(+/- 999)讀取,并將其轉(zhuǎn)換為整型值(16位)。整型值的結(jié)果通過參數(shù)OUT輸出。
3. 三進(jìn)行減數(shù)運算將字符格式的標(biāo)示30減去,剩下的就是字符的數(shù)轉(zhuǎn)化成了整數(shù)
SUB_I 減去整數(shù):在啟用(EN)輸入端通過邏輯"1"激活SUB_I (減去整數(shù))。從IN1中減去IN2,并通過OUT查看結(jié)果。如果該結(jié)果超出了整數(shù)(16位)允許的范圍,OV位和OS位將為"1"并且ENO為邏輯"0",這樣便不執(zhí)行此數(shù)學(xué)框后由ENO連接的其它函數(shù)(層疊排列)。
2.精簡功能塊.
使用西門子標(biāo)準(zhǔn)塊:
專門轉(zhuǎn)換字符為16進(jìn)制的FC97
FC94
ATH功能將IN指向的ASCII字符串轉(zhuǎn)換為壓縮十六進(jìn)制數(shù)字,然后將其存儲在OUT指向的目標(biāo)表格中。由于ASCII字符需要8位,而十六進(jìn)制數(shù)字只需要4位,輸出字長度僅是字長度的一半。按其讀入順序轉(zhuǎn)換ASCII字符并將結(jié)果置于十六進(jìn)制輸出中。如果ASCII字符數(shù)為奇數(shù),則最后轉(zhuǎn)換的十六進(jìn)制數(shù)字的最右側(cè)半個字節(jié)以零填充。
IN :*Pointer 指向ASCII字符串的起始位置。
N :INT 要轉(zhuǎn)換的ASCII輸入字符數(shù)
OUT :*Pointer 指向表格的起始位置。
如果輸入I0.0的信號狀態(tài)為1 (激活),則執(zhí)行ATH指令。在本例中,輸入?yún)?shù)N為5表示要轉(zhuǎn)換五個ASCII字符。ASCII字符以IN指針位置DB1.DBX10.0為起點,存儲在數(shù)據(jù)塊1中。輸出字符串將以O(shè)UT指針位置DB2.DBX0.0 (數(shù)據(jù)塊2)為起點存儲。由于ASCII輸入字符數(shù)為奇數(shù),最后一個十六進(jìn)制位最右邊的半個字節(jié)中的值全部為零,從而生成十六進(jìn)制值0xC0。(有關(guān)每個ASCII字符的等價十六進(jìn)制值,請參考下表。)
給入的字符
輸出的16進(jìn)制數(shù)
例子:
DB1里的字符數(shù)
DB2里的給定值
原文標(biāo)題:西門子PLC-如何讀取字符里數(shù)
文章出處:【微信公眾號:機器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責(zé)任編輯:haq
-
plc
+關(guān)注
關(guān)注
5006文章
13107瀏覽量
461455 -
西門子
+關(guān)注
關(guān)注
93文章
2996瀏覽量
115491 -
PC
+關(guān)注
關(guān)注
9文章
2056瀏覽量
153934
原文標(biāo)題:西門子PLC-如何讀取字符里數(shù)
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論