|
|
| 工控论文 | 首页┆资讯┆工控商城┆供求信息┆工控学院┆单片机站┆PLC站┆开发┆数控站┆郴州机电网┆家装安防┆下载┆论坛┆全站搜索┆
| |
关键词: 可编程控制器 VC++ MSComm 上位机 串行通讯
1 引言
在工业控制中,可编程控制器(PLC)由于控制能力强、体积小、抗干扰能力强、可靠性高、使用极为方便等优点而得到了广泛的应用,已经成为现代工业控制的主要技术平台之一。实际应用中往往需要利用PC机对PLC控制程序中的少量参数进行设置或修改,这样就需要解决PC机与PLC进行通信的问题。本文以 PLC在罐蒸呢机控制系统中与上位机PC之间通信的实际应用为基础,探讨了PLC与PC机通信问题。系统框图如图1所示:

2 方案概述
罐蒸呢机是在纺织行业当中应用较多的设备,其工作流程为:打开高压釜的门;小车从高压釜中退出;梁(轴)装在星形件上;星形件转动;梁装在小车上;小车进入高压釜;高压釜门关闭;在高压釜中循环。
在罐蒸呢机的控制当中,采用西门子S7-200系列的PLC可满足要求,在系统造价方面要求尽量低。上位机方面:需要控制的数据不是很多,采用专门的组态软件成本太高。基于这种思路,我们在上位机上采用VC++编制串口通讯程序进行数据的传输、控制。
一般S7-200系列通信端口分为四种工作方式:PPI,MPI,PROFIBUS和自由口通信。其中PPI模式只能在PLC停止方式(STOP)下通信,而自由口模式只能在PLC运行方式(RUN)下通信。CPU的串行通信口可由用户程序控制,这种操作方式称之为自由口模式。当选择自由口模式时,用户程序即可以通过发送中断、接收中断、发送指令(XMT)和接收指令(RCV)来控制串行通信口的运行。在自由口模式下,通信协议完全由用户程序来控制。
由于在自由端口模式下,通信协议可完全由梯形图程序控制,还可使用接收中断、发送中断、发送指令和接受指令来控制通信操作,因而选用自由口通信方式。
3 上位机(PC)控制程序编程
3.1 初始化
上位机的控制程序的编写按照如下步骤进行:
(1) 建立基于对话框的MFC应用程序;
(2) 在对话框中插入MSComm控件;
(3) 利用ClassWizard定义CMSComm类控制对象;
(4) 在对话框中添加MSComm控件,并赋予变量;
(5) 打开串口、设置参数:需要完成的任务是选择、打开串口,规定波特率,校验类型,数据位、停止位等一些控制信息;
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(1); //选择com1
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);
//打开串口
else
AfxMessageBox("cannot open serial port");
m_ctrlComm.SetSettings("9600,n,8,1");
//波特率9600,无校验,8个数据位,1个停止位
//在该处的设置要同下位机的通讯参数相匹配,一般根据下位机的具体情况设定
m_ctrlComm.SetInputMode(1);
//1:表示以二进制方式检取数据
m_ctrlComm.SetRThreshold(1);
//SetRThreshold(1);
//参数1表示当串口接收缓冲区中有大于等于1个字符时将引发接收数据的OnComm事件
m_ctrlComm.SetInputLen(0);
//设置当前接收区数据长度为0
m_ctrlComm.GetInput();
//先预读缓冲区以清除残留数据
(6) 添加串口事件消息处理函数OnComm。 这个函数是用来处理串口消息事件的,即每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,就会执行刚才添加的函数,在OnComm()函数中加入相应的处理代码就能实现自己想要的功能。
3.2 控制数据的处理
对控制数据进行存储操作,编程时给控制量赋初值即默认值,每次运行上位机控制程序时将控制数据读出并送给相应的控制单元,即使是第一次运行该程序,点击 “运行”也能将控制数据从文件中取出并同步下达到下位机;以后每次更改控制数据时就将该控制数据进行保存,作为新的默认控制数据,以备以后启动设备时使用。
在这里我们要实现的功能是控制下位机的启动和停止,以及三个定时器的定时长度的给定。所发送的数据包括下位机的起停标志,3个定时器定时长度和控制信息结束标志。需要注意的是在控制信息的结尾要添加结束标志,该结束标志在PLC上规定,需要上位机配合,作用是下位机接收到该标志以后产生接收完成中断,从而响应上位机的控制。具体操作如下:
发送数据:由发送按钮触发一个单击消息,用以读取编辑框的内容,将读取的数据保存到文件当中,并向串口发送数据。
UpdateData(TRUE); //读取编辑框内容
CFile OutFile;
OutFile.Open(pFileName,CFile::modeCreate|CFile::modeWrite);
OutFile.SeekToEnd();
CArchive ar(&OutFile,CArchive::store);
UpdateData(true);
ar << m_strTXData<<m_strTXData2<<m_strTXData3; //将数据保存
ar.Close();
OutFile.Close(); //文件关闭
CtrlData=MachineState+m_strTXData+m_strTXData2
+m_strTXData3+EndFlag; //控制数据
MessageBox("发送给定数据?","发送提示!",0+48+512);//添加消息提示框
m_ctrlComm.SetOutput(COleVariant(CtrlData));
//发送数据
CtrlData="";
另外,启动、停止按钮也会触发单击消息,处理方法跟上述发送数据的过程相似,只是在处理时要首先置位MachineState,启动时置1,停止时置0,用来启动或停止设备;而且不再对保存控制数据的文件进行操作。
4 下位机(PLC)控制程序编程
4.1 初始化
设定串口的通讯参数。接收完成以及发送完成都要产生中断,中断号分别为9、23。
main:
NETWORK 1
LD SM0.1
MOVB 16#09, SMB30 //自由口参数:无校验,8位数据位,波特率9600,自由口通信;
MOVB 16#B0, SMB87
//接收信息控制,启动接收功能,检测信息结束标志;
MOVB 16#2A, SMB89
//定义信息结束标志,与上位机配合;
MOVW +5, SMW90
//空闲行时间期限,单位微秒;
MOVB 100, SMB94 //接收字符数目最大值
ENI //开中断
ATCH INT_0, 23 //接收中断连接
ATCH INT_2, 9 //发送中断连接
RCV VB100, 0
4.2 控制主程序
NETWORK 1
LDB= VB101, 16#31
//检测到要求起动机器的控制信息,转入开动操作
LPS
S V10.0,1 //设置启动标志位
A V10.0 //检测启动标志位
A I0.1 //检测输入是否为1
TON T51, VW600
//若各条件具备,启动定时器,其定时参数由上位机给定
A T51
A V10.0
//若定时到并且下位机处于启动状态,置位输出Q0.4
= Q0.4
NETWORK 2
LDB= VB101, 16#30
A V10.0
S V10.0, 1
这段程序将接收到的控制数据的启动、停止控制位进行判断,根据判断的结果决定启动还是停止设备;在这段程序里面还将上位机发送的时间数据送给定时器;这样上位机就能实时控制下位机的起停,并且能实时的对定时器的定时长度进行修改,实现远程控制。
4.3 中断处理
INT_0:
//接收完成中断如果接收状态显示接受到结束字符,连接一个10ms定时器
// 发发送,同时将接收到的控制信息中的控制数据部分进行转换,以便后续程序的应用
LDB= SMB86,16#20
MOVB 10,SMB34
BTI VB102, VW600
//数据转换,由ASCII转换为整型数据
-I 16#0030, VW600
//将整型数据进行运算得出操作者见到的数据
*I +10, VW600
ATCH 1,10
CRETI
NOT
RCV VB100,0
//如果接收完成,然后启动一个新的接收
在这段程序中将接收到的数据信息部分进行转换和运算。因为默认的下位机接收和发送的数据都是文本信息,格式为ASCII码值,所以如果想得到用户在上位机上给定值转换成为整数,然后将这些数据用于控制。
4.4 注意事项
在编程时有一点应该注意:那就是接收和发送两种模式之间的切换时间,因为用485通讯口进行通讯时,发送结束后不能立即转为接收模式,有一个反应时间。所以在接收完成后如果要接着发送数据的话,需要设一个定时器,延迟一段时间以后再进行发送操作,反之亦然。主程序及各中断服务程序流程图如图2所示:

