? 精品一区二区三区免费视频,国产白嫩在线观看视频,久久99国产综合精品女同

    
    

      您所在的位置:首頁 >> 技術天地 >>正文
      分享34K

      松下PLC與PC機的通用通訊

      發布時間: 2016-09-06 02:09:37 來源:深圳市智控科技有限公司

      核心提示: 一 引言 PLC和PC機的通信,是普遍遇到的一種應用場景,對于大部分的開發者來說,實現松下協議有些復雜,現實首選的通信方式為通用協議,當利用winpro的IEC編程環境時,可以靈活的使用ST開發語言,開發出復雜的應答通信協議。

      二 系統硬件組成和連接

       

      1丶FPX-C30T為系統的核心組成。

       

      2丶PLC使用自帶的COM0。

       

      3丶松下的5針通信電纜用于和PC機的串口通信。

       

      4丶PC機采用市售的USB轉232口和松下的串口線連接。

       

      三 項目的建立和配置

       

      項目的建立,選擇PLC和開發語言如下

      串口配置如下


       

      四 PLC和PC之間的通訊協議和數據定義

       

      命令采用定長幀,PC為主,PLC為從,所有的幀都是采用應答的方式。

       

      幀格式如下

      PC機發送幀,長度為固定20個字節

      幀頭      命令      命令附加數據     LRC校驗

      0x25 0x25 cmdL cmdHdata0 ... Data13 LRCL LRCH

      動作

      cmd指令代碼

      動作1

      0x0001

      動作2

      0x0002

      動作3

      0x0003

       

      PLC應答幀,長度為固定的6個字節

      幀頭      應答命令      LRC校驗

      0x25 0x25 cmdLcmdH    LRCL LRCH

      正確應答時為PC機發送的命令,目前唯一的錯誤應答命令為0x0080幀校驗錯誤。

       

      幀頭為固定的0x25 0x25,方便幀頭定位。

       

      五丶程序說明。

       

      思路:

      收字符是系統后臺自動進行的,PLC程序判斷收到的字符,如果字符不為幀頭,0x25 0x025,則清除緩存,如果幀頭則等收到20個字節后,首先判斷校驗碼,如果校驗碼正確,則根據cmd指令做動作并應答,如果校驗錯誤,則反饋給PC幀錯誤應答。

       

      LRC:

      除幀頭之外有效16位數據的累加和

             lrc := 0;

             fori := 1to8by1do

                 lrc := lrc + recvbuff[i];

             end_for;

       

      如何清除接受緩存:

      使用ClearReceiveBuffer(SYS_TOOL_PORT):

       

       

      如何判斷收到的字符長度:

      接受緩存的第一個字為收到的字符長度,例如DT100為接受緩存起始的話,那么DT100中就是接收到的字符長度。

       

      如何發送字符:

      使用函數

      SendData(Port := SYS_TOOL_PORT, Start := sendbuff[0], NumberOfBytes := 6);

      注意sendbuff[0]為發送字符的剩余數量,所以真正開始的字符要從sendbuff[1]開始。

       

      從上面可以看到,winpro的開發非常類似于c語言或者basic語言的開發方式,函數指令也是很人性化的命名方式,便于開發者的記憶和使用

      六、程序代碼

       

      (*初始化發送字符數組  *)

      if(sys_bIsFirstScan) then

          fori := 0to9by1do

             sendbuff[i] := 0;

          end_for;

      end_if;

       

      (* 收到的字符串 *)

      if (recvbuff[0] >= 2) then

          (* 如果收到的字符不為協議的起始,則清除收到的緩存 *)

          if (recvbuff[1] <>16#2525) then

             ClearReceiveBuffer(SYS_TOOL_PORT);

          elsif (recvbuff[0] = 18) then     

             (* 正確,則校驗后處理 *)

             lrc := 0;

             fori := 1to8by1do

                 lrc := lrc + recvbuff[i];

             end_for;

             if (lrc = recvbuff[9]) then

                 if (recvbuff[1] = 16#0001) then

                    (* 動作1處理,略*)

                   

                    (* 應答pc機 *)

                    sendbuff[0] := 6;

                    sendbuff[0] := 16#2525;

                    sendbuff[1] := 16#0001;

                    sendbuff[2] := 16#0001;

                    SendData(Port := SYS_TOOL_PORT, Start := sendbuff[0], NumberOfBytes := 6);                           

                 elsif (recvbuff[1] = 16#0002) then

                    (* 動作2處理,略*)

                   

                    (* 應答pc機 *)

                    sendbuff[0] := 6;

                    sendbuff[0] := 16#2525;

                    sendbuff[1] := 16#0002;

                    sendbuff[2] := 16#0002;

                    SendData(Port := SYS_TOOL_PORT, Start := sendbuff[0], NumberOfBytes := 6);

                 elsif (recvbuff[1] = 16#0003) then

                    (* 動作3處理,略*)

                   

                    (* 應答pc機 *)

                    sendbuff[0] := 6;

                    sendbuff[0] := 16#2525;

                    sendbuff[1] := 16#0003;

                    sendbuff[2] := 16#0003;

                    SendData(Port := SYS_TOOL_PORT, Start := sendbuff[0], NumberOfBytes := 6);

                 end_if;

       

             else

                 (* 應答lrc錯誤 *)

                 sendbuff[0] := 6;

                 sendbuff[0] := 16#2525;

                 sendbuff[1] := 16#0080;

                 sendbuff[2] := 16#0080;

                

                 SendData(Port := SYS_TOOL_PORT, Start := sendbuff[0], NumberOfBytes := 6);

             end_if;

       

             ClearReceiveBuffer(SYS_TOOL_PORT);

          end_if;

      end_if;

       

      【免責聲明】所刊原創內容之本文僅代表作者本人觀點,與新戰略機器人網無關。新戰略機器人網站對文中陳述、觀點判斷保持中立。本網轉載自其它媒體的信息,轉載目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責。

      【版權聲明】凡本網注明“來源:xzl機器人”的所有作品,著作權屬于新戰略機器人網站所有,未經本站之同意或授權,任何人不得以任何形式重制、轉載、散布、引用、變更、播送或出版該內容之全部或局部,亦不得有其他任何違反本站著作權之行為。違反上述聲明者,本網將追究其相關法律責任。轉載、散布、引用須注明原文來源。

      分享到:
      ?
      關閉對聯廣告
      頂部微信二維碼微博二維碼
      底部
      掃描微信二維碼關注我為好友
      掃描微博二維碼關注我為好友
      亚洲国产精品ⅴa在线观看| 久久99精品久久久久久久不卡| 青草国产精品久久久久久| 少妇人妻偷人精品无码视频| 久久精品天天中文字幕人妻| 精品一区二区三区在线视频| 国模精品一区二区三区| 四虎精品影院2022| 国产精品禁18久久久夂久| 国产成人精品久久亚洲高清不卡| 久久免费99精品国产自在现线| 好大好湿好硬好爽好深免费视频| 岛国精品一区免费视频在线观看| 国产内地精品毛片视频| 青青草原视频在线| 国产亚洲综合成人91精品| 精品人妻V?出轨中文字幕| 99青草青草久热精品视频| 精品久久久久久中文字幕| 女人高潮内射99精品| 精品国产sm捆绑最大网免费站| 国产精品高清在线| 亚洲欧洲美洲无码精品VA| 亚洲综合一区二区国产精品| 在线观看亚洲精品福利片 | 精品视频无码一区二区三区| 国产激情精品一区二区三区| ww亚洲ww在线观看国产| 亚洲欧美日韩精品| 伊人久久精品无码二区麻豆| 99久久国产综合精品五月天喷水 | 国内精品久久九九国产精品| 亚洲AV无码成人精品区狼人影院| 国产短视频精品一区二区三区| 日韩AV毛片精品久久久| 国产精品视频免费| 日本一区二区不卡在线视频| 777国产盗摄偷窥精品0OOO| 亚洲色精品88色婷婷七月丁香| 国产成人精品怡红院在线观看| 日韩精品亚洲人成在线观看|