1. 程式人生 > >stm32與三菱PLC通信

stm32與三菱PLC通信

系統 16px 系列 雙機 rs485 程序 dev style 字符串

一、三菱PLC通訊概要

  三菱PLC FX系列通信結構如下圖所示:

技術分享

  三菱PLC FX系列的通信規格如下圖所示:

技術分享

  三菱PLC FX系列一般有以下幾種通信模塊,以FX2N為例:

  FX2N-232-BD

  FX2N-232IF

  FX2N-232ADP

  FX2N-485-BD

  FX2N-422-BD

  ..........

  無協議通訊情況下,以BD結尾的模塊一般是使用RS通信指令,以IF結尾的模塊一般使用對應的模塊指令。

個人覺得BD模塊操作起來更簡單方便。

  具體通信看對應PLC的通訊用戶手冊,RS-232、RS-422與 RS-485標準只對接口的電氣特性做出規定,而

涉及接插件、電纜或協議,在此基礎上用戶可以建立自己的高層通信協議。

  FX系列PLC四種通信模式的特性如下:
  首先講講FX系列PLC的通信方式。
  FX系列PLC根據使用的通信模塊與協議不同,分為以下四種通信模式:
  1、PLC的N:N通信方式
  2、PLC雙機並聯通信方式
  3、PLC與計算機專有協議通信方式(無須梯形圖,電腦直接讀寫操縱PLC)
  4、PLC與計算機無協議通信方式(梯形圖RS指令方式,可自定義通信協議)
  以下將詳細列出各通信模式的特性:
  N:N網絡 PLC並聯 專用協議計算機連接 無協議通信
  傳輸標準 RS485 RS485/RS422 RS485/RS422或RS232
  傳輸距離 500m RS485/RS422:500mRS232:15m
  連接數量 8站 1:1 1:N(N<=16) 1:1
  通信方式 半雙工 FX,FX2c,FXon:半雙工FX2n: 全雙工
  數據長度 固定 7bit/8bit
  校驗 無/奇/偶
  停止位 1bit/2bit
  波特率 38400bps 19200bps 300/600/1200/2400/4800/9600/19200
  頭字符 固定 無/有效
  尾字符
  控制線 ------
  協議 --- 格式1/格式4 無
  和校驗 固定 無/有效
  適用機型 FX2n,FXon FX2n,FX,FX2c FX2n,FXon,FX,FX2c
  FX系列PLC專用協議通信指令一覽
   以下將詳細列出PLC專用協議通信的指令:
  指令 註釋  
  BR 以1點為單位,讀出位元件的狀態  
  WR 以16點為單位,讀出位元件的狀態,或以1字為單位,讀出字元件的值  
  BW 以1點為單位,寫入位元件的狀態  
  WW 以16點為單位,寫入位元件的狀態,或以1字為單位,寫入值到字元件  
  BT 以1點為單位,SET/RESET 位元件  
  WT 以16點為單位,SET/RESET 位元件,或寫入值到字元件  
  RR 控制PLC運行RUN  
  RS 控制PLC停止STOP  
  PC 讀出PLC設備類型  
  TT 連接測試  
註:位元件包括X,Y,M,S以及T,C的線圈等;
  字元件包括D,T,C,KnX,KnY,KnM等。

二、三菱PLC編程口通訊(可以看三菱PLC編程口通訊協議完整版即程序.pdf--感謝網友visualboy提供)

  接下來講一下該協議實際上適用於PLC編程端口以及 FX-232AW 模塊的通信。
通訊格式:
  命令 命令碼 目標設備
  DEVICE READ CMD "0" X,Y,M,S,T,C,D
  DEVICE WRITE CMD "1" X,Y,M,S,T,C,D
  FORCE ON CMD " 7" X,Y,M,S,T,C
  FORCE OFF CMD "8" X,Y,M,S,T,C
  傳輸格式: RS232C
  波特率: 9600bps
  奇偶: even
  校驗: 累加方式(和校驗)
  字符: ASCII 
  16進制代碼:
  ENQ 05H 請求
  ACK 06H PLC正確響應
  NAK 15H PLC錯誤響應
  STX 02H 報文開始
  ETX 03H 報文結束
幀格式:
  STX CMD DATA ...... DATA ETX SUM(upper) SUM(lower)
  例子:
  STX ,CMD ,ADDRESS, BYTES, ETX, SUM
  02H, 30H, 31H,30H,46H,36H, 30H,34H, 03H, 37H,34H
  SUM=CMD+......+ETX;
  30h+31h+30h+46h+36h+30h+34h+03h=74h;
  累加和超過兩位取低兩位
1、DEVICE READ(讀出軟設備狀態值)
  計算機向PLC發送:
  始 命令 首地址 位數 終 和校驗
  STX CMD GROUP ADDRESS BYTES ETX SUM
  例子:從D123開始讀取4個字節數據
  02h 30h 31h,30h,46h,36h 30h,34h 03h 37h,34h
  地址算法:address=address*2+1000h
  再轉換成ASCII
  31h,30h,46h,36h
  PLC返回
  STX 1ST DATA 2ND DATA ..... LAST DATA ETX SUM
  註:最多可以讀取64個字節的數據
  例子:從指定的存儲器單元讀到3584這個數據
  02h 33h 35h 38h 34h 03h 44h,36h
