51单片机与三菱PLC RS485通讯实例
51单片机实现的485通讯程序
标签:modbus8051源程序modbus协议--51端程序的实现RTU需要一个定时器来判断3.5个流逝时间。
#define ENABLE 1#define DISABLE 0#define TRUE 1#define FAULT 0#define RECEIVE_EN 0#define TRANSFER_EN 1#define MAX_RXBUF 0x20extern unsigned char emissivity;extern unsigned char tx_count,txbuf[15];extern unsigned char rx_count,rxbuf[15];extern unsigned char tx_number,rx_number;extern bit rx_ok;unsigned char rx_temp;void InitTimer1() //针对标准8051{TMOD=(TMOD|0xf0)&0x1f; //将T1设为16位定时器TF1=0;TH1=0x62; //设T1位3.5位的接收时间35bit/9600bit/s=3.646msTL1=0x80;//晶振为11.0592MHz,T=65535-3.646ms*11.0592MHz/12=0xf2df//0x6280是22.1184M下LPC9XX下的值。
ET1=1;//允许T1中断TR1=1;//T1开始计数}void timer1() interrupt 3 using 2 //定时器中断{TH1=0x62; //3.646ms interruptTL1=0x80;if(rx_count>=5) //超时后,若接收缓冲区有数则判断为收到一帧{rx_ok=TRUE;}}void scomm() interrupt 4 using 3 //modbus RTU模式{if(TI){TI = 0;if(tx_count < tx_number) //是否发送结束{SBUF = txbuf[tx_count];}tx_count++;}if(RI){rx_temp=SBUF;if(rx_ok==FAULT) //已接收到一帧数据,在未处理之前收到的数舍弃{if(rx_countrxbuf[rx_count]=rx_temp;rx_count++;}TH1=0x62; //timer1 reset,count againTL1=0x80;RI=0;}}在主循环中判断标志rx_ok来执行帧处理。
三菱plc与变频器485通讯程序实例
三菱plc与变频器485通讯程序实例
本例⼦是三菱PLC主机上装RS-485BD通讯适配器与变频器的485PU⼝相连接,通过三菱PLC 和三菱变频器之间的RS485半双⼯串⾏通讯来实现电动机的变频调速。
三菱PLC和三菱变频器之间进⾏通讯,通讯规格必须在变频器的初始化中设定,如果没有进⾏设定或有⼀个错误的设定,数据将不能进⾏通讯。
且每次参数设定后,需复位变频器。
确保参数的设定⽣效,设定好参数后按如下协议进⾏数据通讯。
该过程分5个阶段:
1、计算机发出通讯请求;
2、变频器处理等待;
3、变频器作出应答;
4、计算机处理等待;
5、计算机作出应答。
根据不同的通讯要求完成相应的过程,如写变频器启、停控制命令时则只需完成1-3三个过程;监视变频器运⾏频率时则需完成1-5五个过程。
不论是写数据还是读数据,均有PLC发出请求,变频器只是被动接受请求并作出应答。
每个阶段的数据格式均有差别。
现只列出较为常⽤的三种格式:
要实现三菱PLC对三菱变频器的通讯控制,必须对三菱PLC进⾏编程;通过程序实现PLC对变频器的各种运⾏控制和数据的采集。
三菱PLC程序⾸先应完成FX2N-485BD通讯适配器的初始化、控制命令字的组合、代码转换和变频器应答数据的处理⼯作。
PLC通过RS-485通讯控制变频器可以完成⼀台乃⾄多台变频器的启动、停⽌、频率设定。
硬件连接如图5所⽰。
由于每台变频器的通讯编程⽅法基本相似,唯⼀的不同之处就是变频器的站号设置不同。
PLC资料:三菱PLC RS485通讯使用教程(带示例)
通信
一、联机方式
自动化生产线各工作站中PLC之间通过RS-485串行通信的方式实现互连,构成分布式的控制系统。
二、N:N网络功能
N:N网络功能,就是在最多8台FX可编程控制器之间,通过RS-485通信连接,进行软元件相互连接。
1)根据要链接的点数,有3种模式可以选择。
2)数据的链接是在最多8台FX可编程控制器之间自动更新。
3)总延长距离最大可达500m。
三、链接模式及链接点数
四、N:N网络接线图
五、N:N网络中使用的软元件如下:
1.N:N网络设定用的软元件
是用于设定N:N网络的软元件。
使用N:N网络时,必须设定下列的软元件。
2.判断N:N网络错误用的元件
用于判断N:N网络错误。
请将链接错误输出到外部,并在顺控程序的互锁等中使用。
3. 链接软元件
是用于发送接收各可编程控制器之间的信息的软元件。
根据在相应站号设定中设定的站号,以及在刷新范围设
定中设定的模式不同,使用的软元件编号及点数也有所不同。
1)模式0时
2) 模式1时
3) 模式2时
三菱PLC 485通讯示例(2个PLC)
题目:
按下SB1(0#PLC 的X0),灯L1(1#PLC 的Y0)亮。
按下SB2(1#PLC 的X1),灯L2(0#PLC 的Y1)亮。
通讯线连接方式:
主站程序:
从站程序:。
三菱FX系列PLC与变频器通讯应用实例(RS485)
①三菱PLC:FX2N + FX2N-485-BD②三菱变频器:A500系列、E500系列、F500系列、F700系列、S500系列两者之间通过网线连接(网线的RJ45插头和变频器的PU插座接),使用两对导线连接,即将变频器的SDA与PLC通讯板(FX2N-485-BD)的RDA接,变频器的SDB与PLC通讯板(FX2N-485-BD)的RDB接,变频器的RDA与PLC通讯板(FX2N-485-BD)的SDA接,变频器的RDB与PLC通讯板(FX2N-485-BD)的SDB接,变频器的SG与PLC通讯板(FX2N-485-BD)的SG接。
A500、F500、F700系列变频器PU端口:E500 、S500 系列变频器PU 端口:一.三菱变频器的设置PLC和变频器之间进行通讯,通讯规格必须在变频器的初始化中设定,如果没有进行初始设定或有一个错误的设定,数据将不能进行传输。
注:每次参数初始化设定完以后,需要复位变频器。
如果改变与通讯相关的参数后,变频器没有复位,通讯将不能进行。
参数号名称设定值说明Pr.117 站号0 设定变频器站号为0Pr.118 通讯速率96 设定波特率为9600bpsPr.119 停止位长/数据位长11 设定停止位2位,数据位7位Pr.120 奇偶校验有/无2 设定为偶校验Pr.121 通讯再试次数9999 即使发生通讯错误,变频器也不停止Pr.122 通讯校验时间间隔9999 通讯校验终止Pr.123 等待时间设定9999 用通讯数据设定Pr.124 CR,LF有/无选择0 选择无CR,LF对于122号参数一定要设成9999,否则当通讯结束以后且通讯校验互锁时间到时变频器会产生报警并且停止(E.PUE)。
对于79号参数要设成1,即PU操作模式。
注:以上的参数设置适用于A500、E500、F500、F700系列变频器。
当在F500、F700系列变频器上要设定上述通讯参数,首先要将Pr.160设成0。
三菱fx系列plc与三菱变频器通讯应用实例(rs485)
三菱FX系列PLC与三菱变频器通讯应用实例(RS485)三菱电机自动化(上海)巢晓阳 2005-01-10对象:①三菱PLC:FX2N + FX2N-485-BD②三菱变频器:A500系列、E500系列、F500系列、F700系列、S500系列两者之间通过网线连接(网线的RJ45插头和变频器的PU插座接),使用两对导线连接,即将变频器的SDA与PLC通讯板(FX2N-485-BD)的RDA接,变频器的SDB与PLC通讯板(FX2N-485-BD)的RDB接,变频器的RDA与PLC通讯板(FX2N-485-BD)的SDA 接,变频器的RDB与PLC通讯板(FX2N-485-BD)的SDB接,变频器的SG与PLC通讯板(FX2N-485-BD)的SG接。
A500、F500、F700系列变频器PU端口:E500、S500系列变频器PU端口:一.三菱变频器的设置PLC和变频器之间进行通讯,通讯规格必须在变频器的初始化中设定,如果没有进行初始设定或有一个错误的设定,数据将不能进行传输。
注:每次参数初始化设定完以后,需要复位变频器。
如果改变与通讯相关的参数后,变频器没有复位,通讯将不能进行。
参数号名称设定值说明Pr.117 站号 0 设定变频器站号为0Pr.118 通讯速率 96 设定波特率为9600bpsPr.119 停止位长/数据位长 11 设定停止位2位,数据位7位Pr.120 奇偶校验有/无 2 设定为偶校验Pr.121 通讯再试次数 9999 即使发生通讯错误,变频器也不停止Pr.122 通讯校验时间间隔 9999 通讯校验终止Pr.123 等待时间设定 9999 用通讯数据设定Pr.124 CR,LF有/无选择 0 选择无CR,LF对于122号参数一定要设成9999,否则当通讯结束以后且通讯校验互锁时间到时变频器会产生报警并且停止(E.PUE)。
对于79号参数要设成1,即PU操作模式。
注:以上的参数设置适用于A500、E500、F500、F700系列变频器。
51单片机串口485通讯程序
/* 以下为单片机串口485通讯程序,从机程序(当然也适用于主机程序),主机发送可以先用串口帮手软件来调试,经过Keil uVision4实际测试,测试效果如结尾图片所示, 大部分来自网络,只是改了两个地方: len = sizeof(dbuf),if(i >=( __ERRLEN+1)) // 帧超长,错误,返回,就可以实现了,其中的原因自已体会吧*/#ifndef __485_C__#define __485_C__#include <reg51.h>#include <string.h>#include <stdio.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int/* 通信命令*/#define __ACTIVE_ 0x01 // 主机询问从机是否存在#define __GETDATA_ 0x02 // 主机发送读设备请求#define __OK_ 0x03 // 从机应答#define __STATUS_ 0x04 // 从机发送设备状态信息#define __MAXSIZE 0x08 // 缓冲区长度#define __ERRLEN 12 // 任何通信帧长度超过12则表示出错//uchar dbuf[__MAXSIZE]; // 该缓冲区用于保存设备状态信息uchar dbuf[__MAXSIZE];//={0,1,2,3,4,5,6,7}; // 该缓冲区用于保存设备状态信息uchar dev; // 该字节用于保存本机设备号sbit M_DE = P1^0; // 驱动器使能,1有效sbit M_RE = P1^1; // 接收器使能,0有效void get_status(); // 调用该函数获得设备状态信息,函数代码未给出void send_data(uchar type, uchar len, uchar *buf); // 发送数据帧bit recv_cmd(uchar *type); // 接收主机命令,主机请求仅包含命令信息void send_byte(uchar da); // 该函数发送一帧数据中的一个字节,由send_data()函数调用void main(){uchar type;uchar len;/* 系统初始化*/P1 = 0xff; // 读取本机设备号//dev = (P1>>2);dev = 0x01;TMOD = 0x20; // 定时器T1使用工作方式2TH1 = 250; // 设置初值TL1 = 250;TR1 = 1; // 开始计时PCON = 0x80; // SMOD = 1SCON = 0x50; // 工作方式1,波特率9600bps,允许接收ES = 0; // 关闭串口中断//IT0 = 0; // 外部中断0使用电平触发模式//EX0 = 1; // 开启外部中断0EA = 1; // 开启中断/* 主程序流程*/while(1) // 主循环{if(recv_cmd(&type) == 0) // 发生帧错误或帧地址与本机地址不符,丢弃当前帧后返回continue;switch(type){case __ACTIVE_: // 主机询问从机是否存在send_data(__OK_, 0, dbuf); // 发送应答信息,这里buf的内容并未用到break;case __GETDA TA_:// len = strlen(dbuf);//在C51中不能这个函数计算unsigned char型,这个函数只能计算char型len = sizeof(dbuf);// len =0x08;send_data(__STA TUS_, len, dbuf); // 发送设备状态信息break;default:break; // 命令类型错误,丢弃当前帧后返回}}}void READSTATUS() interrupt 0 using 1 // 产生外部中断0时表示设备状态发生改变,该函数使用寄存器组1{get_status(); // 获得设备状态信息,并将其存入dbuf指向的存储区,数据最后一字节置0表示数据结束}/* 该函数接收一帧数据并进行检测,无论该帧是否错误,函数均会返回* 函数参数type保存接收到的命令字* 当接收到数据帧错误或其地址位不为0时(非主机发送帧),函数返回0,反之返回1*/bit recv_cmd(uchar *type){bit db = 0; // 当接收到的上一个字节为0xdb时,该位置位bit c0 = 0; // 当接收到的上一个字节为0xc0时,该位置位uchar data_buf[__ERRLEN]; // 保存接收到的帧__ERRLEN=12;uchar tmp;uchar ecc = 0;uchar i;M_DE = 0; // 置发送禁止,接收允许M_RE = 0;/* 接收一帧数据*/i = 0;while(!c0) // 循环直至帧接收完毕{RI = 0;while(!RI);tmp = SBUF;RI = 0;if(db == 1) // 接收到的上一个字节为0xdb{switch(tmp){case 0xdd:data_buf[i] = 0xdb; // 0xdbdd表示0xdbecc = ecc^0xdb;db = 0;break;case 0xdc:data_buf[i] = 0xc0; // 0xdbdc表示0xc0ecc = ecc^0xc0;db = 0;break;default:return 0; // 帧错误,返回}i++;}switch(tmp) // 正常情况{case 0xc0: // 帧结束c0 = 1;break;case 0xdb: // 检测到转义字符db = 1;break;default: // 普通数据data_buf[i] = tmp; // 保存数据ecc = ecc^tmp; // 计算校验字节i++;}//if(i == __ERRLEN) // 帧超长,错误,返回if(i >=( __ERRLEN+1)) // 帧超长,错误,返回return 0;}/* 判断帧是否错误*/if(i<4) // 帧过短,错误,返回return 0;if(ecc != 0) // 校验错误,返回return 0;if(data_buf[0] != dev) // 非访问本机命令,错误,返回return 0;*type = data_buf[1]; // 获得命令字return 1; // 函数成功返回}/* 该函数发送一帧数据帧,参数type为命令字、len为数据长度、buf为要发送的数据内容*/void send_data(uchar type, uchar len, uchar *buf){uchar i;uchar ecc = 0; // 该字节用于保存校验字节M_DE = 1; // 置发送允许,接收禁止M_RE = 1;send_byte(dev); // 发送本机地址ecc = dev;send_byte(type); // 发送命令字ecc = ecc^type;send_byte(len); // 发送长度ecc = ecc^len;for(i=0; i<len; i++) // 发送数据{send_byte(*buf);ecc = ecc^(*buf);buf++;}send_byte(ecc); // 发送校验字节TI = 0; // 发送帧结束标志SBUF = 0xc0;while(!TI);TI = 0;}/* 该函数发送一个数据字节,若该字节为0xdb,则发送0xdbdd,若该字节为0xc0则,发送0xdbdc */void send_byte(uchar da){switch(da){case 0xdb: // 字节为0xdb,发送0xdbdd TI = 0;SBUF = 0xdb;while(!TI);TI = 0;SBUF = 0xdd;while(!TI)TI = 0;break;case 0xc0: // 字节为0xc0,发送0xdbdcTI = 0;SBUF = 0xdb;while(!TI);TI = 0;SBUF = 0xdc;while(!TI)TI = 0;break;default: // 普通数据则直接发送TI = 0;SBUF = da;while(!TI);TI = 0;}}#endif/* 调试结果*/。
51单片机与RS485应用电路图
1 问题的提出在应用系统中,RS-485半双工异步通信总线是被各个研发机构广泛使用的数据通信总线,它往往应用在集中控制枢纽与分散控制单元之间。
系统简图如图1所示。
图1. RS-485系统示意图由于实际应用系统中,往往分散控制单元数量较多,分布较远,现场存在各种干扰,所以通信的可靠性不高,再加上软硬件设计的不完善,使得实际工程应用中如何保障RS-485总线的通信的可靠性成为各研发机构的一块心病。
在使用RS-485总线时,如果简单地按常规方式设计电路,在实际工程中可能有以下两个问题出现。
一是通信数据收发的可靠性问题;二是在多机通信方式下,一个节点的故障(如死机),往往会使得整个系统的通信框架崩溃,而且给故障的排查带来困难。
针对上述问题,我们对485总线的软硬件采取了具体的改进措施2 硬件电路的设计现以8031单片机自带的异步通信口,外接75176芯片转换成485总线为例。
其中为了实现总线与单片机系统的隔离,在8031的异步通信口与75176之间采用光耦隔离。
电路原理图如图2所示。
图2 改进后的485通信口原理图充分考虑现场的复杂环境,在电路设计中注意了以下三个问题。
2.1 SN75176 485芯片DE控制端的设计由于应用系统中,主机与分机相隔较远,通信线路的总长度往往超过400米,而分机系统上电或复位又常常不在同一个时刻完成。
如果在此时某个75176的DE端电位为“1”,那么它的485总线输出将会处于发送状态,也就是占用了通信总线,这样其它的分机就无法与主机进行通信。
这种情况尤其表现在某个分机出现异常情况下(死机),会使整个系统通信崩溃。
因此在电路设计时,应保证系统上电复位时75176的DE端电位为“0”。
由于8031在复位期间,I/O口输出高电平,故图2电路的接法有效地解决复位期间分机“咬”总线的问题。
2.2 隔离光耦电路的参数选取在应用系统中,由于要对现场情况进行实时监控及响应,通信数据的波特率往往做得较高(通常都在4800波特以上)。
485通讯协议程序怎么写(51单片机的485通信程序案例)
485通讯协议程序怎么写(51单片机的485通信程序案例)
RS-485总线接口是一种常用的串口,具有网络连接方便、抗干扰性能好、传输距离远等优点。
RS-485收发器采用平衡发送和差分接收,因此具有抑制共模干扰的能力,加上收发器具有高的灵敏度,能检测到低达200mv的电压,可靠通信的传输距离可达数千米。
使用RS-485总线组网,只需一对双绞线就可实现多系统联网构成分布式系统、设备简单、价格低廉、通信距离长。
51单片机的485通信程序
#ifndef __485_C__ #define __485_C__
#include 《reg51.h》
#include 《string.h》
#define unsigned char uchar
#define unsigned int uint
/* 通信命令*/
#define __ACTIVE_ 0x01 // 主机询问从机是否存在
#define __GETDATA_ 0x02 // 主机发送读设备请求
#define __OK_ 0x03 // 从机应答
#define __STATUS_ 0x04 // 从机发送设备状态信息
#define __MAXSIZE 0x08 // 缓冲区长度
#define __ERRLEN 12 // 任何通信帧长度超过12则表示出错
uchar dbuf[__MAXSIZE]; // 该缓冲区用于保存设备状态信息
uchar dev; // 该字节用于保存本机设备号
sbit M_DE = P1。
用485总线连接单片机和PLC通讯
我用485总线连接单片机和PLC通讯,但是单片机控制板上的485总是很容易烧掉,485的2脚接地,三脚io口控制,A,B线分别加1K的上下拉电阻,A,B线间加120欧平衡电阻,然后接PLC端。
帖子编号: 12939/622692, 发表用户:zhpubest发表时间:2005-5-31 20:48:26 访问次数:301 发贴IP:61.149.21.208文章内容:1、是不是485的2脚接地导致了片子被烧?(程序在485被烧死前是能够正常通讯的)2、是不是在输出端A,B线上串20欧电阻能够保护485?3、在不加光电隔离的情况下能不能解决这个问题?谢谢大家了,我的控制板已经在现场安装了,而且不在现场的话485也没有发生烧坏的情况,所以很急,希望大家能给我点建议~~相关帖子>>>:∙各位帮帮忙啊~~(0字)zhpubest[4次]2005-5-31 21:52:33∙最好用带光隔的,否则可能会有110V的电压差(0字)ywgcat[5次]2005-5-31 21:57:42o110V的电压差?PLC端485A,B线过来的信号电压是4.2V左右~,110V的电压差从哪里来啊?(0字)zhpubest[6次]2005-5-31 22:00:41▪我碰到过,两边的电势不一样,为什么我也没有弄清楚,不过我当时确实烧了好多,最后只有换成光隔的(0字)ywgcat[4次]2005-6-1 11:30:16▪光隔是不是这样做:A,B线上接光藕,光藕的vcc和gnd也用dc——dc模块与控制板电源隔离开?然后光藕输出接PLC?请指教~~(0字)zhpubest[2次]2005-6-1 13:40:18▪你最好用带光电隔离的芯片,我原来用的422的芯片max1490,你可以查查maxim的(0字)ywgcat[6次]2005-6-122:25:16▪我碰到过,两边的电势不一样,为什么我也没有弄清楚,不过我当时确实烧了好多,最后只有换成光隔的(0字)ywgcat[2次]2005-6-1 11:30:35∙大家帮帮忙啊,A,B线串20欧电阻能不能解决问题?(0字)zhpubest[1次]2005-6-1 11:00:45∙【JPG】未命名2.JPG(11K)供参考.将单片机与PLC的地线连起来试试;另可以在a,b线上各接两只1N4148分别到电源和地(124字)不乖[18次]2005-6-1 11:43:47∙--------以上部分请勿修改!-------------o谢谢,我试一试~~~(0字)zhpubest[1次]2005-6-1 13:36:10∙怎么没人理我啊~~(0字)zhpubest[1次]2005-6-1 11:47:39∙怎么没人理我啊~~(0字)zhpubest[1次]2005-6-1 11:47:45。
《单片机基础与实训》案例一 单片机与三菱PLC通讯
案例一:单片机与三菱PLC通讯利用三菱PLC的扩展RS485通讯板与其51单片机连接通讯,可写PLC任意的地址。
长度可达1000米,一、硬件部分设计利用ADM485芯片自制了一个485接口与三菱PLC的扩展RS485通讯如图,但如果要进行半双工通讯,须将P3.0口到下载程序的RS232芯片的线断开可用一个跳线,用RS485的时候断开RS232,用RS232的时候插上跳线帽。
硬件连接如图,实验板使用天祥单片机实验板。
二、PLC程序编写通讯:单片机做主机(只发送指令),PLC做从机(只接收指令),单工单向,以便初学着掌握。
格式:1位启始,8位数据,一位停止。
所以PLC寄存器D8120:0C81.plc程序很简单不懂的可以看下三菱PLC的通讯手册。
如下图:三:单片机程序编写#include<reg52.h> /*单片机的头文件*/unsigned char code tab[]={0x17,0xff};/*PLC输出的Y点数,PLC输出Y 灯0125678亮*/sbit led=P1^1; /*将RS485置为发送数据模式*/unsigned char i;void init(){SCON=0x50; /*串口中断开*/TMOD=0x20; /*定时器设置*/TH1=0xfd; /*定时时间的高位*/TL1=0xfd; /*定时时间的低位,速度为9600BPS*/ TR1=1; /*定时器开*/EA=1; /*开总中断*/TI=0; /*复位串口中断*/led=1; /*将RS485置为发送数据模式*/}void main(){init(); /*调用子程序*/for(i=0;i<2;i++){SBUF=tab[i]; /*将数据发送到串口*/while(!TI); /*等待串口数据发送结束*/TI=0; /*复位串口中断*/}}注意点:1.RS485的线不能接反,否则数据将不正确。
51单片机与三菱PLC串口通讯及其他
面是我试验成功的程序,用单片机给PLC置位Y1#include <REG52.H>#define uchar unsigned char#define uint unsigned intunsigned int temp[9]={0x02,0x37,0x30,0x31,0x30,0x35,0x03,0x30,0x30}; sbit LED = P1^0;void main (){unsigned int i,mm,y;SCON = 0x50;TMOD |= 0x20;TH1 = 0xFD;TR1 = 1;EA = 1;while (1){for(i=0;i<9;i++){ACC=temp[i];CY=P;TB8=CY;y=ACC&0x7f;mm=0x00|TB8;mm=mm<<7;SBUF=y|mm;while(!TI);TI=0;}if(i==9) while(1);}}Arduino与S7-200通讯第一部分有关RS232转接板的接线说明白色线的板子①TX+(2号引脚,RXD端口)→arduino的3号引脚(TX)RX+(3号引脚,TXD端口)→arduino的2号引脚(RX)GND→GND②串口是接USB转串口线的,作为给arduino串口调试使用。
绿色线的板子①T/R-(2号引脚,RXD端口)→arduino的2号引脚(TX)RXD+(3号引脚,TXD端口)→arduino的3号引脚(RX)GND→GND②串口是接RS232转RS485连接线的,作为arduino单片机与S7-200PLC连接使用。
第二部分SD 10SA 00DA 02FC 5CFCS 5EED 16读指令字节22 23 24 25 26 27 28 29 30 31 32功能读取长度数据个数存储器类型存储器偏移量指针校验和结束读q0.0 01 00 01 00 00 82 00 00 00 64 16读m0.0 01 00 01 00 00 83 00 00 00 65 16读m0.1 01 00 01 00 00 83 00 00 01 66 16读SMB34 02 00 01 00 00 05 00 01 10 F9 16读VB100 02 00 01 00 01 84 00 03 20 8B 16读VW100 04 00 01 00 01 84 00 03 20 8D读VD100 06 00 01 00 01 84 00 03 20 8F 16读i0.5 01 00 01 00 00 81 00 00 05 68 16读i0.7 01 00 01 00 00 81 00 00 07 6A 16Byte 27 存储器类型04:S 05:SM 06:AI 07:AQ 1E: C 81:I 82:Q 83:M 84:V 1F: TByte 28,29,30存储器偏移量指针(存储器地址*8)如:VB100,存储器地址为100,偏移量指针为100 * 8 = 800,转换成16进制就是320H,则Byte 28—29这三个字节就是:00 03 20如:SMB34,存储器地址为34,偏移量指针为34 * 8 = 272,转换成16进制就是110H,则Byte 28—29这三个字节就是:00 01 10写指令字节22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40写入位置及值长度数据个数存储器类型存储器偏移量指针位数值校验码结束符M0.0=1 01 00 01 00 00 83 00 00 00 00 03 00 01 01 00 71 16M0.0=0 01 00 01 00 00 83 00 00 00 00 03 00 01 00 00 70 16M0.1=1 01 00 01 00 00 83 00 00 01 00 03 00 01 01 00 72 16vb100=10 02 00 01 00 01 84 00 03 20 00 04 00 08 10 00 AE 16vb100=FF 02 00 01 00 01 84 00 03 20 00 04 00 08 FF 00 9D 16VW100=FFFF 04 00 01 00 01 84 00 03 20 00 04 00 10 FF FF A6 16VD100=FFFFFFFF 06 00 01 00 01 84 00 03 20 00 04 00 20 FF FF FF FF B8 16T,C等不能用写命令写入Byte 32 如果写入的是位数据这一字节为03,其它则为04Byte 34 写入数据的位数01: 1 Bit 08: 1 Byte 10H: 1 Word 20H: 1 Double Word。
三菱PLC采用RS485控制变频器(实例)
三菱PLC采用RS485控制变频器(实例)需要的硬件:三菱FX3G型PLC,485通讯模块(FX3G-485BD), 变频器一台英威腾,触摸屏(MT6071IP)。
需要了解内容:PLC通信协议,发送指令,变频器通信参数设置。
一、接线接线较为简单,将FX3G-485-BD模块插在PLC上,将SDB和RDB短接,SDA和RDA短接,在变频器上485+端子引出导线接到模块的SDA和RDA上,在变频器上485-端子引出导线接到模块的SDB 和RDB上,采用RS485接口工作半双工,它的意思就是信号的读取和写入不能同时发送,发送的时候不能读取。
▼接线图二、变频器参数设置将变频器的运行指令和频率指令都改成MODBUS通信设定,在P00组内,P00.01运行指令通道改为:“2:通讯运行指令通道(缺省值0)”,P00.07B频率指令选择:“8:MODBUS通讯设定(缺省2)”,P00.09设定源组合方式:“1:B,当前频率设定为B频率指令”。
通讯参数的设置,在P14组,P14.00将变频器的站号设为1,P14.01波特率设为9600,P14.02数据位校验设为无校验(N, 7, 2)for ASCII。
三、PLC通讯参数的设定PLC参数的设定有两种方法:1、是在软件(GX-Works2)里设置:点击导航中的参数→PLC参数→PLC的系统设置(2):▼ PLC系统参数设置PLC设定为00主站,通讯格式与变频器一致。
2、采用程序设定:▼梯形图参数设置M8161=1,为8位运算,意思就是忽略高8位只传送数据的低8位,为什么这么做后面会说到。
MOV H0C88 D8210是指定通讯格式,它是怎么算出来的,我们看下D8120内容:▼ D8120内容D8210是一个16位的数据,根据设定的参数来算计算,比如上述程序的H0C88是怎么来的,看下通讯方式是,波特率9600,7位数据长度,无奇偶校验,停止位是2,控制线是无协议的调制解调器模式(RS485接口):▼通讯参数计算四、相关指令串行数据发送RS,16进制转换为ASCII码ASCI,ASCII码转换为16进制数HEX.RS:该指令是用于通过安装在基本单元上的RS-232C或RS-485串行通信口进行无协议通信,从而执行数据的发送和接收的指令。
plc和单片机485通讯范本
PLC(Programmable Logic Controller 可编程逻辑控制器)和单片机(Microcontroller 单片机)是工业自动化领域中常见的控制设备。
它们之间的通讯可以通过485总线来实现。
本文将探讨PLC和单片机之间485通讯的范本。
一、PLC和单片机的基本概念1. PLC:PLC是一种专门用于工业控制的可编程逻辑控制器,它通常用来控制工业生产线上的各种机械设备,通过编程可以实现各种自动化控制功能。
2. 单片机:单片机是一种集成了微处理器、存储器和各种输入输出接口的微型计算机,它广泛应用于各种电子设备中,包括工业控制领域。
二、485通讯原理1. 485总线:485总线是一种串行通讯协议,具有高抗干扰能力和远距离传输的特点,适用于工业环境中长距离通讯。
2. 485通讯原理:485总线采用差分信号传输,即通过两个信号线(A 和B)的电压差来进行数据传输,这种方式能有效抵抗电磁干扰,适合工业场合的通讯需求。
三、PLC和单片机485通讯的范本下面将以一个简单的控制系统为例,介绍PLC和单片机之间485通讯的范本。
1. 系统结构该控制系统由PLC、单片机和若干执行器(如电机、阀门等)组成。
PLC作为控制中心,负责整个系统的自动化控制,单片机负责采集环境数据和执行简单的逻辑控制,执行器根据控制信号进行动作。
2. 通讯方式PLC和单片机之间的485通讯可以采用主从模式,即PLC作为主站,单片机作为从站。
PLC负责下发控制指令,单片机接收指令并执行相应的控制逻辑。
3. 通讯协议通讯协议是PLC和单片机之间能够正常通讯的基础,常见的通讯协议有Modbus、Profibus等。
在本范本中,我们将使用Modbus协议。
4. 通讯过程PLC向485总线发送Modbus控制命令,单片机接收并解析命令,根据命令执行相应的控制逻辑,然后将执行结果返回给PLC。
整个通讯过程需要保证数据的可靠传输和正确解析。
51单片机实现RS485
default: // 普通数据则直接发送TI = 0;SBUF = da;while(!TI);TI = 0;}}#endifRS-232接口实现计算机和单片机通信程序作者:佚名来源:本站原创点击数:…更新时间:2008年07月10日【字体:大中小】//此程序通过RS-232接口来完成计算机和单片机通信(程序已用p1 8f458试验板上调试通过)//程序的调试可以用"串口调试助手V2.1"辅助完成,此程序可在htt p:// 下载//此程序首先发送测试数据55H,再通过中断实现数据的接收和发送#include "p18f458.h"void InterruptHandlerHigh(void);//初始化程序void initial(){SPBRG=0X19; //选择传输波特率为9600bpsTXSTA=0X04; //选择异步高速方式传输8位数据RCSTA=0X80; //允许同步串行口工作TRISC=0X80; //将RC7,RC6设置为输入,断绝与外接电路的连接 TXSTAbits.TXEN=1; //发送允许RCSTAbits.CREN=1; //接受数据允许PIE1bits.RCIE=1; //接收中断使能INTCON=0XC0; //总中断和外围中断允许}//高优先级中断向量#pragma code InterruptVectorHigh=0x08void InterruptVectorHigh (void){_asmgoto InterruptHandlerHigh //跳到中断程_endasm}//高优先级中断服务程序#pragma code#pragma interrupt InterruptHandlerHighvoid InterruptHandlerHigh (){while(PIR1bits.RCIF==1) //若接收中断标志不为1,则为误操作,返回{TXREG=RCREG; //将接收到的数据放入发送寄存器,并启动发送 }}//主程序main(){initial(); //系统初始化TXREG=0X55; //发送数据55H进行测试for(;;);}------------------------------------------汇编语言版本的RS-232接口实现计算机和单片机通信程序------------;此程序通过RS-232接口来完成计算机和单片机通讯(程序以在p18 f458试验板上调通);本单片机程序由提供;此程序首先发送测试数据55H,再通过中断实现数据的接收和发送;程序的调试可以用"串口调试助手V2.1"辅助完成LIST P=18f458INCLUDE "P18f458.INC"ORG 0x00GOTO MAINORG 0x08GOTO INTSERVEORG 0X30;**************中断服务子程序***************INTSERVEBTFSS PIR1,RCIF ;接收中断标志为1?GOTO ERR_RE ;误操作,返回MOVF RCREG,0 ;否则,将接收到的数据通过W寄存器MOVWF TXREG ;放入发送寄存器,并启动发送ERR_RE NOPRETFIE;****************初始化程序***************INITIAL NOPMOVLW 0X19 ;选择传输波特率为9600bpsMOVWF SPBRGMOVLW 0X04 ;选择异步高速方式传输8位数据MOVWF TXSTAMOVLW 0X80 ;允许同步串行口工作MOVWF RCSTAMOVLW 0X80 ;将RC7,RC6设置为输入,断绝与外接电路的连接MOVWF TRISCBSF TXSTA,TXEN ;发送允许BSF RCSTA,CREN ;接受数据允许BSF PIE1,RCIE ;接收中断使能MOVLW 0XC0 ;总中断和外围中断允许MOVWF INTCONRETURN;**********************主程序********************* MAIN NOPCLRWDTCALL INITIALMOVLW 0X55 ;发送数据55H进行测试MOVWF TXREGLOOPGOTO LOOPEND两片51单片机互相通信的串行通信程序(一个发送程序,一个接收程序)2007-05-27 08:27;系统晶振是 11.0592 MHz;51单片机发送单片机程序;此程序用Proteus仿真通过;此程序在硬件上测试通过;2007-05-27;附有简化电路图;为了使初学者能看懂,程序与图尽可能的简单扼要;实验现象为,发送端的P1口的哪个键被接下,接收端的哪个灯对应着亮;如果把两个单片机的T和R通过无线模块(如基于MCP2120芯片的模块)来扩充,便可做成无线通信ORG0000HAJMPSTARTORG0040HSTART:MOVSP,#60HMOVSCON,#50H;串口方式 1MOVTMOD,#20H;T1 方式2MOVTL1,#0FDH;波特率 9600 的常数MOVTH1,#0FDHSETBTR1movr5,#00hWAIT:movp1,#0ffhmova ,p1movr5,alcalldelay ;读键盘,这里去抖动,还要加几句话mova ,p1nopCJNEA,5,WAIT ;是否有键输入MOVSBUF,a;串口输出键盘输入的值NOPSS: JBCTI,WAIT;是否发送完毕SJMPSSDELAY:;延时子程序PUSH;保存现场PUSH1MOV0,#06HDELAY1: MOV 1,#0HDJNZ1,$DJNZ0,DELAY1POP1;恢复现场POPRETEND;系统晶振是 11.0592 MHz;51单片机接收单片机程序;此程序用Proteus仿真通过;此程序在硬件上测试通过;2007-05-27;附有简化电路图;为了使初学者能看懂,程序与图尽可能的简单扼要;实验现象为,发送端的P1口的哪个键被接下,接收端的哪个灯对应着亮;如果把两个单片机的T和R通过无线模块(如基于MCP2120芯片的模块)来扩充,便可做成无线通信ORG0000HAJMPSTARTORG0040HSTART:MOVSCON,#50H;串口方式 1MOVTMOD,#20H;T1 方式 2MOVTL1,#0FDH;波特率 9600 的常数MOVTH1,#0FDHSETBTR1WAIT:JBCRI,DIS_REC;是否接收到数据sjmpwaitDIS_REC:MOVA,SBUF;读串口接收到的数据movp1,aSJMPwaitend51单片机串行口通信程序设计例子时间:2009-03-06 17:13来源:未知作者:牛牛点击: 768次串行口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就能扩展一个并行口。
三菱PLC与单片机间串口通信的实现
三菱PLC与单片机间串口通信的实现叶翠安【摘要】文中利用PLC和单片机之间的串口通信,将PLC系统的数据传送到单片机系统进行显示,单片机系统除了显示功能还可模拟工况输入,实现了辅助锅炉改造升级,使得辅助锅炉既可用于真正的操作训练,又可通过改造的MIMIC模拟屏进行仿真教学训练,既节省教学过程的油耗,教学过程又安全,发挥了各自的优势,实践证明,较好地满足教学和评估的要求.【期刊名称】《船电技术》【年(卷),期】2015(035)005【总页数】4页(P66-69)【关键词】PLC;单片机;串行通信【作者】叶翠安【作者单位】广东交通职业技术学院,广州510800【正文语种】中文【中图分类】TP2730 引言锅炉是供生产和生活上使用的一种热能设备,如果管理不善或使用不当,往往会引起事故,轻则停炉影响生产,重则发生爆炸,造成人身伤亡,损坏厂房、设备,后果十分严重。
国内外都把事故危害较大的锅炉作为一种特殊的热能装置,从设计、制造到管理操作都有严格的标准。
文中船舶辅助锅炉原来是从船上拆下,已将控制系统改造为PLC控制系统,使用中发现,每次教学训练,训练油耗大,也不易于在训练中设置设备的临界危险状态。
由于锅炉的操作管理过程比较严格,系统复杂,安全系数高,若完全采用真实锅炉来训练,除了油耗,直观性也不好,学员训练印象难以深刻。
为了改善船舶辅助锅炉教学装置的性能和功能,满足教学和评估需要,更好进行教学,添置了一个MIMIC屏和触摸屏,利用PLC与单片机组成新的控制系统,通过输入输出接口和实物锅炉结合,组成一个带声、光多媒体的半实物连续仿真系统,使学员在培训和考核中具有逼真的真实感,达到虚拟现实的效果,系统升级改造后,效果良好。
系统设计与构成如图1所示。
1)实物辅助锅炉:用于学生现场真实操作训练,培训和考核。
2)测控系统:是整个系统的控制核心,负责数据的采集,采用三菱FX2N-64MR,FX2N-485BD,FX2N-4AD。
电气自动化专业题目是单片机与PLC交互应答(485通讯) 模拟PLC接收
毕业设计说明书题目: ____________________学生姓名: ________________________________ 学号: ________________________________ 学院: ________________________________ 专业: ________________________________ 班级: ________________________________ 学校指导教师:_____________________________ 企业指导教师:_____________________________年月日PLC与单片机串行通信的实现摘要将PLC与单片机相比较会发现,二者之间最主要的差异在于性能和用途上。
就PLC来说,强大的应用运行能力适合专业的工作,且具有较高的稳定性和可操控性,在条件较差的环境下工作时也能保持稳定的运行。
单片机的用途与PLC 相似,由于其总质量较轻、材料质量较低等原因在对抗自然环境条件时存在一定的缺陷,但同时拥有的便捷性使单片机可以广泛应用在普通电器和相对简单的工具上。
在实际使用过程中,一般都是把两者放在一起使用,把两者形成一个控制系统,这样就既可以发挥自己的功能优势,还能发挥共同的优势。
在将二者连接形成完整信息传输系统时所面临的最困难的部分是串行通信。
本文根据型号为S7-200的PLC串行通信的方式对上述连接方式进行信息连接的尝试和改进,并根据实际情况对通信协议进行了明确的阐述。
关键词:PLC;单片机;串行通信目录1. 绪论 (1)1.1单片机概述 (2)1.2单片机的特点 (2)2. 西门子S7-200系列PLC硬件单元 (2)2.1主机 (2)2.2S7-200PLC的主要结构特点 (2)2.3PLC通信网络简介 (3)2.3.1 通信方式 (3)2.3.2通信介质 (3)2.3.3PLC常用通信接口 (3)3.AT89C51单片机的硬件结构 (3)3.1硬件组成 (3)3.2管脚说明 (3)3.3串行通信 (4)3.3.1特殊寄存器 (4)3.3.2波特率 (4)4. PLC与单片机的串行通信 (4)4.1硬件分析 (4)4.1.1S7-200系列PLC的自由口通信 (4)4.1.2 AT89C51单片机串行通信实现 (4)4.1.3 MAX485芯片 (4)4.2通信原理 (5)4.2.1接口电路设计 (5)4.2.2通信协议设计 (5)4.2.3通信程序 (5)5. PLC与单片机通信实例 (7)6. 结论 (8)参考文献 (9)致谢 (10)1绪论越来越多的高科技电子设备进入我们的生活,在自动化控制的今天,某公司生产了一种具有高性能,多功能的新设备,它是一种可以通过自动化控制的设备,又可以叫做控制器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我用的是天祥单片机实验板,由于没有RS485接口,我利用ADM485芯片自制了一个485接口,如图,但如果要进行半双工通讯,须将P3.0口到下载程序的RS232芯片的线断开可用一个跳线,用RS485的时候断开RS232,用RS232的时候插上跳线帽。硬件连接如图
PLC程序:
通讯我用单片机做主机(只发送指令),PLC做从机(只接收指令),单工单向,以便初学着掌握。
sbit led=P1^1;/*将RS485置为发送数据模式*/
unsigned char i;
void init()
{
SCON=0x50;/*串口中断开*/
TMOD=0x20;/*定时器设置*/
TH1=0xfd;/*定时时间的高位*/
TL1=0xfd;/*定时时间的低位,速度为9600BPS*/
TR1=1;/*定时器开*/
格式:1位启始,8位数据,一位停止。
所以PLC寄存器D8120:0C81.
plc程序很简单不懂的可以看下三菱PLC的通讯手册。如下图:
三:单片机程序:
#include<reg52.h>/*单片机的头文件*/
unsigned char code tab[]={0x17,0xff};/*PLC输出的Y点数,PLC输出Y灯0125678亮*/
QQ:79814563注明时工控交友
电话:15250151540
姓名:黄辉
2011年12月17日Saturday
51单片机与三菱PLC无协议通讯成功
我用了两个晚上的时间查阅一些资料,利用三菱PLC的扩展RS485通讯板与其51单片机连接通讯,可写PLC任意的地址。长度可达1000米,看见网上写的都很烦且对三菱和单片机不是很熟的朋友来说有一定的阅读难度,今天将它与大家分享。希望在此基础上大家能扩展出自己想要的功能,过些时间有空我在写个半双工的程序。
EA=1;/*开总中断*/
TI=0;/*复位串口中断*/
led=1;/*将RS485置为发送数据模式*/
}
void main()
{
init();/*调用子程序*/
for(i=0;i<2;i++)
{
SBUF=tab[i];/*将数据发送到串口*/
while(!TI);/*等待串口数据发送结束*/
TI=0;/*复位串口中断*/
}
}
四:注意点。
1:RS485的线不能接反,否则数据将不正确。
2:单片机的晶振要选择11.0592MHZ,否则PLC接收到数据也不正确。
3:RS485芯片的电源不能接反,否则要烧坏芯片。
今天要去山东调试机器,现在正在高铁上,刚好有空把这篇心得写好,有错误的地方还请大家指正,也希望有共同爱好的一起交流心得。