用VC实现微机与PLC在以太网中的通讯Word格式.docx

上传人:b****6 文档编号:17525269 上传时间:2022-12-07 格式:DOCX 页数:6 大小:152.42KB
下载 相关 举报
用VC实现微机与PLC在以太网中的通讯Word格式.docx_第1页
第1页 / 共6页
用VC实现微机与PLC在以太网中的通讯Word格式.docx_第2页
第2页 / 共6页
用VC实现微机与PLC在以太网中的通讯Word格式.docx_第3页
第3页 / 共6页
用VC实现微机与PLC在以太网中的通讯Word格式.docx_第4页
第4页 / 共6页
用VC实现微机与PLC在以太网中的通讯Word格式.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

用VC实现微机与PLC在以太网中的通讯Word格式.docx

《用VC实现微机与PLC在以太网中的通讯Word格式.docx》由会员分享,可在线阅读,更多相关《用VC实现微机与PLC在以太网中的通讯Word格式.docx(6页珍藏版)》请在冰豆网上搜索。

用VC实现微机与PLC在以太网中的通讯Word格式.docx

CaoWeiSHIWang-wangCHENHong

(InformationEngineeringCollegeofYangzhouUniversity,Yangzhou225009,China)

Abstract:

AkindofcommunicationprogramdevelopedwithVCisintroduced,whichissuccessfullyappliedintheautomaticcontrolsystem,andmainlycarryoutthecommunicationbetweenhostandOMRONPLC.Thecommunicationprotocolbetweenthemisdealtwithindetail.Thedesignmethodof

图1FINS协议和TCP/IP协议之间的关系

FINS帧本质上属于链路层,为了能利用TCP/IP协议传输FINS帧,将FINS信息作为UDP的数据区,封装在UDP中,从TCP/IP协议的角度看FINS信息,属于应用层数据。

如果在PLC上安装以太网单元和Link通讯单元,就可以实现以太网和Link网之间的数据转发过程如图2所示。

图2利用FINS中继的过程

图中,上位机发出带有FINS信息的以太网帧被中继PLC的以太网单元接收后,层层分解,直到抽取出FINS信息后,通过Link通讯模块转发FINS信息,目的PLC收到数据后作出响应,响应数据也采用FINS格式的数据,中继PLC收到数据后,转发给以太网单元,由以太网单元进行封装后与上位机通讯,上位机也作为以太网网段中的一个节点,也有相应的节点号和相同的地址转换规则。

2.2FINS帧格式

在PLC之间采用FINS协议中的SEND、RECV或CMND命令进行数据通讯时,上述封装和分解过程在通讯模块内部自动实现,但对于上位机和以太网单元之间的通讯,FINS的报头和命令应由上位机程序添加,而UDP的报头由Socket自动完成。

FINS报头的格式见图3。

图3FINS报头格式

ICF为信息控制域,主要用于标明命令和响应,RSV为系统保留,GCT为网关允许数目,DNA为目的网络号,DA1为目的节点号,DA2为目的节点单元,用于标明CPU还是CPU总线单元,SNA为源网络号,SA1为源网络节点号,对应上位机IP地址的主机部分,SA2为源节点单元,对上位机而言应为00,SID为服务和响应的标识,可任意设置,命令和响应有相同的数值,MRC和SRC为FINS命令的主命令和从命令,Data域为数据区,用于标明读数据时的地址范围或写数据时的地址和数据。

2.3以太网单元的设置

 通讯测试前必须首先登记I/O表,可以用CX-Programmer软件在编程模式下自动登记I/O表,还要设置IP地址、子网掩码、设置CPU总线单元、地址转换方法、FINS的UDP端口号,FINSUDP端口号缺省为9600。

以太网单元属于CPU总线单元,单元号旋转开关设定一个十六进制数,作为以太网单元的单元号,范围为00~15,它决定了分配给以太网单元相应的内存工作区(CIO区、DM区)。

节点号通过两个旋转开关设定两位十六制数,作为以太网单元在网络中的节点号,范围为01~126。

以太网单元进行通信前,必须使用编程设备如CX-P对以太网单元进行设置。

内存工作区分配CIO区和DM区中的字按照单元号分配给每个单元,每个单元在CIO区中分配25个字,在DM区分配100个字。

如果设为0号单元则分配CIO1500~CIO1524共25个字,D30000~D30099共100个字。

跨网通讯时,必须对每一个节点建立路径表,路径表包括本地网络表和中继网络表。

本地网络表提供了安装在PLC单元上的通讯单元的单元号和网络号,中继网络表包括终点网络、中继网络和中继节点三项内容,用于FINS通讯时的数据转发。

三、上位机通讯程序设计

为实现上位机的TCP/IP通讯,采用Socket编程。

考虑到实现的效率,采用了较低层次的异步WinSock即MFC中的CAsyncSocket类实现。

在编程时首先从CAsyncSocket类派生出CUDPSocket类,在程序初始化时创建CUDPSocket类的实例。

BOOLCOMRONTestDlg:

:

OnInitDialog()

{

CDialog:

OnInitDialog();

psock1=newCUDPSocket;

psock1->

Create(PC_PORT,K_DGRAM);

}

当用户发出读取PLC数据的命令时,相应的消息处理函数作出响应,读取命令参数,将ASCII命令转换成二进制数据,进行FINS报头的封装,调用CUDPSocket的发送函数进行命令的发送,要程序为:

m_sendData.MakeUpper();

//将命令字符转换成大写字母;

AsciitoB((LPCSTR)m_sendData,bcommand,m_sendData.GetLength());

//ASCII转换二进制

SendTo(bcommand,m_sendData.GetLength()/2,

m_PortNoPLC,m_IPAddressPLC);

//调用Socket发送

对于接收程序,在CUDPSocket中建立接收消息响应函数,当有数据到来时,该函数作出响应,主要任务为读取缓冲区数据,将二进制数据转换ASCII字符,用于界面显示,同时进行数据定位和数据的处理,要程序如下:

voidCUDPSocket:

OnReceive(intnErrorCode)

COMRONTestDlg*pDlg=(COMRONTestDlg*):

AfxGetMainWnd();

//获取主窗口指针

charpbin[4096];

//分配缓冲区

intnLenhth=pDlg->

psock1->

Receive(pDlg->

pRevBuf,4096);

//读取缓冲区数据

pDlg->

BtoAscii(pDlg->

pRevBuf,pbin,nLenhth);

//二进制转ASCII码

m_RecvEdit.SetWindowText(pbin);

//显示数据

……//其它数据处理

CAsyncSocket:

OnReceive(nErrorCode);

四、结束语

运用VC++异步套接字类CAsyncSocket与OMRONPLC进行以太网通讯,由于以太网单元采用广泛使用的TCP/IP协议,上位机程序设计简单,除了进行FINS报头拼装,其它过程与微机之间的TCP/IP程序设计完全一致,用VC设计的程序具有实时性好、速度快、可靠性高、运行稳定等优点,此方法已成功应用工程项目中。

控制系统中采用以太网单元通讯后,使工业自动化与生产管理自动化有机地结合到了一起,简化了系统设计。

参考文献:

[1]李炳宇,萧蕴诗.以太网在网络控制系统中的应用与发展趋势[J].微型机与应用,2002.11

[2]CJ1W-ETN11(10BaseT)EthernetUnitsOperationManual[M].2001.5

[3]宫叔贞,王冬青.可编程控制器原理及应用[M].人民邮电出版社,2002.7

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1