VC环境下三菱PLC与微机的串行通信_第1页
VC环境下三菱PLC与微机的串行通信_第2页
VC环境下三菱PLC与微机的串行通信_第3页
VC环境下三菱PLC与微机的串行通信_第4页
VC环境下三菱PLC与微机的串行通信_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VC 环境下三菱 PLC 与微机的串行通信周万里 曾文火(江苏科技大学 机械与动力工程学院 , 江苏 镇江 212003 )摘 要:主要介绍三菱 FX系列 PLC与上位机之间的通讯协议, 并采用 CSerial 类来实现串行通信, 本文给出了程序设计方法和部分源代码。关键字 :串行通信 PLC CSerial0 引言可编程控制器( PLC )是集计算机技术、自动控制技术、通信技术为一体的新型自动控制装 置。由于体积小、可靠性高以及组态灵活等优点, PLC 在工业控制领域得到了广泛的应用。将 PC 机与可编程控制器组合起来, 充分利用 PC 机强大的人机接口功能、 丰富的应用软件和低廉的价格 来

2、共同实现管理、 控制一体化成为一个新的发展趋势。 本文重点介绍在 Windows 2000 环境下如何 利用 VC 来实现 PC机与三菱 PLC 之间的串行通讯。1 三菱 PLC 与计算机之间通信协议FX2 系列 PLC 与计算机之间的通信采用 RS-232 标准, 其传输速率固定为 9600bps,奇偶校验 位采用偶校验。数据格式如表 1 所示。数据以帧为单位发送和接收。一个多字符帧由图 1 所示的 五部分组成, 其中和校验值是将命令码 STX ETX 之间的字符的 ASCII 码(十六进制数) 相加, 取得所得和的最低二位数。 STX 和 ETX 分别表示该字符帧的起始标起和结束标志。图

3、1 数据帧格式起始命令元件元件结束和字元号码首地址个数字元校验(1) 起始字元( STX ):ASCII 码的起始字元 STX 对应的 16 进制数位 0x02。无论命令信息还 是回应信息,它们的起始字元均为STX ,接收方以此来判知传输资料的开始。(2) 命令号码:为两位 16 进制数。所谓命令号码是指上位机要求下位机所执行的动作类别, 例如要求读取或写入单点状态、写入或读取暂存器资料、强制设定、运行、停止等。在回应信息 中,下位机会将上位机接收到的命令号码原原本本的随同其它信息一同发送给上位机。(3) 元件首地址: 对应要操作的元件的相应的地址。 如从 D123 单元中读取数据时, 要把它

4、对 应的地址: 0x10F6 发送给 PLC 。(4) 元件个数:一次读取位元件或字元件的数量。(5) 结束字元( ETX ):ASCII 码的结束字元 ETX 对应的 16 进制数为 0x03 。无论命令信息还 是回应信息,它们的结束字元均为ETX ,接收方以此来判知此次通讯已结束。(6) 校验码( Checksum):校验码是将 STX-ETX 之间的 ASCII 字元的 16 进制数值以“ LRC ( Longitudinal Redundancy Check)”法计算出 1 个 Byte 长度(两个 16 进制数值 00-FFH )的校验 码。当下位机接收到信息后,用同样的方法计算出接

5、收信息的校验码,如果两个校验码相同,则 说明传送正确。FX2 系列与计算机之间的通信是以主机发出的初始命令, PLC 对其做出响应的方式进行通信 的。共有 0、1、7、8四种命令, 上位机实现对 PLC 的读写和强行置位。 通过 ENQ 、ACK 和 NAK , 上位机协调与 PLC 的通信应答。12 编程口操作命令类型 串行通信是计算机与其他机器之间进行通信的一种常用方法,在 Windows 操作系统中提供了 实现各种串行通信的 API 函数。通过 SC-09 编程电缆或 FX-232-BD 通讯模块,可以将 PC 机和计 算机串行通信口 RS-232 连接起来,可以实现 PC 机对 PLC

6、 的 RAM 区数据进行读、写操作。根据 PLC 本身所具有的特性,计算机可对 PLC 进行以下 4 种类型的操作:(1) 位元件或字元件状态读操作 (CMD0) ;(2) 位元件或字元件状态写操作 (CMD1) ;(3) 位元件强制 ON 操作 (CMD7) ;(4) 位元件强制 OFF 操作 (CMD8) 。3 软件编程(1) 串行通信实现方法 在进行以上四种操作之前要对串行通信口进行必要的初始化。本人采用了一个专门针对串行 通信的 CSerial 类,并在 Open 函数中进行了进一步的完善。它由 MuMega Technologies 公司提供 的一个 Visual C+类,我们只要理

