亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于MFC的計(jì)算機(jī)與PLC以太網(wǎng)通訊軟件開發(fā)

        2018-12-06 02:26:56燕科帆朱厚耀林賀邦李嘉龍
        機(jī)電工程技術(shù) 2018年10期
        關(guān)鍵詞:字節(jié)寄存器以太網(wǎng)

        燕科帆,朱厚耀,林賀邦,李嘉龍

        (廣州大學(xué)機(jī)械與電氣工程學(xué)院,廣東廣州 510006)

        0 引言

        在整個(gè)上位機(jī)軟件的開發(fā)過程里面,最重要的部分是上位機(jī)對(duì)于下位機(jī)的數(shù)據(jù)監(jiān)測,這就要解決二者之間的通信問題,實(shí)現(xiàn)穩(wěn)定的通信才能穩(wěn)定地進(jìn)行數(shù)據(jù)監(jiān)測和數(shù)據(jù)交換。傳統(tǒng)的通信方法是采用RS-232C或者RS-485串行方式,但是隨著對(duì)于傳輸數(shù)據(jù)量、設(shè)備之間的傳輸距離以及通信的實(shí)時(shí)性要求越來越高,傳統(tǒng)的串行通信方式慢慢的不能滿足大部分企業(yè)的要求[1]。同時(shí),由于國際上現(xiàn)場總線的標(biāo)準(zhǔn)非常多,導(dǎo)致難以實(shí)現(xiàn)控制系統(tǒng)集成的統(tǒng)一。所以國際上大部分廠商開始將生產(chǎn)的PLC與以太網(wǎng)技術(shù)進(jìn)行結(jié)合,PLC控制器與基于TCP∕IP的以太網(wǎng)結(jié)合,可以實(shí)現(xiàn)開放、分散的工業(yè)控制系統(tǒng),按照相關(guān)的協(xié)議就可以進(jìn)行PLC與計(jì)算機(jī)的通訊[2]。

        1 ABB AC500系列PLC通訊功能

        1.1 概述

        AC500系列是ABB公司新一代的模塊式可編程控制器,是一款可升級(jí)的,靈活的自動(dòng)化控制系統(tǒng)。系統(tǒng)的構(gòu)建采用底板組合模塊的結(jié)構(gòu)。硬件上可選用的模塊有CPU模塊和底板、I∕O模塊和底板、FBP總線適配器和底板以及通訊模塊等,以上的各種模塊均有許多型號(hào),每種型號(hào)對(duì)應(yīng)的配置都不一樣,可以根據(jù)實(shí)際的需求選型。不同的CPU模塊插在CPU底板上,不同的I∕O模塊插在I∕O底板上,直接拼接在CPU底板的右側(cè),通過I∕O總線進(jìn)行數(shù)據(jù)交換,其他的模塊也是采用拼接的方法插在底板上,示例如圖1所示。通訊模塊有四種型號(hào),分別是CM572-DP:PROFIBUSDP主站通訊模塊、CM575-DN:DeviceNet主站通訊模塊、CM577-ETH:以太網(wǎng)通訊模塊、CM578-CN:CANopen主站通訊模塊。

        以太網(wǎng)通訊模塊支持的協(xié)議包括TCP∕IP、UDP∕IP和Modbus TCP。其中本文的通訊采用基于Modbus TCP協(xié)議的以太網(wǎng)通訊,AC500的以太網(wǎng)通訊模塊集成了“MOD?BUSon TCP∕IP”協(xié)議,所以可以通過Ethernet(以太網(wǎng))進(jìn)行MODBUS通訊[3]。

        圖1 AC500系列PLC硬件組成

        1.2 Modbus/TCP協(xié)議簡介

        Modbus通信協(xié)議是全球最早用于工業(yè)現(xiàn)場的總線規(guī)約,由Modicon公司在1979年發(fā)明。由于免費(fèi)發(fā)布,并且采用主從通信模式(Master∕Slave通信模式),在分散控制方面應(yīng)用廣泛,從而在全球得到了廣泛的應(yīng)用。Modbus通信協(xié)議具有串口和以太網(wǎng)多種版本,其中比較著名的是Modbus RTU、Modbus ASCII和 Modbus∕TCP 三種。其中Modbus∕TCP協(xié)議是通過一種簡單的方式將Modbus幀嵌入到TCP幀中而形成的,由于TCP是基于可靠連接的服務(wù),所以在Modbus TCP協(xié)議中沒有CRC校驗(yàn)碼,從而簡化了協(xié)議的內(nèi)容。

        Modbus∕TCP數(shù)據(jù)幀的組成簡單分成三個(gè)部分,分別是報(bào)文頭、功能代碼和數(shù)據(jù)。如圖2所示。

        圖2 Modbus∕TCP數(shù)據(jù)幀

        MBAP報(bào)文頭分為四個(gè)域,一共七個(gè)字節(jié)。1、2字節(jié)是傳輸標(biāo)志,標(biāo)志某個(gè)Modbus詢問∕應(yīng)答的傳輸;3、4字節(jié)是協(xié)議標(biāo)志,表示協(xié)議的種類;5、6字節(jié)是長度,表示后續(xù)字節(jié)的長度計(jì)數(shù);7字節(jié)是單元標(biāo)志。

        功能代碼共有三種類型,分別是公共功能代碼、用戶自定義功能代碼和保留的功能代碼。本文所用到的為公共功能代碼,分別是十進(jìn)制的03(讀多個(gè)寄存器)和十進(jìn)制的16(寫多個(gè)寄存器)。其余的常見公共功能代碼見表1所示[4]。

        2 MFC CSocket類簡介和通訊流程

        2.1 MFC CSocket簡介

        MFC(Microsoft Foundation Classes)是微軟基礎(chǔ)類庫,是一個(gè)C++的類庫,封裝了大部分windows API函數(shù)。它提供了兩個(gè)類,這兩個(gè)類都封裝了socket,分別是CAsync?Socket和CSocket,CSocket是CAsyncSocket子類,二者的區(qū)別在于CAsyncSocket是異步套接字,而CSocket是同步套接字。

        使用MFC的socket類可以從這兩個(gè)socket類中繼承出自己的socket類,再根據(jù)需求增加所繼承的socket類功能。如果需要使用這兩個(gè)socket類,一定要從這兩個(gè)類中繼承出自己的socket類,通過修改虛函數(shù)來實(shí)現(xiàn)特定基本功能。有了這兩個(gè)類就可以方便的處理同步與異步問題。

        本文采用的是CSocket類,需要實(shí)現(xiàn)的功能是讀寫數(shù)據(jù),因此需要用到的虛函數(shù)為OnReceive(),需要對(duì)該虛函數(shù)進(jìn)行重載。當(dāng)有一個(gè)socket向CSocket繼承類發(fā)送數(shù)據(jù)的時(shí)候,CSocket繼承類的OnReceive()虛函數(shù)會(huì)被自動(dòng)執(zhí)行,因此接收數(shù)據(jù)可以在OnReceive()虛函數(shù)里通過定義的Receive()函數(shù)來實(shí)現(xiàn)。

        2.2 通訊流程

        Socket通信采用的模式為客戶端和服務(wù)器,本文開發(fā)的軟件為客戶端,PLC為服務(wù)器。通過服務(wù)器的IP地址和ModbusTCP固定的502端口,就能進(jìn)行客戶端和服務(wù)器端的連接,連接后就能進(jìn)行以太網(wǎng)數(shù)據(jù)通訊。因此按照socket通信流程,利用CSocket類的成員函數(shù)實(shí)現(xiàn)通信流程中的各個(gè)步驟就能進(jìn)行通訊[5]。Socket通信流程如圖3所示。

        3 ABB PLC以太網(wǎng)通訊配置

        當(dāng)需要進(jìn)行上位機(jī)與PLC以太網(wǎng)通訊時(shí),需要先進(jìn)行PLC的硬件系統(tǒng)配置。本系統(tǒng)選用的CPU型號(hào)為PM583,串口型號(hào)為DC532。該CPU自帶以太網(wǎng)通訊口。系統(tǒng)配置的步驟如下。

        (1)打開ABB配套的系統(tǒng)組態(tài)軟件Control builder Plus,新建AC500工程,按照硬件系統(tǒng)的配置在軟件中對(duì)應(yīng)進(jìn)行添加,比如串口模塊,通信模塊等等,如圖4所示。

        圖3 CSocket實(shí)現(xiàn)Modbus∕TCP通訊流程圖

        圖4 系統(tǒng)組態(tài)樹狀圖

        (2)按照步驟(1)中添加的模塊,分別進(jìn)行參數(shù)配置,例如CPU模塊,雙擊CPU模塊進(jìn)行參數(shù)配置,本系統(tǒng)默認(rèn)參數(shù)均能滿足要求。同理對(duì)I∕O模塊進(jìn)行參數(shù)配置。

        (3)將電腦和PLC通過網(wǎng)線連接,PLC上電,通過圖4中的IP_Settings(IP設(shè)置)設(shè)置PLC的IP地址。

        (4)上位機(jī)軟件開發(fā)好后,將PC機(jī)的IP地址設(shè)置成和PLC同一個(gè)網(wǎng)段,這樣就完成整個(gè)系統(tǒng)的硬件和軟件的配置過程[6]。

        4 具體的程序?qū)崿F(xiàn)

        4.1 程序框架搭建

        本程序采用VS2013IDE編程環(huán)境,創(chuàng)建基于對(duì)話框的MFC程序。因?yàn)樾枰玫紺Socket類,所以必須在導(dǎo)向中勾選Windows套接字選項(xiàng)。在界面輸入服務(wù)器地址和端口號(hào)就能進(jìn)行通訊連接。以下是程序的創(chuàng)建步驟和部分代碼。

        (1)創(chuàng)建基于對(duì)話框的MFC程序,勾選Windows套接字選項(xiàng)。

        (2)在對(duì)話框中加入所需的各種控件,比如IP地址輸入框等等,并對(duì)各個(gè)控件添加變量。

        (3)創(chuàng)建一個(gè)繼承自CSocket類的MFC類,命名My?Socket,用來進(jìn)行socket通信。對(duì)MySocket類的虛函數(shù)進(jìn)行重載,在OnReceive()函數(shù)體里面調(diào)用Receive()函數(shù),從而起到接收數(shù)據(jù)的作用。

        (4)添加兩個(gè)按鈕控件,分別取名為讀取數(shù)據(jù)和修改數(shù)據(jù)。二者的作用是對(duì)PLC進(jìn)行數(shù)據(jù)讀取和修改,將相關(guān)的代碼都封裝到這兩個(gè)按鈕控件里面。

        以下列出部分相關(guān)代碼。

        void CMysocket::OnReceive(int nErrorCode)∕對(duì) MySock?et類虛函數(shù)進(jìn)行重載

        {

        if(pClientdlg)

        {

        pClientdlg->Receive();∕調(diào)用主對(duì)話框的 Re?ceive方法接收數(shù)據(jù)

        }

        CSocket::OnReceive(nErrorCode);

        }

        以下為通訊連接部分程序代碼:

        pMysocket=new CMysocket(this);∕創(chuàng)建套接字對(duì)象

        if(pMysocket->Create()==FALSE)∕創(chuàng)建套接字

        {

        deletepMysocket;

        pMysocket=NULL;

        AfxMessageBox(_T("套接字創(chuàng)建失?。?));

        return;

        }

        if(pMysocket->Connect(servername,port)==FALSE)∕連接服務(wù)器、connect函數(shù)成功則返回1,失敗則返回0

        {

        AfxMessageBox(_T("連接服務(wù)器失敗!"));

        return;

        }

        4.2 讀PLC數(shù)據(jù)

        對(duì)PLC進(jìn)行數(shù)據(jù)讀取需要用到功能碼03,首先需要定義一個(gè)數(shù)組來存放讀取數(shù)據(jù)的數(shù)據(jù)包:

        unsigned char Send[12]={0};∕生成 Modbus∕TCP 格式數(shù)據(jù)包

        讀取數(shù)據(jù)是對(duì)PLC的寄存器進(jìn)行讀取,所以對(duì)于寄存器的起始地址和寄存器的數(shù)量是需要確定的[7]。下面為整個(gè)數(shù)組的定義:

        Send[0]=m_1;

        Send[1]=m_2;∕事務(wù)元標(biāo)識(shí)符,高字節(jié)在前,低字節(jié)在后

        Send[2]=m_3;

        Send[3]=m_4;∕協(xié)議標(biāo)識(shí)符,高字節(jié)在前,低字節(jié)在后

        Send[4]=0x00;

        Send[5]=0x06;∕后續(xù)字節(jié)長度,高字節(jié)在前,低字節(jié)在后

        Send[6]=m_5;∕單元標(biāo)識(shí)符

        Send[7]=0x03;∕功能碼,讀多個(gè)寄存器

        Send[8]=m_register_address_high;∕數(shù)據(jù)起始地址,高字節(jié)在前,低字節(jié)在后

        Send[9]=m_register_address_low;

        Send[10]=m_register_number_high;∕數(shù)據(jù)長度,高字節(jié)在前,低字節(jié)在后

        Send[11]=m_register_number_low;

        int a=pMysocket->Send(Send,12);∕Send 函數(shù)返回的是成功發(fā)送的字節(jié)數(shù)

        用MySocket類的指針對(duì)象調(diào)用Send()函數(shù)就能數(shù)據(jù)包發(fā)送出去。當(dāng)包含讀取多個(gè)寄存器功能碼的數(shù)據(jù)包發(fā)送給PLC后,PLC會(huì)立即返回對(duì)應(yīng)的數(shù)據(jù)給通訊軟件,這時(shí)會(huì)觸發(fā)OnReceive()函數(shù),從而觸發(fā)接受數(shù)據(jù)函數(shù)Re?ceive()。在Receive()函數(shù)體里面同樣定義一個(gè)數(shù)組用來存放PLC反饋回來的數(shù)據(jù),部分程序如下所示:

        unsigned char Receive[200];∕接收反饋的數(shù)據(jù)

        int receive_data_num = pMysocket->Receive(Receive,200);∕Receive()函數(shù)的返回值為所接收到的字節(jié)數(shù)量。

        如圖5所示為讀取數(shù)據(jù)圖。

        圖5 讀取PLC數(shù)據(jù)

        4.3 對(duì)PLC寫值

        對(duì)PLC寫值和讀取PLC數(shù)據(jù)的內(nèi)容大致是一樣的,只需要修改功能代碼并且加入需要寫入的值即可。本軟件目前固定一次可以寫三個(gè)寄存器。以下所示為對(duì)PLC寫值的定義方法。m_value1、m_value2、m_value3為三個(gè)需要寫入的值,可以從界面輸入。

        Send[13]=m_value1∕256;

        Send[14]=m_value1%256;

        Send[15]=m_value2∕256;

        SendB16]=m_value2%256;

        Send[17]=m_value3∕256;

        Send[18]=m_value3%256;

        如圖6所示為寫數(shù)據(jù)圖。

        圖6 對(duì)PLC寫數(shù)據(jù)

        5 結(jié)束語

        本文介紹了ABBAC500系列PLC的構(gòu)造組成和通訊方式,并且對(duì)ModbusTCP通訊協(xié)議進(jìn)行了總結(jié)。通過創(chuàng)建基于對(duì)話框的MFC程序,利用封裝的CSocket類,按照sock?et通信的流程創(chuàng)建了以太網(wǎng)通訊的上位機(jī)軟件。同時(shí)按步驟講述PLC的組態(tài)配置過程和程序編寫,從而使讀者對(duì)整個(gè)流程有基本的掌握。本軟件的框架移植性很高,可以在這個(gè)基礎(chǔ)上進(jìn)行各個(gè)方面的擴(kuò)展,利于PLC的推廣和發(fā)展。

        猜你喜歡
        字節(jié)寄存器以太網(wǎng)
        No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
        基于1500以太網(wǎng)養(yǎng)豬場的智能飼喂控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
        Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
        No.10 “字節(jié)跳動(dòng)手機(jī)”要來了?
        簡談MC7字節(jié)碼
        分簇結(jié)構(gòu)向量寄存器分配策略研究*
        談實(shí)時(shí)以太網(wǎng)EtherCAT技術(shù)在變電站自動(dòng)化中的應(yīng)用
        電子制作(2017年24期)2017-02-02 07:14:44
        一種90W高功率以太網(wǎng)供電系統(tǒng)的設(shè)計(jì)
        淺談EPON與工業(yè)以太網(wǎng)在貴遵高速公路中的應(yīng)用
        高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
        亚洲女同成av人片在线观看| 高清不卡一区二区三区| 最新国产av无码专区亚洲| 亚洲一区二区三区在线观看播放| 日韩午夜三级在线视频| 女人被狂躁的高潮免费视频| 国产乱人视频在线播放| 国产AV国片精品有毛| 东京热日本道免费高清| 久久亚洲精品中文字幕| 男女一边摸一边做爽爽的免费阅读 | 亚洲av色在线观看网站| 亚洲视频免费一区二区| 日本最大色倩网站www| 欧美日韩性视频| 亚洲高清美女久久av| 国产日产韩国av在线| 果冻传媒2021精品一区| 久久久国产精品樱花网站| 日韩精品综合在线视频| 免费毛儿一区二区十八岁| 国产成人综合亚洲精品| 久久久国产不卡一区二区| 国产色av一区二区三区| 色视频综合无码一区二区三区| 亚洲国产精品一区二区久| 国产熟女乱综合一区二区三区| 久久天堂一区二区三区av| 好大好深好猛好爽视频免费| 日本精品视频一视频高清| 黄色影院不卡一区二区| 国产亚洲日韩在线一区二区三区| 国产激情在观看| 开心五月激情五月天天五月五月天| 2019最新中文字幕在线观看| 国产精品国语对白露脸在线播放| 亚洲素人日韩av中文字幕| 国产在线高清理伦片a| 曰本极品少妇videossexhd| 亚洲高清在线观看免费视频| 后入丝袜美腿在线观看|