5 结束语
上位机的运行界面如图3所示,在该界面下就能实现对下位机的启动、停止控制,以及对控制参数的修改,并可实现参数的在线修改。

在该工程中控制对象的控制点数不是很多,人机交互也不是很多,功能相对独立,能够独立组成一个小系统。在这种情况下该方案能有效节约投资,简化控制,维护方便,操作简单,且能保证控制系统的实时性,在小型控制系统尤其是需要交互的数据不太多的情况下,优势较为明显。
![]() 固定式、无线移动式PO… | ![]() 嵌入式大容量数据存储… | ![]() 基于ARM+FPGA的高速同… | ![]() 气象信息数据采集与传… |
![]() 一种简单串行鼠标控制… | ![]() Matlab环境下PC与单片… | ![]() 51单片机的13×14点阵… | ![]() 用MSP430单片机实现微… |
![]() | [人机界面报价]F940GOT-SWD-C 三菱|触摸屏 人… | 07-22 | ![]() | [人机界面报价]F940GOT-LWD-C 三菱触摸屏人机… | 07-22 |
![]() | [人机界面报价]F930GOT-BWD-C 三菱触摸屏 人… | 07-22 | ![]() | [人机界面应用]HMI-based设备自动化行业标准化… | 03-09 |
![]() | [人机界面应用]HMI-based电力行业方案 | 03-09 | ![]() | [人机界面应用]飞机场油库监控和飞机加油控制… | 03-09 |
![]() | [人机界面应用]炼油厂工程数据控制系统 | 03-09 | ![]() | [人机界面应用]中国铁路燃油管控一体化系统 | 03-09 |
![]() | [人机界面应用]油田储油罐区微机管理系统方案 | 03-09 | ![]() | [人机界面应用]组态软件示功图在油田的应用 | 03-09 |
![]() | [传感器资讯]新型数字化、网络化传感器在工… | 03-16 | ![]() | [传感器应用]BANNER传感器应用举例-产品检测 | 03-16 |
![]() | [传感器资讯]IRI 1001在重庆机场检测“非典… | 03-16 | ![]() | [传感器应用]光纤光栅测温系统在电力行业的… | 03-16 |
![]() | [传感器应用]光纤光栅传感系统在桥梁健康监… | 03-16 | ![]() | [传感器应用]光纤光栅监测系统在石油石化工… | 03-16 |
![]() | [传感器应用]可接受任何恒流、恒压供电压力… | 03-16 | ![]() | [传感器资讯]桥梁、大坝、大型建筑健康监测… | 03-16 |
![]() | [传感器资讯]总支-分支行的网络监控系统 | 03-16 | ![]() | [传感器资讯]将监控摄象机图像存储到服务器… | 03-16 |
![]() | PLC在模拟量信号监测与控制中的应… | 1993 |
![]() | PC机与多单片机串行通信的实现 | 1345 |
![]() | PLC在数据采集和处理中的应用 | 1178 |
![]() | 汽车焊接车间设备故障自动诊断及… | 1169 |
![]() | VC中基于MSCOMM控件串行通信程序… | 1109 |
![]() | 上位机与PLC通信与实时控制的实现 | 971 |
![]() | PLC在电厂输煤系统中的应用 | 968 |
![]() | 单片机显控系统中的汉字输入 | 910 |
![]() | 固定式、无线移动式POS终端、税控… |
![]() | 嵌入式大容量数据存储解决方案 |
![]() | 基于ARM+FPGA的高速同步数据采集… |
![]() | 气象信息数据采集与传输系统的设… |
![]() | 一种简单串行鼠标控制的单片机实… |
![]() | Matlab环境下PC与单片机的串行通… |
![]() | 51单片机的13×14点阵缩码汉卡 |
![]() | 用MSP430单片机实现微波成像系统… |
CopyRight 2005-2010,中国自动化资讯网 ZIDH.COM, Inc. All Rights Reserved 湘ICP备06013102号
服务热线:13762556743 zidh.com@163.com mcu-yf@163.com