7、解 CSerial 类种的几个成员函数, 就能很方便地实现串行通信了。 以下是该类定义:class CSerialpublic:CSerial();CSerial();BOOL Open( int nPort , int nBaud ,int nParity ,int nByteSize , int nStopBits );BOOL Close( void );int ReadData( void *, int );int SendData( const char *, int );int ReadDataWaiting( void );BOOL IsOpened( void ) return

8、( m_bOpened ); protected:BOOL WriteCommByte( unsigned char );HANDLE m_hIDComDev;OVERLAPPED m_OverlappedRead, m_OverlappedWrite;BOOL m_bOpened; Serial:Open 这个成员函数打开通信端口。带五个参数,第一个是串口号,第二个参数是 数据传输速率,第三个是数据效验方式,第四个是数据位数,第五个是数据停止位。 Serial:Close 函数关闭通信端口。 CSerial:SendData 函数把数据从一个缓冲区写到串行端口。第一个参数是缓冲区指针,其 中

9、包含要被发送的资料;第二个参数是发送的字节数。 CSerial:ReadData 函数从断口接收缓冲区读入数据。第一个参数是缓冲区指针,资料将被 放入该缓冲区;第二个参数缓冲区的大小。(2) 位元件或字元件状态读操作操作对象元件: PLC 内部的 X、Y 、M、S、T、C、D 元件;命令格式如表 1;在发送完上述命令格式代码后,就可以读取 PLC 响应信息了。响应信息格式如图2;STXDATAETXChecksum图 2 响应信息格式部分程序代码:BOOL CPlcComDlg:ReadPLC(char *Read, char *address, int bytes)CSerial Seria

10、l;char read_BUFFER; if(Serial.Open(m_com, m_Buad, m_Parity, m_Byte, m_StopBites)Serial.SendData(&ENQ_request,1);/ 发送联络讯号 Sleep(100);Serial.ReadData(&read_BUFFER,1);/ 读取 PLC 响应讯号 if(read_BUFFER=ACK)/初始化变量/发送图 2 命令格式代码 ASCII(readdatasum_check,readdata_sum);/将 STX-ETX 之间的字符相加,转换成 ASCII (十六进制) ,并取和的 低二位

11、数。if(*readdatasum_CHECK=*readdatasum_check)/ 和校验 /对读出的数据进行处理,转换成整型数for(int j=0;jbytes/2;j+) for(i=j*2;i0x39)?(Readi-0x41+0xA):(Read i-0x30);Read_valuej=(Read j*4+24)+Read j*4+3)+Read j*4+0)4)+Read j*4+1;return TRUE;elsereturn FALSE; /将整数转换成 ASCII (十六进制) ,并取低二位,void CPlcComDlg:ASCII(char *total_datab

12、ytes, int read_bytes)unsigned int uTmp;uTmp=read_bytes & 0x000f; total_databytes1=(uTmp4) & 0x000f; total_databytes0=(uTmp10)?(uTmp+0x30):(uTmp+0x41-0xA);(3) 位元件或字元件状态写操作操作对象元件: PLC 内部的 X、Y、M 、S、T、C、D 元件;命令格式如图 3 所示。STXCMD1元件地址元件 个数数据ETXCheck sum图 3 位元件或字元件写操作程序代码(略) 。(4) 位元件强制 ON 操作操作对象元件: PLC 内部的

13、X 、Y、M 、S、T、C元件;命令格式如图 4 所示。STXCMD7元件地址ETX和校验图 4 位元件强制 ON 操作部分程序代码如下:void CPlcComDlg:ForceOnOpreation(char *Address)CSerial Serial;char read_BUFFER;CString strtemp;if(Serial.Open(m_com,9600)Serial.SendData(&ENQ_request,1);Sleep(100);Serial.ReadData(&read_BUFFER,1); if(read_BUFFER=ACK)/初始化变量/发送图 4 命令

14、格式代码ASCII(Sum_Check,sum); / 将 STX-ETX 之间的字符相加, 转换成 ASCII (十六进制) , 并取和的低二位数for(i=0;i2;i+)Serial.SendData(&Sum_Checki,1);/ 和校验Sleep(100);Serial.ReadData(&read_buffer,1);if(read_buffer=ACK)return TRUE;elsereturn FALSE;(5) 位元件强制 OFF 操作操作对象元件: PLC 内部的 X 、Y、M 、S、T、C元件;命令格式如图 5 所示。STX CMD8 元件地址 ETX 验图5 位元件强制 OFF操作程序代码(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论