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