zhou1211
級別: 略有小成
|
1: 那比如說做通訊的時候,考慮到對方讀取具體地址,如: stAdsCom at %mw1000 : ST_ADS; 在博途中如何實現 2: 一般codesys無視對象類型是這樣的 VAR pAdr : pvoid;(目標變量初始指針) pByte : pointer to byte;(指針指向byte數據類型,相當于 ref to) wWordBase : word; END_VAR //程序 pAdr := adr(wWordBase ); pByte := pAdr; pByte^ := 16#fe; pByte := pAdr +1; pByte^ := 16# ff; //結果是地址指向Word類型的wWordBase 用byte通過指針偏移一次組合而成 這種情況常用于將數據分解成原始byte,再組合成自定義類型的情況,非常常用 請問這種寫指針偏移的方法博途怎么做? |
---|---|
本帖最近評分記錄: |
wlmissyou
級別: 探索解密
|
回答: 第一個問題:這個要具體到何種通信方式,你的問題有些籠統 第二個問題:在博圖平臺上有 300 400 和1200 1500兩個系列,300 400使用非優化的數據塊,所以對變量的高低字節或高低字,使用AT指令來實現聲明。如下示意: CrcVariable : Word; // CRC校驗用變量字 CrcByte AT CrcVariable : Array[0..1] of Byte; // CRC校驗用變量的高低字節 1200和1500可以使用符號尋址的后面跟上絕對尋址的位或字節或字。請參考以下網址: https://support.industry.siemens.com/cs/document/57374718/如何在-step-7-(tia-portal)-中使用符號方式按位,字節,或字訪問非結構?dti=0&lc=zh-CN |
---|---|
|
zhou1211
級別: 略有小成
|
1. 命名就已經表明了例子的通訊方式 stAds 當然是指ADS通訊,并且通訊中廣泛用到,那便是泛指,為何一定要限定通訊方式 這個定義本來就是為了通訊能找到通訊起始位置,任何類型通訊幾乎都適用; 2. 如果at是用在這里,那作用不是很明顯, 針對第二個我必須再舉個例子: 比如modbus接收到目標回復數據,這個數據長度肯定不定。用指針我就不用關心有多長,那幀數據中有交代,當然可以用個255數組全部包下; 但這肯定是下下搞法,占用內存 [ 此帖被zhou1211在2021-01-19 13:54重新編輯 ] |
---|---|
|