SBOBET登录地址

歡迎光臨入喜工業控制技術(上海)有限公司
當前位置
首頁 > 新聞中心
西門子關于使用BLKMOV指令由BYTE轉換位字符串的疑問
2021/7/6 10:39:13
西門子關于使用BLKMOV指令由BYTE轉換位字符串的疑問

請問可位大神,在DB塊中,有一個區間是BYTE【120】,此區間是PC傳送給PLC的,并且內容應該是一串字符串。此時我使用了BLKMOV將BYTE[120]這個區間傳送到另一個我定義的STRING[120]的區間,轉換位字符串。這里有兩個問題:一是聽說前兩個BYTE是字符串的最長長度和有效長度,從第三個BYTE開始才是字符串內容,但是我實際試下來好像并非如此,從第一個BYTE開始就是內容了,請問這是怎么回事?第二個問題是究竟從BYTE【120】傳到STRING【120】他里面的內部規則是什么樣子的?


圖片說明:

           

1、你說的是通訊是系統加的數據流的頭和尾,接收后頭尾自動刪除了,所以你看不到這個信息,除非你自己寫通訊功能。
2、它是一一對應的
首先需要厘清2個問題:
1、BLKMOV指令,僅僅以“塊BLOCK”為單位搬運數據,沒有轉換數據類型的功能,是一個空間對另一個空間的存儲內容(二進制序列)的復制,不涉及數據類型。
2、字節BYTE并不等同CHAR。CHAR字符在計算機上存儲,是以其ASCII碼存儲的,占一個字節BTYE。換句話說,任何一個字符CHAR有一個BYTE數據與之對應。但并不是所有的byte類型數據都有與之對應的字符,如00H,進行ASCII碼轉換是空操作,沒有對應任何字符。
因此,你在Array of Byte到String進行轉換時,必須確認每個字節的值的有效性。
3、字符數組,不等同于字符串。字符數組是字符(ASCII碼)為元素的一個隊列。而字符串,除了這個隊列外,在隊列之前還必須有兩個字節用于申明:這個隊列允許的最大長度是多少,當前實際長度是多少,多了兩個字節。
再回到你的問題,建議分兩步實現:
1、BLKMOV的目標操作數,修改為:P#DB1074.DBX956.0為P#DB1074.DBX958.0后移兩個字節。
2、對DB1074.DBb957賦值120.

用 Chars_TO_Strg 指令。
如圖是數據定義、以及測試的示例
資料
https://www.ad.siemens.com.cn/productportal/prods/s7-1200_plc_easy_plus/07-Program/03-instruction/02-Extend/02-String.htm


圖片說明:

  

聯系方式
CONTACT US

電話:13818569113      15721373211

郵箱:fushidianji@139.com

網址:http://morethanzerosum.com

地址:上海青浦區北青公路7171號111-112室

用手機掃描二維碼關閉