0引言
随着计算机与通信技术的发展,plc各种模块的多样化和信息化,由plc作为基本控制单元的分布式控制系统在自动化领域中广泛应用,迫切需要一种总线能适合远距离的数字通信。在rs422标准的基础上,eia研究出了一种支持多节点、远距离和接收高灵敏度的rs485总线标准。eia曾经在它所有标准前面加上rs前缀(英文rcommendestandard的缩写),因此许多工程师一直沿用这种名称,因为rs485的远距离(1200m)、多节点(32)以及传输线成本低的特性,使得eia的rs485成为工业应用数据传输的首选标准。
我厂18条电动执行机构调试线,分布在三个厂房的若干区域,每个调试线由一台plc与hmi控制,为了将调试数据归口管理,并判断调试结果的正确性,对调试线进行监控,18台plc通过rs485总线与计算机连接起来,构成一个分布式监控系统,通过数据通信使计算机和plc实现数据共享,完成对调试过程的集中管理和分散控制。计算机与plc各个子站的的通信是系统的重要环节,本文详细论述了基于rs485总线,利用vb开发了上位机通信系统,编写了plc自由口的通讯协议的设计与实际应用方案。可以借鉴为各种上位机、plc、hmi等通信系统设计的应用范例,同时可作为检测技术、自动化设计等课程的工程项目训练与教学的平台。
1rs485网络构成
rs485标准采用有平衡式发送,差分式接收的数据收发器来驱动总线,与rs422一样,可以将多个(最多为32个)rs485接口互连,而其连接更简单,只需将各个接口的“+”端和“+”端相连、“-”端和“-”端相连,连接的两根线就是rs485的“物理总线”。这些相互连接的rs485接口的物理地位完全平等,在逻辑上取一个为主导地位,其他为从属地位。在通信时,同样采用主呼叫,从应答的方式。
控制系统的硬件构成如图1所示,上位机为计算机,下位机采用西门子公司s7-200系列plc,各plc通过通信口0直接挂在rs485总线上,上位机通过rs232/485转换器与rs485总线相连,形成1:n通信方式。控制系统中,上位机的主要任务是获取调试线上的数据信息,完成对调试过程的监控。下位机的主要任务是对调试过程进行自动控制,将调试数据发送给上位机,并按上位机命令执行。
图1网络图
2计算机与plc的通信
上位机与plc的通信实际上是计算机与plc的通信模块之间交换命令和响应,下位机具有初始传送优先权,将所有调试数据发送给上位机,上位机根据收到的数据判断哪个调试线发出的数据,对数据分析后响应回传数据与命令,下位机只接收发送给自己的数据。通信以“帧”为单位进行,帧分为数据帧和响应帧两种。数据帧由plc发送给上位机;响应帧为上位机接到数据帧后自动向plc发出的命令与判断信号所有的指令码、字符和数据均以十六进制码发送和接受。
s7-200系列plc通信模式有两种:一种是点对点(ppi)通信协议,用于plc与其编程器或西门子公司的人机接口产品之间的通信;另一种是对用户完全开放的自由口模式(freeportmode),由用户自行规定通信的协议。ppi模式只能在plc停止方式(stop)下通信,而自由口模式只能在plc运行方式(run)下通信,我们采用自由口通信方式在进行通信之前,应先对串口初始化。对s7-200plc的初始化是通过设置特殊标志位smb30来实现的。
2.1plc的发送指令
发送s7200系列plc有专门的发送指令用于发送数据,格式为:
xmttableport
xmttableporttable为发送数据的字节数即数据长度,最大为255。而要发送的数据必须存储在table的后面。如table的存储区域为vb600,要发送“message”的数据存储形式如图2所示。port指定通信口,本项目设为0。当正在发送数据时,plc特殊标志位sm4.5为0;发送完后,sm4.5为1。因此可通过判断sm4.5的状态来进行发送后处理。
图2plc发送信息
如果有一个中断服务程序连接到发送结束事件上,在发送完缓冲区中的最后一个字符时,则会产生一个中断(对端口0为中断事件9,对端口1为中断事件26)。
2.2plc接收指令
接收指令的格式为:rcvtableport
接收指令使您能够接收一个字节或多个字节的缓冲区,最多为255个。图3给出了接收缓冲区的格式。如果有一个中断服务程序连接到接收信息完成事件上,在接收完缓冲区中的最后一个字符时,s7-200会产生一个中断(对端口0为中断事件23,对端口1为中断事件24。)也可以不使用中断,通过监视smb86(端口0)或者smb186(端口1)来接收信息。当接收指令未被激活或者已经被中止时,这一字节不为0;当接收正在进行时,这一字节为0。
图3接收信息
2.3特殊寄存器及相关的位
smb30控制自由端口0的通讯方式,smb130控制自由端口1的通讯方式。您可以对smb30和smb130进行写和读。如表1所示,这些字节设置自由端口通讯的操作方式,并提供自由端口或者系统所支持的协议之间的选择。
通信接收字符缓冲器smb2:smb2是一个暂态寄存器,用于存放在自由口通信方式下接收到的当前字符,用户在下一步应从这里取走其中的内容,通过编程控制将接收到的字符一个一个由smb2移入接收缓冲区。
通信校验结果标志位smb3.0:plc按smb30规定的奇偶校验方式对所接收到的数据作校验。如果校验有错,plc自动将smb3.0置1,sm3.0=0表示奇偶校验正确。根据这个标志,可决定对当前信息的取舍,还可以在出错的情况下,将此错误位发送给对方,以便要求它重发。
工作方式标志位sm0.7:57-200系列plc只有处于运行(run)方式时才能进行自由口模式通信,而在停止(st6p)方式时只能以ppi模式通信。当plc处于run方式时sm0.7=1,否则sm0.7=0,因此可通过判断sm0.7的状态来打开或关闭自由口通信。
发送器空标志sm4.5及收发指令:当正发送数据信息时,特殊存储器位sm4.5=0,当发送完成后,sm4.5=1,因此可通过判断sm4.5的状态来进行发送后处理,也可直接用发送中断来处理。
表1特殊存储器字节smb30
3上位机程序设计
在windows环境下,实现上位机与plc的数据通讯,有多种软件开发平台可以使用,visualbasic编写通信软件十分方便,编程工作量小,可视化程度高,尤其是提供了通信控件mscomm,可方便地实现与多台plc间的通信。mscomm控件有很多重要属性,其中最重要的几个是:
(1)commport:设置并返回通信口号;
(2)settings:以字符串的形式设置并返回波特率、校验方式、数据位和停止位;
(3)portopen:设置并返回通信端口的状态(打开或关闭一个通信口);
(4)inbuffercount:返回接收缓冲区收到的字节数;
(5)input属性:从接收缓冲区读取数据;
(6)output属性:向传送缓冲区写一个字符串。
计算机与plc的通信过程流程图如图5所示,下面为计算机与5号站plc的主要通信程序。
3.1初始化通信口
privatesubform_load0
mscomm1.commport=1//使用串行口1
mscomm1.settings=“9600,e,7,1”//9600波特率,偶校验,7位数据位,1位停止位
mscomm1.inbuffercount=0//清除接收缓冲区
mscomm1.inputlen=0//输入时,读取缓冲区的全部内容
mscomm1.portopen=true//打开通信口
3.2发送控制命令
privatesubsend_click()
hd=“5”+“ff”+“ww”+“a”+“m0100”+“01”+data//发给5号plc站
write=chr(5)+hd+sumchk(hd)+chr(13)+chr(10)//形成控制命令字,其中dataw为要
//写入的数据,sumchk(rd)为和校验函数
mscomm1.output=write//向5号站plc发送控制命令
do
xy=mscomm1.input//接收plc响应
rd_date=rd_date+xy
loopuntilright(rd_date,2)=chr(13)&chr(10)
rd=left(rd_date,5)//取应答字符串的前5位
ifrd=chr(6)+“02ff”then
msgbox“控制命令已接收”
else
msgbox“通信错误”
endif
endsub
3.3读取调试线状态信息
privatesubd_a()
rd=“05”+“ff”+“wr”+“a”+“do0000”+“01”
read=chr(5)+rd+sumchk(rd)+chr(13)+chr(10)
mscomm1.output=read//发送读5号站plc数据命令
do
ch=mscomm1.input//接收plc响应
r_answer=r_answer+ch
loopuntilright(r_answer,2)=chr(13)&chr(10)
ra=left(r_answer,5)//取plc应答字符串的前5位
ifra=chr(2)+“02ff”then//判断读取是否正确
mscomm1.output=chr(6)+“02ff”//正确,向plc发送
确认信号datar=mid(r_answer,6,4)//取出数据
datar=val(&h+datar)//据转换位十进制数
else
msgbox“读取数据错误”
endif
endsub
4plc程序设计
plc通过程序对调试线的控制,产生的调试结果存放在以vb100为首的255个字节中,本文主要叙述的通讯,并也存在数据的翻译过程,例如调试的力矩值放在vw200中,则要求将vb200乘以256再加vb201。若是浮点数的翻译方式还了复杂些,在此就不一一叙述。主要是将一串调试数据发送给上位机,并得到上位机的对试验结果的判断与命令。下面结合通讯相关的plc程序,对通讯进行相应的说明。
4.1主程序
ldi0.1//发送控制
eu
call发送:sbr1//将调试好的数据存储在表中,准备调用子程序发送
4.2接收子程序
sbr0:
ldsm0.0
movb9,smb30//初始化端口0
movb16#f0,smb87//初始化rcv信息控制字节,rcv使能
//检测信息结束字符,检测空闲线信息条件
movb16#05,smb88//只接收发给本站的数据(以5号站为例)
movb16#0a,smb89//接收回车键,接收的结束数据
movb5,smb90//设置空闲线超时为5ms
movb10,smb94//设置最大字符数为10
atchint_0:int0,23//接收完成,执行中断0
eni//启用用户中断
rcvvb600,0//通过端口0,接收数据,存储在以vb600为首的字节中
4.3发送子程序
sbr1:
ldsm0.0
movb2#01101001,smb30//初始化端口0,9600波特,7个数据位,偶校验
movb255,vb1000//发送的总数据位
atchint_1:int1,9//发送完成执行中断1
eni//启用用户中断
xmtvb100,0//通过端口0,发送数据,发送以vb100为首的字节中
4.4中断子程序
中断子程序int0:
ldsm0.0
movbvb602,qb0//响应已接收到命令
中断子程序int1:
ldsm0.0
call接收:sbr0//使plc处于接收状态
5结束语
该系统经实际运行情况表明,采用rs-485总线构建的分布式监控系统,硬件连接简单,编程快捷,可方便地实现计算机和多台plc间的联网通信,与用现场总线模块em277构建的profibus-dp、以太网模块em243-i相比大大降低了成本,且不受只有8个站点可以使用pcaccess的限制,运行一年多来实践表明运行稳定可靠,能很好的满足监控系统的要求。
小米6和荣耀9哪个好?釉白PK炫黑谁更胜一筹?小米店前门庭若市,华为冷冷清清,究竟为何?
新能源汽车整车动力总成系统的测试
ASML警告美国升级出口管制将加速中国开发***技术
VxWorks与SNMP代理的开发
为什么较多组织不能理解物联网的优势
基于RS485总线的分布式PLC监控系统通信设计
关于虚短和虚断的概念知识解析
南昌试产全球最大薄膜太阳能电池项目
过压保护的电路器件分析
麒麟980参数曝光:7nm制程/24核残暴GPU
戴尔用于折叠屏笔记本电脑的新设计专利曝光,带有两面显示屏
踏歌智行与宏大爆破达成战略合作
ios10.3有什么变化?到底升不升级?请君听我一席话
半监督学习:比监督学习做的更好
单通道比较器AZV3001,有效的延长了平板及笔记本电脑电池使用寿命
SMT加工过程中有哪些机器设备可以给客户保证品质呢?
CCF发布《数据中心Diskless架构》白皮书 中科驭数参与联合主编
Coles 五个月内推出SAP S/4HANA 财务核心
支持无障碍的智能手机和智能家居
发动机工作顺序的基本原则