吉林大学 毕业论文 上位机也要有能力将操作人员发出的命令准确、无误、及时地传给现场的控制装置。根据集散控制系统的要求,可编程控制器与上位机的通信模块构成了系统的数据控制层。本设计是一个小型的PLC控制系统模型,因此采用了个人计算机作为上位机来监控可编程控制器。硬件的工作在论文第三章已经详细叙述过,本章节只讨论软件方面的工作。
4.2.1 FX系列可编程控制器的通信规程
在个人计算机中必须依据互联的PLC或PLC网络通信规程来编写通信程序,因此先介绍FX系列可编程控制器的通信规程。
(1)数据格式
FX系列可编程控制器采用异步通信格式,报文由1位起始位,7位数据位,1位停止位及1位奇偶校验位组成,波特率固定为9600 b/s,字符ASCII码,如图4-3所示。
1位起始位7位数据位偶校验1位起始位图4-3 通信数据格式
(2)通信命令
FX系列可编程控制器有4个通信命令,分别是读命令、写命令、强制通命令和强制断命令,如表4-1所示。表中:X—输入继电器;Y—输出继电器;M—辅助继电器;S—状态元件;T—定时器;C—计数器;D—数据寄存器。
表4-1 FX通信命令表
命令 读命令 ‘30H’ ‘1’即ASCⅠⅠ码写命令 ‘31H’ X,Y,M,S,T,C,D 把数据写入软继电器 命令代码 ‘0’即ASCⅠⅠ码X,Y,M,S,T,C,D 读取软继电器状态、数据 目标软继电器 功能 28
吉林大学 毕业论文 ‘7’即ASCⅠⅠ码强制通命令 ‘37H’ ‘8’ASCⅠⅠ码强制断命令 ‘38H’ X,Y,M,S,T,C, 强制某位 OFF X,Y,M,S,T,C, 强制某位 ON (3)通信控制字符
FX系列可编程控制器采用面向字符的传输规程,一共用到5个通信控制字符,它们的代码和功能如表4-2所示。
表4-2 FX控制字符表
控制字符 ENQ ACK NAK STX ETX ASCⅠⅠ代码 05H 06H 15H 02H 03H 功能 计算机发出请求 PLC对ENQ的确认回答 PLC对ENQ的否认回答 信息帧开始标记 信息帧结束标记 (4)报文格式
计算机向可编程控制器发送的报文。可编程控制器向计算机发送的应答报文。CMD为可编程控制器四种操作命令,SUMH和SUML是按字节累加和的高、低字节ASCII码,作为校验码使用。
(5)传输规程与数据段结构
个人计算机与FX系列可编程控制器采用应答方式通信,可编程控制器根据个人计算机的命令,在每个循环扫描结束END语句处组织自动应答报文,因此,用户无须对可编程控制器进行编程。其传输过程如图4-6所示。
29
吉林大学 毕业论文 个人计算机ENQ可编程控制器发送报文数据段321010161616161616ACK命令报文应答报文节数元件4位起地址字发送报文数据段....第1字节第1字节.高低高低高低 图4-6 传输规程 图4-7 数据段格式
计算机发送报文数据段与可编程控制器应答报文数据段的定义如图4-7所示。数据段中的每一字节全部使用ASCII码来表示,其中元件起始地址是一个16位的可编程控制器存储器地址,具体的装置地址必须与可编程控制器编程口地址一致。
4.2.2 PLC通信程序的流程
用户编写的通信程序只是针对个人计算机,因此该程序流程仅仅针对需要编程的个人计算机,程序流程一般有通信口初始化、发送请求、接收响应、发送报文、读取应答报文等模块。通信程序流程图如图4-8所示。首先程序必须对通信串口进行初始化,初始化工作主要包括通信串口的选择、波特率、校验位、数据位数和停止位数的设定、串口工作方式的确定等等;然后检查通信设备是否准备好,得到确认回答后向可编程控制器发送请求通信命令,采用查询方式接收正常的响应信号,当程序接收到响应信号后,就可以开始发送报文。在此过程中依然采用查询方式检查串口缓冲区,接收由可编程控制器发来的应答报文。程序循环执行,直至用户结束程序的运行为止。
30
吉林大学 毕业论文
图4-8 PLC通信程序流程图
4.2.3 PLC监控程序
Windows环境下进行串口编程一般有两种方法,即Windows API串口编程和串行通信控件编程。在Windows环境下编程的最大特征之一就是设备无关性,它通过设备驱动程序将Windows应用程序与不同的外部设备隔离。Windows本身封装了Windows通信机制,这种方式称为通信API,Windows程序员可利用Windows通信API进行编程,不用对硬件进行操作。但这种编程方法比较复杂,对计算机的硬件也必须有一定的了解。因此对串口编程常常采用第二种方法,即使用MSComm(串行通信)控件。串行通信控件通过串行端口 传输和接收数据,为应用程序提供串行通信功能图。它的使用非常简单,程序员不必花时间去了解较为复杂的API函数,在Visual C++与Visual Basic中均可方便地使用[18]。
可编程控制器通信程序就是采用Microsoft Visual C++ 6.0编写,考虑到编程的难度,未使用Windows API函数,而是采用了Microsoft公司编写的Microsoft
Communications Control,,version 6.0(串行通信控件)。串行通信控件是一个ActiveX控件,相对于Windows API函数,不需进行多线程编程,因而简单得多,而且功能也比较强大,性能安全可靠。该程序是一个基于对话框的MFC程序,由于在对可编程控制器的通
31
相关推荐: