stm32与三菱PLC通信

一、三菱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规定的通信协议进行通信即可。

时间: 2024-11-10 00:44:19

stm32与三菱PLC通信的相关文章

三菱PLC 串口通信开发心得经验

三菱PLC 串口通信开发心得 备注: 记得两年前刚开始从事软件开发工作时,第一份任务就是开发一个程序能够实现与三菱PLC 串口通信.所谓通信,其实质主要是对PLC 的D寄存器(dword)读写操作.但是因为日本为了保护其产品,并不开发串口通信协议.在不开发通信协议的情况,如果想实现通信,首先需要做的便是通过数据分析,破解其通信协议. 这里就不讲解如何破解了,主要是介绍下当时博主开发程序的背景. 写这篇博客的主要目的是为了分享过去自己的开发经验,因为自己在开发的过程中曾经接受过很多开源软件的帮助,

python 读写三菱PLC数据,使用以太网读写Q系列,L系列,Fx系列的PLC数据

本文将使用一个gitHub开源的组件技术来读写三菱的plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 github地址:https://github.com/dathlin/HslCommunication                             如果喜欢可以star或是fork,还可以打赏支持. 官网地址:http://www.hslcommunication.cn/         

KepServerEX读写三菱PLC,车间现场测试记录,带你了解【数据采集的困境】的前世与今生

1.不了解KepServerEX 的鞋童,可以先了解一下OPC UA,OPC UA服务端.我们当前项目读写三菱PLC是自己写的类库,但我感觉调用不够方便灵活,工作之余用OPC UA方式尝试一下 2.数据采集的困境:理想很丰满,现实很骨感. 3.存在即是合理的,OPC UA的方式的本质是想以一种统一的方式,以结束现在这种,五门八门的协议采集,以降低采集成本,降低门槛,加快工业互联的脚步. 5.现在很多著名的设备大厂商纷纷也加入了OPC UA的队伍,让自家的新设备支持OPC UA的方式进行通信.但现

C#读写三菱PLC数据 使用TCP/IP 协议

本文将使用一个Github开源的组件库技术来读写三菱PLC和西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 github地址:https://github.com/dathlin/HslCommunication 如果喜欢可以star或是fork,还可以打赏支持,打赏请认准源代码项目. 在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控制台输入下面的指令安

三菱plc编程电缆通讯端口设置方法(转载)

三菱plc编程电缆通讯端口如何设置?三菱plc编程电缆通讯端口设置方法 时间:2015-10-21 05:09:20编辑:电工栏目:三菱plc 导读:三菱plc编程电缆通讯端口的设置方法,三菱plc上传程序时出现通讯错误,其可能的原因有哪些,三菱PLC编程电缆的通讯端口的正确设置方法是什么,一起来了解下. 三菱plc编程电缆通讯端口的设置方法 一.三菱plc上传程序时出现通讯错误的原因 1.三菱plc编程电缆的通讯端口及波特率是否设置正确. 如:点串口图标->端口RS232->波特率9.6k/

PLC通信网络

PLC通信网络的分层 PLC通信网络大致可分为3层,管理层,单元层以及现场执行(AS-I)层.如下图所示. 在PLC通信网络的三层架构中,管理层,通.信方式包括MPI,工业以太网(Profinet)以及Profibus三种通讯方式. MPI通信多用于西门子内部产品通讯,以及对下位机调试监控时使用.MPI是一种通信协议,其物理接口底层是RS-485,每个点都有自己的网络地址,通过建立全局数据表,进行小数据量通信,MPI网络通讯速率可达19.2kbit/s-12Mbit/s. Profibus总线由

基于S7协议实现与西门子PLC通信

西门子PLC是目前工控行业市场占有额比较大的一款PLC,而且随着上位机的越来越普及, 有很多人开始考虑自己开发上位机实现与西门子PLC的通信,遇到的第一个问题就是数据通信. 其实西门子PLC提供的接口还是比较多的,包括串口(200及Smart 200的PPI.Modbus RTU), 网口(开放式TCP.Modbus TCP以及S7),也就意味着我们有很多种方式可以实现与PLC通信, 获取到PLC的数据,下面介绍一种简单的方式,就是S7协议通信方式,可以实现与不同型号的PLC通信, 而且可以读取

Modbus、KepServer、西门子PLC通信

昨天在现场实现了工业数据的通信,简单写一下. 1.按照国际惯例,先介绍一下 ModBus通信协议感觉是物理层面的,几个终端串联在一起,通过设定每个终端不同的ID号,来访问.具体硬件实现还未研究. 本系统采用ModBus RTU模式通信,使用的是和校验,低位在前. 有关ModBus的介绍,这篇文章很好:极客学院WiKi KepServer是一个提供OPC服务的服务软件,其提供一个OPC服务,可以被外部程序调用,经行client数据写入. OPC (OLE for Process Control)

STM32下调试CAN通信

基本流程: 1.初始化CAN模块: 启用CAN时钟 配置CAN功能寄存器(包括位定时,分频等等) 配置CAN过滤器 打开中断 2.初始化I/O口 启用GPIO时钟 打开CAN对应的GPIO引脚 配置重映射(根据实际情况) 3.定义CAN发送结构体,接收结构体 4.开始发送并准备接收总线上信号 5.检查接收邮箱收的数据是否正确 1 void CAN_Config() 2 { 3 CAN_InitTypeDef CAN_InitStructure; 4 CAN_FilterInitTypeDef C