在進行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
+關注
關注
5051文章
14595瀏覽量
486936 -
西門子
+關注
關注
98文章
3312瀏覽量
120382 -
PC
+關注
關注
9文章
2167瀏覽量
159333
原文標題:西門子PLC-如何讀取字符里數
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
西門子PLC如何使用Modbus 485通訊傳輸接收數據
【教程】Profinet分布式IO(P31系列)與西門子PLC S7-200smart 連接例程
宏集方案 | 如何輕松管理西門子S7 PLC?S7Comm: 與西門子 PLC 直接通信的關鍵
使用C#實現西門子PLC數據定時讀取保存
plc以太網通訊模塊:西門子 S7-300PLC 與 S7-1200、觸摸屏及變頻器通訊案例
開疆智能ModbusTCP轉Profient網關連接西門子PLC與川崎機器人配置案例
如何破解三菱PLC與西門子PLC的通訊難題
Profinet轉CAN網關模塊對實現西門子PLC與CAN變頻器協同通信的助力研究
工業智能網關可以采集西門子PLC嗎
OPC UA數采網關實現西門子PLC數據采集到MES平臺
EtherCAT轉ProfiNet西門子1200PLC與伺服電機通訊案例全解
MCGS觸摸屏與西門子S7系列PLC以太網通信
西門子PLC中如何讀取字符里數?
評論