PLC如何与单片机进行通讯?共有三种方法!你会用几个?
原创不易,请勿抄袭!
通讯是一个工控朋友学习或者工作到一定程度不得不面对的一个难题,可也是区别新手和高手的一道分水岭,新手遇到通讯问题往往会比较抓狂,不知道如何着手,而老手即使面对没有经验的设备也会有一个大概的思路.有朋友问我关于西门子PLC与单片机通讯的问题,今天给大家汇总一下.
首先西门子PLC与单片机共有三种办法进行信号交换:
1 信号线连接.这是一种最简单的方式,即在单片机和PLC之间进行连接信号线,PLC的输入接单片机输出;PLC输出接单片机输入,这是一种最普遍的方式,通过这种方式PLC几乎可以和任何工控的控制装置连接,比如伺服系统,变频器,机器人等等!缺点是如果需要传递的信号太多,那么电缆数量也会很大,而且一旦电缆损坏,维护起来很困难!
2 自由口通讯,以前我们多次讲到过自由口通讯,而且专门讲解过ASCII码,有需要的朋友可以去我以前的文章里去找,今天不重复了。
3 第三种方法是利用ModBus协议进行通讯。
本节主要讲解以PLC作主站,51单片机作从站,用ModBus协议进行通讯。PLC读取单片机保持寄存器区的数据。S7-200PLC程序主要通过调用Modubs RTU 主站指令库完成。
一、调用 Modbus RTU 主站初始化和控制子程序
使用 SM0.0 调用 MBUS_CTRL 完成主站的初始化,并启动其功能控制:
各参数意义如下:
1 EN 使能:必须保证每一扫描周期都被使能(使用 SM0.0)
2 Mode 模式:为 1 时,使能 Modbus 协议功能;为 0 时恢复为系统 PPI 协议
3 Baud 波特率:支持的通讯波特率为1200,2400,4800,9600,19200,38400,57600,115200。
4 Parity 校验:校验方式选择;0=无校验,1=奇较验,2=偶较验。
5 Timeout 超时:主站等待从站响应的时间,以毫秒为单位,典型的设置值为 1000 毫秒(1 秒),允许设置的范围为 1 - 32767。
注意: 这个值必须设置足够大以保证从站有时间响应。
6 Done 完成位:初始化完成,此位会自动置1。可以用该位启动 MBUS_MSG 读写操作(见例程)
7 Error 初始化错误代码(只有在 Done 位为1时有效): 0= 无错误,1= 校验选择非法,2= 波特率选择非法,3= 模式选择非法。
二、调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求;
各参数意义如下:
常见的错误:
如果多个 MBUS_MSG 指令同时使能会造成 6 号错误库存储区被程序其它地方复用,有时也会造成6 号错误从站 delay 参数设的时间过长会造成主站 3 号错误从站掉电或不运行,网络故障都会造成主站 3 号错误。
含义如下:
1 EN 使能:同一时刻只能有一个读写功能(即 MBUS_MSG)使能
注意:建议每一个读写功能(即 MBUS_MSG)都用上一个 MBUS_MSG 指令的 Done 完成位来激活,以保证所有读写指令循环进行(见例程)。
2 First 读写请求位:每一个新的读写请求必须使用脉冲触发
3 Slave 从站地址:可选择的范围 1 - 247
4 RW 从站地址:0 = 读, 1 = 写;注意:
1. 开关量输出和保持寄存器支持读和写功能
2. 开关量输入和模拟量输入只支持读功能
5 Addr 读写从站的数据地址:选择读写的数据类型
00001 至 0xxxx - 开关量输出
10001 至 1xxxx - 开关量输入
30001 至 3xxxx - 模拟量输入
40001 至 4xxxx - 保持寄存器
6 Count 数据个数;通讯的数据个数(位或字的个数)
注意: Modbus主站可读/写的最大数据量为120个字(是指每一个 MBUS_MSG 指令)
7 DataPtr 数据指针:
1. 如果是读指令,读回的数据放到这个数据区中
2. 如果是写指令,要写出的数据放到这个数据区中
8 Done 完成位 读写功能完成位
9 Error 错误代码:只有在 Done 位为1时,错误代码才有效
0 = 无错误
1 = 响应校验错误
2 = 未用
3 = 接收超时(从站无响应)
4 = 请求参数错误(slave address, Modbus address, count, RW)
5 = Modbus/自由口未使能
6 = Modbus正在忙于其它请求
7 = 响应错误(响应不是请求的操作)
8 = 响应CRC校验和错误
-
101 = 从站不支持请求的功能
102 = 从站不支持数据地址
103 = 从站不支持此种数据类型
104 = 从站设备故障
105 = 从站接受了信息,但是响应被延迟
106 = 从站忙,拒绝了该信息
107 = 从站拒绝了信息
108 = 从站存储器奇偶错误
三、需要从站支持的功能及Modbus 保持寄存器地址映射
为了支持上述 Modbus 地址的读写,Modbus Master 协议库需要从站支持下列功能:
Modbus 保持寄存器地址映射举例:
四、S7-200PLC程序
五、单片机程序;STC11F04E单片机,9600波特率
START: MOV TMOD,#21H ;定时器1是8位再装入,定时器0为16位定时器
MOV TH1,#0FDH;预置初值(按照波特率9600BPS预置初值)
MOV TL1,#0FDH; 0FDH=9600=11.0592
MOV TH0, #0DCH;88H ;8800=12t,7000=stc1t
MOV TL0, #00H
ORL IE, #92H ;EA=1,ES=1;ET0=1
SETB PS ;串口中断优先
SETB TR1 ;启动定时器1
MOV 98H,#50H ;scon
MOV P1M0,#01000000b ; P1M0=0 P1M1=0双向口 P1M0=1 P1M1=0输入口 P1M0=0 P1M1=1推挽输出20ma
MOV P1M1,#10000000b
MOV WDT_CONTR ,#27H 看门狗设置使能
QL0: MOV A,#00H
MOV R0,#10H
MOV R2,#9BH ;10-ABH清零
CLEAR: MOV @R0,A
INC R0
DJNZ R2,CLEAR
CLR FLAG
CLR FLAG_0
SETB TR0 ;启动定时器0
;ANL AUX,#07FH ;p3.0p3.1当串口
ORL AUX,#80H ;p1.7,p1.6当串口
CLR P3.7 ;485芯片接收使能
WA1: ;MOV WDT_CONTR ,#37H;喂狗; SETB CW
JNB FLAG_0,WA1 ;FLAG_0=1表示已经接收到上位机数据
CLR TR0
MOV A,2CH ;检查设备地址是01h码,设本机地址码是1
MOV R2,A
XRL A,#01H
JNZ QL0
ACALL FSZJ ;FH: DB 01H,03H,16,00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H,0DH,0EH,0FH,10H,11H,12H,13H,14H,15H,16H,17H,18H,19H,1AH,1BH,1CH,1DH,1EH,1FH;18
ACALL DELAY
CALL FZJ
AJMP QL0
FZJ: MOV R0,#2cH ;向主机发送数据子程序
FZJ0: MOV R2,#10H
FZJ1: CLR EA
ANL AUX,#07FH ;p3.0p3.1当串口
FZL1: MOV A,@R0
MOV SBUF,A
JNB TI,$
CLR TI
INC R0
DJNZ R2,FZL1
SETB EA
RET
FSZJ: MOV DPTR,#FH
MOV R2,#19;
ORL AUX,#80H
SETB P3.7 ;发送数据
MOV R0,#40H
FSZJA: MOV A,#0H
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC DPTR
DJNZ R2,FSZJA
MOV R0,#40H
MOV CRCCD,#19
LCALL CRC1
MOV R2,#21
MOV R0,#40H
FSZJ2: MOV A,@R0
MOV SBUF,A
JNB TI,$
CLR TI
INC R0
DJNZ R2,FSZJ2
SETB EA
RET
FH:DB 01H,03H,16,00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H,0DH,0EH,0FH,10H,11H,12H,13H,14H,15H,16H,17H,18H,19H,1AH,1BH,1CH,1DH,1EH,1FH;18
用串口助手检测到的数据如下图。
喜欢的话请点赞并分享,您的支持是我坚持下去的动力!送人玫瑰,手有余香!
OLED显示屏,行驱动电路设计,单片机AT89C51与和显示屏的硬件接线
OLEDindustry
一个有内容的公众平台!
随着科学技术与电子业技术的不断发展更迭,有机发光二极管如何简易并且有效的实现显示均匀、大面积发光、高亮度高分辨率发光、以及延长有机发光二极管寿命等当前亟需解决的问题,是我们未来要面对的技术挑战。今天小编给大家带来几个平日里做有源、无源oled显示驱动设计的例子,以供大家作为电子设计参考。
一、驱动控制SSD1303实现96x64点阵PM-OLED
本例子使用Solomon公司的OLED显示驱动电路SSD1303,结合AT89C51单片机实现驱动OLED显示屏的方法。SSD1303是一款集控制器、行驱动器和列驱动器于一体的专用于OLED显示控制驱动电路。
实验中OLED结构阳极材料,采用ITO(铟锡氧化物),阴极则使用Mg与其他稳定金属合金的办法Mg:Ag做阴极,以提高器件量子效率和稳定性,并可以在有机膜上形成稳定坚固的金属薄膜。
PM-OLED使用普通的矩阵交叉屏, OLED位于交叉排列的阳极和阴极中间,通过对阳极和阴极组合的选通,可以控制每一个OLED的点亮。
SSD1303芯片内部电路框图如下图1所示:
SSD1303芯片主要由MCU接口、命令译码器、振荡器、显示时序发生器、电压控制与电流控制、区颜色译码器、和图形显示数据存储器(GDDRAM)、行驱动和列驱动组成。这种IC的专用OLED驱动方案使OLED显示性能最佳,降低了功耗。该器件采用TCP/TAB封装。具有驱动最大132×64点阵的图形显示、提供的逻辑电源为2.4~3.5V、供给OLED屏的电源为7.0~16V、列输出的最大电流为 320μA、行输入的最大电流为45mA、低电流睡眠模式小于5μA、256级对比度控制,可编程帧频、具有几个MCU接口,如68/80并行总线和串行的周边接口、132×65bit显示缓冲器、可以垂直滚动、支持部分显示、工作温度:-40 oC~ 85 oC。
整个系统由单片机、控制驱动电路SSD1303和OLED显示屏三部分组成.SSD1303与单片机接口的引脚有:DO~D7为与单片机接口的数据总线,R/W(RW#)为读写选择信号,D/C为数据/命令选择信号,CS#为片选信号,低电平有效,E(RD#)为使能信号,RES#为复位信号。单片机采用ATMEL 公司生产的低功耗、高性能的AT89C51, AT89C51与SSD1303和显示屏的硬件接线如图2所示,P1.0、P1.1、P1.2、P1.3、P1.4分别与SSD1303的 R/W(RW#)、D/C、CS#、E(RD#)、RES#相连,P0口与SSD1303的数据总线相连。其它引脚的连线VCC接12V,VDD接 2.7V,VSS接地等。下面通过程序来控制这些引脚,从而使OLED显示需要的汉字或图形。主程序软件流程图如图3所示。
图2 单片机AT89C51与SSD1303和显示屏的硬件接线
图3 主程序软件流程图
二、台湾普诚PT6807/PT6808无源矩阵驱动方式
本案例采用ISL97702便携式产品的DC/DC直流升压电源电路,输入电压2.3~5.5V,输出电压根据负载轻重在2~30V范围内可调;OLED显示驱动采用PT6807和PT6808构建的无源矩阵驱动方式,适用于单色小尺寸OLED的显示驱动。
只所以选择ISL97702作为电源IC,需要考虑器件运行在最高效率的同时,尽可能的降低功耗并延长电池工作时间。ISL97702具有一种突发模式以及双输出电压选择功能,用以在轻载电流下保持转换器的效率和电源的节约。并且ISL97702还具有浪涌电流限制、短路保护和关机期间负载隔离等功能。ISL97702的DC/DC直流升压电源电路图,如下图所示:
基于ISL97702的DC/DC直流升压电源电路图
OLED显示屏像素点,按行、列排成矩阵,显示图像时,按行扫描或按列扫描,无源矩阵的基本结构框图,如下所示:
无源矩阵基本结构框图
其中“行”是由公共驱动器PT6807依次选通,“列”则是由列选择器PT6808根据图形要求来开通。例如,图中假如第一行只有第一个OLED导通就只有大约0.3mA,而假如第二行是所有OLLED都选通,而每一行一共有100个OLED,则其总电流大约为33mA。也就是说,其总电流是由每一行中的OLED数,就是其象素数决定。因为OLED的亮度是由其电流决定的,所以保持电流的稳定是很重要的。列驱动通常采用P沟道器件作为电流源。为保证其工作于饱和区,至少需要有2伏电压,这样其输出电流随VDS的变化将会小于1%每伏。当某一行有很多OLED导通时,它的总电流就比较大。这时在连接电极上就会有较大压降,从而使VDS降低。而这种压降又取决于显示的图形,而且是不可避免的。所以必须将电流受VDS的变化而变化的灵敏度降至最低。同时输出电流的不均匀性也受到驱动器件的不一致性的影响,这种不均匀性可以靠提高VGS工作电压和版图匹配技术来减小。
128×128点阵模块驱动接口,如下图所示:
128×128点阵模块驱动接口图
1. 行驱动电路设计
PT6807是点阵OLED图形显示系统64路行驱动器,它利用CMOS技术,提供64个移位寄存器和64路输出驱动,PT6807自己产生时钟信号用来控制PT6808列驱动器。
PT6807可以设计为主,从两种模式,为OLED驱动显示提供方便;主/从模式选择由控制脚MS来控制,在主模式下,选择MS脚为高电平,输入/输出脚DIO1,DIO2,CL2只作为输出脚来用;在从模式下,MS脚被置为低电平,输入/输出脚CL2作为输入来用,而DIO1,DIO2的状态由SHL脚来决定。
晶振电路:主模式下,可由R、C、CR端来决定时钟频率;在从模式下,晶振电路的R,C端为悬空状态,CR端接高电平。
显示占空比选择:显示占空比靠输入脚DS1,DS2的状态来决定;在主模式下根据DS1,DS2脚的设置来选择占空比,有四种占空比1/48,1/64,1/96,1/128可供选择;在从模式下,DS1,DS2脚与电源VDD相连。
移位时钟和相位选择:PCLK2用来选择移位数据是在CL2时钟信号的上升沿,还是下降沿移出;数据移位方向的选择由MS,SHL脚来控制。
2. 列驱动电路设计
PT6808是点阵OLED图形显示系统64路列驱动器,它也利用CMOS技术,并提供显示RAM、64位数据锁存、64位驱动和解码逻辑,内部显示RAM用来存储由八位微处理器传来的显示数据,它根据存储数据产生点阵OLED驱动信号,与PT6807(行驱动器)配合使用。
输入缓存用来允许和禁止PT6808,当输入输出数据和指令被执行时,CS1B和CS3必须处于工作状态,不论CS1B和CS3处于任何状态,RSTB和ADC都可以正常操作,并且内部状态不会改变。
输入寄存器用来与MPU接口,并临时存储要写入显示RAM的数据,当CS1B和CS3处于工作状态时,输入寄存器通过R/W和RS来选定,数据通过MPU被写入输入寄存器,然后写入显示RAM中,数据在E信号的下降沿被锁入,通过内部操作自动写入显示RAM中。
输出寄存器:当CS1B和CS3处于工作状态,并且R/W和RS为高电平时,输出寄存器用来临时存储显示数据RAM,也即显示数据RAM中的存储数据被锁存到输出寄存器。当CS1B和CS3处于工作状态,R/W为高,RS为低时,状态数据(忙检测)可以被读出。
为了读出显示数据RAM中的内容,需要访问读指令两次,在第一次访问中,显示数据RAM中的数据被锁存到输出寄存器中,在第二次访问中,MPU读锁存数据。这就是说,在读显示数据RAM时需要一次假读,但是,在读状态数据时不需要假读。
为了克服在工作过程中当OLED亮度较高时的自动关屏问题,在写入数据之前应该查看该项,若关屏,则将其打开,以保证OLED屏的正常工作。其中判断是否关屏,若关闭则将其自动打开子程序如下:
Rs=0; // rs为数据/指令选择脚
r_w=1; // r_w为读/写输入脚
e =1; // e为允许信号输入脚
busy = P3; // P3接数据线端口
e = 0;
if(busy&0x20==0x00) // 若为真,表示已关屏
{com=0x3f; // com为形参
wr_command(com);} // wr_command是写命令子程序
三、TFT-OLED模拟像素单元驱动/控制电路
AM-OLED驱动实现方案包括模拟和数字两种。在数字驱动方案中,每一像素与一开关相连,TFT仅作模拟开关使用,灰度级产生方法包括时间比率灰度和面积比率灰度,或者两者的结合。目前,模拟像素电路仍占主流,但在灰度级实现上,模拟技术与时间比率灰度和面积比率灰度理论相结合将会是将来的一个发展趋势。在模拟方案中,根据输入数据信号的类型不同,单元像素电路可分为电压控制型和电流控制型。
电压控制型像素电路
1.两管TFT结构
电压控制型单元像素电路以数据电压作为视频信号。最简单的电压控制型两管TFT单元像素电路如图1所示。
图1 两管TFT驱动电路
其工作原理如下:当扫描线被选中时,开关管T1开启,数据电压通过T1管对存储电容CS充电,CS的电压控制驱动管T2的漏极电流;当扫描线未被选中时,T1截止,储存在CS上的电荷继续维持T2的栅极电压,T2保持导通状态,故在整个帧周期中,OLED处于恒流控制。
其中(a),(b)被分别称为恒流源结构与源极跟随结构,前者OLED处于驱动管T2的漏端,克服了OLED开启电压的变化对T2管电流的影响;后者在工艺上更容易实现。两管电路结构的不足之处在于驱动管T2阈值电压的不一致将导致逐个显示屏的亮度的不均匀,OLED的电流和数据电压呈非线性关系,不利于灰度的调节。
2.三管TFT结构
基于第二代电流传输器原理的电压控制型像素单元电路如图2所示,虚线左边可视为外部驱动电路,右边为单元像素电路。
图2 基于第二代电流传输器原理的像素电路
在控制模式下,T2和T3开启,T1和运算放大器构成第二代电流传输器,由于运算放大器的放大倍数可以取得很大,T1管的阈值电压对电流的影响变得不敏感,此时,流经T1的电流:
IT1=Vin/Rin
并且T1管源极电压应低于OLED的开启电压,防止OLED开启。在保持模式下,T2和T3关断,存储电容Cs维持T1管的栅极电压,电流经T1进入OLED。其中放大器由COMS电路实现,所有同行像素可共用一个运算放大器。
仿真结果表明,尽管T3管存在电荷注入与时钟馈漏效应,使得OLED电流略小于控制电流;在OLED标称电流为1μA,阈值电压漂移超过5V时,控制电流、OLED电流相对误差分别为-0.18%、5.2%,成功补偿了TFT的空间不均性和不稳定性。
虽然电压控制型电路具有响应速度快的特点,但由于不能准确地调节显示的灰度,难以满足显示的需求,于是人们提出电流驱动方案。电流控制型单元像素电路是以数据电流作为视频信号的。
3管电流控制型TFT像素电路
4-TFT电流控制电流镜像素电路
目前,全球已经有多家公司在从事OLED驱动IC的研究,到目前为止,还没有完全商业化的AM-OLED的驱动IC。但NextSierra公司已推出了分别集成的TFT-OLED行列驱动NXS1008、NXS1009和控制芯片NXS1010,张志伟等人采用该系列芯片,通过MCS-51单片机的控制来驱动240×320×3点阵的TFT-OLED屏,实现了大信息量的动态图形显示。
由于液晶显示器件的配套驱动芯片功能比较完善,且价格低廉,所以将此类芯片移用于有源矩阵显示屏(AM-OLED)成为了国内外当前的研究焦点。显示驱动IC是目前TFT-OLED的薄弱环节,开发通用或者专用的驱动IC,并集成控制电路,是提高OLED在平板及显示领域竞争力的重要动力。
▼
往期精彩回顾
▼
OPPO的又一首次突破!屏下摄像头真的来了.......
维信诺供应AMOLED!小米屏下摄像头来啦!
OLEDindustry
↓↓ 可以畅聊到天亮的行业技术群!你要不要来?↓↓
管理员微信:OLEDindustry2
添加管理员微信 > 入群 > 尽情畅聊探讨
相关问答
迪文H600串口屏和51 单片机 怎么 连接 ?正好我用过迪文的屏幕~但是不是H600内核的~根据H600系列的说明书,出厂默认是RS232电平,要通过232芯片连接的。但是也可以直接短接接口附近的ON标识边的焊盘...
单片机 与电脑相连需要怎么 连接 ?单片机外围电路可以做成多种通讯方式,包括串口通讯,RS485通讯,RS232通讯,CAN通讯,还有无线方式:蓝牙,WiFi等。一般需要一个通讯工具,如USB转串口工具,U...单...
51 单片机 如何与电脑相连?51单片机与PC机之间的硬件串口连接,如果PC机有COM串口用RS232转换TTL与单片机RXDTXD连接,如果PC机没有COM串口用USB转换TTL与单片机RX...
单片机 的使用流程?USART接口的使用是非常重要的,通过该接口,可以使单片机与PC机之间交换信息,虽然RS232通信并不先进,但是对于接口的学习是非常重要的。正确使用USART接口,需...
adc0809与 单片机连接 的三种方式?51单片机与0809连接时,实际上有两类接法。一是将0809连接为51的一个外扩存储器。执行MOVX指令时端口时序恰好能够满足0809要求。启动A/D转换,以及模拟通道实...
单片机 与usb怎么 连接 ?单片机与电脑连接一般有以下几种:1、RS232串口连接,这是最普遍的连接方式。2、RS232-usb,这种方式越来越受欢迎。3、JTAG--JLINK--USB(RS232),主要用于...
spi接口如何跟 单片机连接 ?这要看你用的是硬件SPI还是软件模拟SPI,如果是硬件SPI,也就是单片机自带SPI模块,只要写相应的寄存器就可以,单片机应该有确定的SPI口,与从机(或主机)一一...
51 单片机 实现直接串口在线烧录,那串口和 单片机 怎么联接呢?一...串口图进你的开发板,用开发板只是用它的串口,这样就可以少烧写程序了,你只需焊一个最小系统板,注意要将焊的最小系统板的EA口也就是单片机的第31口拉高,再从焊的...
pt100和 单片机 怎么 连接 ?首先PT100是一个由温控的可变电阻。这需要你搭个电桥电路。PT100其中的一个臂,然后将电桥的对应两点输入电源,其他两点接一个差动放大器,后输出到单片机的AD输...
菜鸟请教: 单片机 怎么与电脑建立 连接 的啊?Keil设计完程序后怎...菜鸟请教:单片机怎么与电脑建立连接的啊?Keil设计完程序后怎么把程序导入进去呢?原理呢笔记本电脑讨论回答(3)俺提供制作过程文档。使用usb接线!或者你自...