利用MFC实现PC与三菱PLC编程口的通信技术-PLC技术网(www.plcjs.com)-可编程控制器技术门户


利用MFC实现PC与三菱PLC编程口的通信技术

 (点击题目可以在互联网中搜索该题目的相关内容)
日期:2006-4-30 10:18:27     来源:本文摘自《PLC&FA》   作者: 点击:
点击【 大  中  小 】, 可 以 选 择 字 体的大小,以便 你 阅读.

1  引言
    可编程序控制器作为当代工业自动化的主要支柱之一,随着其应用范围的不断扩大,PLC与PC之间通信技术的应用也越来越广泛。

    通过PLC的编程口进行通讯不仅可以减少系统的成本及复杂性,同时可以减少PLC方面软件的复杂程度和编程量。

    本文根据实际工程中的经验进行总结,介绍了利用VC++中MFC实现PC与三菱FX2系列PLC编程口进行串行通信的程序设计基本方法。

2  通信程序设计
    在PC机和三菱FX2系列PLC进行串行通信时,由于PC与PLC之间的信息传送是通过PLC编程口实现的,采用的是PLC专用协议通信指令。因此,在PC编程方面需要严格的遵循PLC编程口通讯协议。具体实现介绍如下。

2.1 串口设备的打开
在Visual C++中,利用MFC CFile类来实现串行通讯。这种通信方式与访问磁盘普通文件没有太大不同。打开串口设备需作以下操作:
CFile file;
CFileException e;
file.Open (
   portName, //example "COM1","COM2"
   CFile::modeReadWrite,  
   &e);

2.2 串口设备的初始化
    串行端口创建时,必须对其进行设置以匹配与其对话的设备。FX2系列PLC的波特率为固定的9600bps,奇偶校验采用偶校验,1位停止位,7位数据位。

一般地,可用如下程序设置它们:
DCB dcb;  
::GetCommState( (HANDLE)file.m_hFile, &dcb );
dcb.BaudRate = 9600;
dcb.ByteSize = 7   ;
dcb.StopBits = 1   ;
dcb.Parity   = 2   ;
::SetCommState((HANDLE)file.m_hFile, &dcb );
为了更好的控制端口可以利用SetCommTimeouts()函数打开或关闭串口超时功能,具体程序如下:
COMMTIMEOUTS cto; 
::GetCommTimeouts((HANDLE)file.m_hFile,&cto);
cto.ReadIntervalTimeout =0;   
cto.ReadTotalTimeoutMultiplier =0;  
cto.ReadTotalTimeoutConstant =0;    
cto.WriteTotalTimeoutMultiplier=0;  
cto.WriteTotalTimeoutConstant =0;   
::SetCommTimeouts((HANDLE)file.m_hFile,&cto);


图1      多字符帧的组成


2.3 PC与PLC间的通信
    FX2系列PLC与PC机的通信中,数据是以帧为单位发送和接收的。其中字符ENQ(0x05)、ACK(0x06)、和NAK(0x15)作为单个字符,可以构成单字符帧。其余的字符在发送和接收时必须用字符STX(0x02)和ETX(0x03)分别表示该字符帧的起始标志和结束标志,否则将构成帧错。一个多字符帧由字符STX、命令码、数据、字符ETX以及和校验五部分组成,其中和校验值是将命令码到ETX之间的所有字符的ASCII码(十六进制数)相加,取所得和的最低二位数。多字符帧格式如图1所示。表1示出FX2系列PLC与PC通信所用的命令码。



    在刚开始通信时,PC机首先要发送一个控制字符ENQ(0x05),去查询PLC是否做好通信准备,同时也检查一下PC机与PLC的连接是否正确。若通讯正常,则应答字符ACK(0x06);若通信有错,则应答字符NAK(0x15)。

(1) 应用MFC CFile类实现对串口设备的读写操作的代码
//读串口
char m_ReadBuff[UINT n];
  UINT nByte=file.Read (
&m_ReadBuff,   //buffer to store byte
UINT nCount     //number of bytes to read
);
//写串口
char m_WriteBuff[UINT n];
  file.Write (
&m_WriteBuff,  //buffer to store byte
UINT nCount    //number of bytes to write

本新闻共3页,当前在第11 2  3  

上一篇: 基于CAN总线的双容水箱控制系统
下一: 基于PROFIBUS-DP的现场数据采集网络