2、DEVICE WRITE(向PLC軟設備寫入值)
  始 命令 首地址 位數 數據 終 和校驗
  STX CMD GROUP ADDRESS BYTES 1ST DATA 2ND DATA ...... LAST DATA ETX SUM
  例子:向D123開始的兩個存儲器中寫入1234,ABCD
  02h 31h 31h,30h,46h,36h 30h,34h 33h,34h,31h,32h,43h,44h,41h,42h 03h 34h,39h
  PLC返回
  ACK (06H) 接受正確
  NAK (15H) 接受錯誤
3、位設備強制置位/復位
  FORCE ON置位
  始 命令 地址 終 和校驗
  STX CMD ADDRESS ETX SUM
  02h 37h address 03h sum
  FORCE OFF復位
  始 命令 地址 終 和校驗
  STX CMD ADDRESS ETX SUM
  02h 38h address 03h sum
  PLC返回
  ACK(06H) 接受正確
  NAK(15H) 接受錯誤
  設備強制中的地址公式:Address=Address/8+100h
說明:
1.幀中的BYTES表示需要讀取或者寫入的字節數。
2.地址算法上有說明。
3.累加和是從STX後面一個字節開始累加到ETX的和。
三菱FX系列PLC編程口通信源代碼
fx_comm.h

三、FX系列PLC專用協議通信

  FX系列PLC專用協議通信指令格式詳解:
約定說明:
     ENQ為請求標誌,ASCII值5,VB中以chr(5)表示;
     ACK為正確標誌,ASCII值6,VB中以chr(6)表示;
     STX為請求標誌,ASCII值2,VB中以chr(2)表示;
     EXT為請求標誌,ASCII值3,VB中以chr(3)表示;
     表格中紅色字為需要求和效驗的部分;
     和效驗為每一項的ASCII值的總和轉換成十六進制後區低兩位;
     站號、PLC號、元件數量、和效驗都是以十六進制表示;
     等待延時為0-150毫秒,以十六進制0H-FH表示,如100ms為AH。
1、批量讀出位元件--BR指令
   格式:
  1 2 3 4 5 6 7 8 15 16 17
  PC側: ENQ 站號 PLC號 BR 延時 首地址 數量 和效驗 ACK 站號 PLC號
  PLC側: STX 站號 PLC號 數據 EXT 和效驗
9 10 11 12 13 14

[註] 上述中:

1、"PLC號"系統默認為"FF";

2、"首地址 "應以十進制表示,如首地址"X0018"表示從X寄存器的第18地址單元開始讀取I/O量;

3、"數量"表示讀取的I/O量個數;

4、"和效驗"是指從"站號"到"數量"之間的各代碼的ASCII碼的累加和;

5、PLC側的響應碼中"和效驗"是指從"站號"到"EXT"之間的各代碼的ASCII碼的累加和。

6、可以讀出"X"、"Y"和"M"寄存器的內容。

例如:要讀出站號為0的Fx2n系列PLC的X00到X08共9點的狀態值,延時100ms,假設采用Communication Format(D8120)的Format 1 方式::
  註 釋: 請求 站號 PLC號 命令 延時 元件首地址 元件數量 和效驗
  代 碼: ENQ 0 0 F F B R A X 0 0 0 0 0 9 4 2
  ASCII碼: 05H 30H 30H 46H 46H 42H 52H 41H 58H 30H 30H 30H 30H 30H 35H 34H 32H
  您只要將以上蘭色部分的代碼以字符串形式(VB中可以表示為CHR(5)&" 00FFBRAX00000942")發送到PLC,就會有正確的回應信息,如下:
  註 釋: 頭 站號 PLC號 元件首地址 尾 和效驗
  代 碼: STX 0 0 F F 0 0 1 1 0 1 1 0 1 EXT 0 5
  ASCII碼: 02H 30H 30H 46H 46H 30H 30H 31H 31H 30H 31H 31H 30H 31H 03H 30H 35H
  若發送碼有誤,則有以下回應:
  註 釋: 頭 站號 PLC號 和效驗
  代 碼: NAK 0 0 F F 0 6
  ASCII碼: 15H 30H 30H 46H 46H 30H 36H
2、批量讀出字元件--WR指令
  格式:
  1 2 3 4 5 6 7 8 15 16 17
  PC側: ENQ 站號 PLC號 WR 延時 首地址 數量 和效驗 ACK 站號 PLC號
  PLC側: STX 站號 PLC號 數據 EXT 和效驗
9 10 11 12 13 14
  該命令使用方法與1(BR)命令相同,不再贅述。
3、批量寫入位元件--BW指令
  格式:
  1 2 3 4 5 6 7 8 9
  PC側: ENQ 站號 PLC號 BW 延時 首地址 數量 寫入值 和效驗
  PLC側: ACK 站號 PLC號
10 11 12
4、批量寫入字元件--WW指令(M寄存器100單元置"1")
  格式:01FFWWAM01000100010C
  1 2 3 4 5 6 7 8 9
  PC側: ENQ 站號 PLC號 WW 延時 首地址 數量 寫入值 和效驗
  PLC側: 05H 01 FF A M0100 01 0001 0C ACK 站號 PLC號
10 11 12
 請自行分析以上代碼。
請繼續關註如何控制PLC的運行/停止。

四、stm32與三菱PLC通信

  stm32采用USART串口通信,采用三菱PLC規定的通信協議進行通信即可。

stm32與三菱PLC通信