<big id="a5mua"></big>

      <tt id="a5mua"><dfn id="a5mua"></dfn></tt>
      <wbr id="a5mua"><sup id="a5mua"></sup></wbr>

        
        

      1. 亚洲综合小综合中文字幕,国产久爱免费精品视频,精品国产品香蕉在线,国产午夜精品在人线播放,精品一二三四区在线观看,国产成人无码免费看视频软件 ,色欲久久人妻内射,午夜在线观看成人av
        zhang2601312
        級別: 探索解密
        精華主題: 0
        發帖數量: 26 個
        工控威望: 128 點
        下載積分: 671 分
        在線時間: 20(小時)
        注冊時間: 2016-08-16
        最后登錄: 2025-06-30
        查看zhang2601312的 主題 / 回貼
        樓主  發表于: 2025-06-12 20:48
        圖片:
        圖片:
        圖片:
        圖片:
        圖片:
        圖片:
        圖片:
        用的用戶自由通訊發送和接收功能塊。發送功能塊對下發送了一個讀取報文(01 03 00 12 00 04 EC 0C)然后就出現了一個問題。就發送這個報文讀取4個字節數據時接收的數據是沒問題的。但是我想多讀取幾個數據發送(01 03 00 12 00 10 EC 03)的話接收到的報文就和圖片1一樣亂的。這是為啥呢。問了論壇好多高手的意思估計是接收功能塊設置問題。但是我仔細看了幫助幾個模式(ADHOC設置位1或者0)都測試過了還是沒用。求助各位高手幫忙看下。十分感謝。PS:報文沒問題
        http200
        級別: 正式會員
        精華主題: 0
        發帖數量: 13 個
        工控威望: 57 點
        下載積分: 119 分
        在線時間: 5(小時)
        注冊時間: 2024-12-23
        最后登錄: 2025-07-03
        查看http200的 主題 / 回貼
        1樓  發表于: 2025-06-16 00:41
        開放式tcp亂序是因為發送字節數和接收字節數對不上,不足接收字節數的就會被plc先緩存起來
        樓主留言:
        對的對的,接收區的字節數設置少了,然后數據存儲位不夠的話就會從頭開始。所以看起來就像亂了一樣
        http200
        級別: 正式會員
        精華主題: 0
        發帖數量: 13 個
        工控威望: 57 點
        下載積分: 119 分
        在線時間: 5(小時)
        注冊時間: 2024-12-23
        最后登錄: 2025-07-03
        查看http200的 主題 / 回貼
        2樓  發表于: 2025-06-16 00:42
        前幾天測試開放式tcp也遇到一樣的問題,問deepseek和chatgpt解決的
        樓主留言:
        我也查了deepseek但是沒給有用的答復,可能是我的問題沒闡述清楚
        http200
        級別: 正式會員
        精華主題: 0
        發帖數量: 13 個
        工控威望: 57 點
        下載積分: 119 分
        在線時間: 5(小時)
        注冊時間: 2024-12-23
        最后登錄: 2025-07-03
        查看http200的 主題 / 回貼
        3樓  發表于: 2025-06-16 00:42
        您遇到的數據順序錯亂問題是由于**TCP協議本身的無邊界性和PLC緩沖區處理機制**共同導致的。以下是具體原因和解決方案:

        ---

        ### **問題根源分析**
        1. **TCP流式協議特性**  
           TCP是字節流協議,不保證應用層消息的邊界。若客戶端快速連續發送多組數據,PLC可能將多次發送的數據合并到同一接收緩沖區(如網絡延遲或PLC處理速度慢時)。

        2. **PLC緩沖區覆蓋機制**  
           S7-1200的`TRCV`指令默認采用**循環緩沖區**(FIFO機制)。當新數據到達時,會從緩沖區的當前指針位置開始覆蓋舊數據,導致看似"亂序"。

        3. **字節對齊差異**  
           如果客戶端發送時未顯式指定字節序(如大端/小端),而PLC默認按大端序解析,可能引發分段錯誤(但您的案例中實際是整體偏移,非字節反轉)。

        ---

        ### **解決方案**
        #### **(1) 顯式定義應用層協議**
        在數據包中加入**幀頭**和**幀尾**標識,例如:
        ```plaintext
        [頭標識:0xAA][數據長度:1字節][數據:N字節][校驗和:1字節][尾標識:0x55]
        ```
        PLC側通過循環檢查緩沖區匹配完整幀后再處理。

        #### **(2) 修改TRCV參數配置**
        ```pascal
        TRCV(
            REQ     := TRUE,        // 持續使能
            CONT    := TRUE,        // 保持連接
            DATA    := #ReceiveBuf, // 接收緩沖區
            LEN     := 20,          // 預期接收長度
            RCVD_LEN=> #ActualLen,  // 實際接收長度輸出
            BUSY    => #BusyFlag);
        ```
        關鍵點:
        - 設置`LEN`與發送方嚴格一致(您已設為20字節)。
        - 監控`RCVD_LEN`確認每次接收的實際字節數。

        #### **(3) 強制單次接收同步**
        在客戶端每次發送后增加延遲(如100ms),或通過PLC程序控制:
        ```pascal
        IF #FirstReceive THEN
            TRCV(REQ := TRUE);      // 首次觸發
            #FirstReceive := FALSE;
        ELSE
            TRCV(REQ := NOT #BusyFlag); // 上次接收完成后再請求
        END_IF;
        ```

        #### **(4) 使用`TRCV_C`替代`TRCV`**
        `TRCV_C`集成連接管理,可減少緩沖區沖突:
        ```pascal
        TRCV_C(
            CONT    := TRUE,
            LEN     := 20,
            DATA    := #ReceiveBuf,
            RCVD_LEN=> #ActualLen);
        ```

        ---

        ### **您的數據案例分析**
        - **原始發送數據**(16進制):
          ```plaintext
          15 3E 14 24 54 26 4E 28 51 29 53 AA 56 B0 2D 2D 5C 75 2F C8
          ```
        - **PLC接收數據**:
          ```plaintext
          2D 2D 5C 75 2F C8 15 3E 14 24 54 26 4E 28 51 29 53 AA 56 B0
          ```
          **現象解釋**:  
          數據被**環形偏移6字節**,說明PLC緩沖區中殘留了之前未及時讀取的6字節數據,新數據從緩沖區第7字節開始寫入,形成"拼接"效果。

        ---

        ### **終極調試建議**
        1. **清空緩沖區**  
           在建立連接后、首次接收前,調用`TRCV`連續讀取直到`BUSY`=FALSE,丟棄舊數據。

        2. **Wireshark抓包驗證**  
           過濾PLC的IP和端口,確認客戶端是否真正按預期順序發送(排除調試助手本身問題)。

        3. **PLC側診斷**  
           在線監視`TRCV`的`RCVD_LEN`和`STATUS`,正常時應返回`16#7000`(無錯誤)。

        4. **代碼示例(清空緩沖區)**  
        ```pascal
        // 初始化階段清空緩沖區
        #TempBuffer := ARRAY[1..100] OF BYTE; // 臨時緩沖區
        WHILE TRUE DO
            TRCV(
                REQ  := TRUE,
                DATA := #TempBuffer,
                LEN  := 100,
                BUSY => #IsBusy);
            IF NOT #IsBusy THEN EXIT; END_IF;
        END_WHILE;
        ```

        ---

        通過以上方法,您應該能解決數據錯序問題。如果仍有異常,請檢查:
        - 客戶端是否啟用了Nagle算法(建議禁用)
        - PLC的OB1循環時間是否過短(建議≥50ms)
        - 是否有多余的`TRCV`調用覆蓋了緩沖區
        樓主留言:
        謝謝回復解答

        主站蜘蛛池模板: 国产精品色一区二区三区 | 国产成人精彩在线视频| 在线观看中文字幕国产码| 四虎库影成人在线播放| 精品国产福利一区二区在线| 亚洲少妇色图在线观看| 中国熟女仑乱hd| 国产小嫩模无套中出| 久久精品国产一区二区三| 亚洲18禁一区二区三区| 久久国产精品波多野结衣| 久久96热在精品国产高清| 国产精品无码av不卡| 日日夜夜噜噜视频| 亚洲理论在线A中文字幕| 欧美日韩在线视频不卡一区二区三区| 亚洲国产天堂久久综合网| 在线日韩一区二区| 日日摸夜夜添夜夜添国产三级| 国产成人无码免费视频麻豆| 国产综合色产在线视频欧美| XXXXXHD亚洲日本HD| 伊人久久精品亚洲午夜| 中文字幕日韩精品人妻| 国产精品国产自线拍免费软件| 国产成人精品无码专区| 亚洲男人天堂av在线| 国产二区三区不卡免费| 日本怡春院一区二区三区| 漂亮的人妻不敢呻吟被中出| 亚洲精品熟女一区二区| 亚洲成av人片不卡无码久久| 一区二区三区四区国产综合 | 国产成人精品1024免费下载| 亚洲欧美偷拍另类A∨| 被黑人玩得站不起来| 亚洲精品无码日韩国产不卡av| 97亚洲熟妇自偷自拍另类图片| 亚洲国产成人久久综合区| 青青草原国产精品啪啪视频 | 国内精品极品久久免费看|