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规定的通信协议进行通信即可。
通信时,需要分清谁当主机,谁当从机,采用的协议和指令有所不同。
- PLC做主站:需要采用通讯板,比如232BD(1对1)、485BD(1对多)等,可以通过无协议和专用协议来通讯;
- 单片机做主站:除上述之外,还可以采用PLC编程口,编程口协议。
编完程序后,采用回环测试,观察是否正常运行,再进行下一步开发。
注:有些PLC拥有配套触摸屏,其通讯控制程序已固化在PLC中,不可在对程序进行增改。在对此PLC进行RS指令通讯时,注意不能再修改D8120.
stm32与三菱PLC通信的更多相关文章
- 上位机开发之三菱Q系列PLC通信实践
经常关注我们公众号或者公开课的学员(如果还没有关注的话,左上角点击一波关注)应该知道,我们会经常使用西门子PLC,其实对于其他品牌的PLC,我们都会讲到,包括三菱.欧姆龙.基恩士.松下及国产台达.信捷 ...
- c#上位机与三菱PLC(FX3U)串口通讯
项目中会经常用到上位机与PLC之间的串口通信,本文介绍一下C#如何编写上位机代码 与三菱FX3U进行通讯 1. 第一种方法是自己写代码实现,主要代码如下: //对PLC的Y7进行置1 byte[] Y ...
- C#读写三菱PLC和西门子PLC数据 使用TCP/IP 协议
本文将使用一个Github开源的组件库技术来读写三菱PLC和西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能 ...
- python 读写三菱PLC数据,使用以太网读写Q系列,L系列,Fx系列的PLC数据
本文将使用一个gitHub开源的组件技术来读写三菱的plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 gi ...
- java android 读写三菱PLC 使用TCP/IP 协议
本文将使用一个Github开源的组件库技术来读写三菱PLC和西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能 ...
- KepServerEX读写三菱PLC,车间现场测试记录,带你了解【数据采集的困境】的前世与今生
1.不了解KepServerEX 的鞋童,可以先了解一下OPC UA,OPC UA服务端.我们当前项目读写三菱PLC是自己写的类库,但我感觉调用不够方便灵活,工作之余用OPC UA方式尝试一下 2.数 ...
- C#读写三菱PLC数据 使用TCP/IP 协议
本文将使用一个Github开源的组件库技术来读写三菱PLC和西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能 ...
- 【精讲版】上位机C#/.NET与西门子PLC通信
618来啦 亲们,腾讯课堂101机构打榜了,快来助力<新阁教育>,<免费赠送课程>! 1.手机QQ(微信请也来一遍)扫下方二维码↓,找到<新阁教育> 2.点击“支持 ...
- 三菱plc输出指示灯不亮怎么办(转载)
三菱plc输出指示灯不亮怎么办?三菱plc输出指示灯故障 时间:2015-10-21 07:31:12编辑:电工栏目:三菱plc 导读:三菱plc输出指示灯不亮故障的原因,三菱plc在使用中出现输出指 ...
随机推荐
- 'gbk' codec can't encode character '\xa0' in position 34: illegal multibyte sequence
今天在爬某广告贼多的网站遇到的问题,简单记录下
- R中常用数据挖掘算法包
数据挖掘主要分为4类,即预测.分类.聚类和关联,根据不同的挖掘目的选择相应的算法.下面对R语言中常用的数据挖掘包做一个汇总: 连续因变量的预测: stats包 lm函数,实现多元线性回归 stats包 ...
- Java多线程系列 JUC线程池06 线程池原理解析(五)
ScheduledThreadPoolExecutor解析 ScheduledThreadPoolExecutor适用于延时执行,或者周期性执行的任务调度,ScheduledThreadPoolExe ...
- servlet实现验证码
(博客内容来自:jsp使用servlet实现验证码,以下内容只是不才对原博客的摘抄以便以后翻阅使用) 一.原理: 验证码作为一个图片,在页面中为“画”出来的,它是如何画出来的呢? <生成图片&g ...
- Spring与web.xml
出处:http://blog.csdn.net/u010796790 在web.xml配置监听器 ContextLoaderListener (listener-class) ContextLoade ...
- EntityFramework 学习 一 Local Data
DBSet的Local属性提供简单的从context上下文获取当前已经被跟踪的实体(实体不能被标记为Deleted状态) using System.Data.Entity; class Program ...
- Oracle视图的使用
--视图的语法 create [ or replace ] [NO Force | Force] View schema.view_name--视图名称 [(alias,...)inline_cons ...
- Python基础-set集合操作
set集合,是一个无序且不重复的元素集合.定义方式类似字典使用{}创建 目前我们学过的数据类型: 1.字符串(str),2.整型(int),3.浮点型(float),4,列表(list) 5.元组(t ...
- hdu 2018 母牛的故事(简单dp)
母牛的故事 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- Druid:一个用于大数据实时处理的开源分布式系统——大数据实时查询和分析的高容错、高性能开源分布式系统
转自:http://www.36dsj.com/archives/28590 Druid 是一个用于大数据实时查询和分析的高容错.高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分 ...