當前位置:首頁 > 工業(yè)控制 > 工業(yè)控制技術文庫
[導讀] 1、引言 modbus plus(以下簡稱mb+)是一種針對工業(yè)控制應用的本地局域網(wǎng)系統(tǒng)。以太網(wǎng)是當今現(xiàn)有局域網(wǎng)采用的最通用的通信協(xié)議標準。其具有低成本、高可靠性、高速率、開放性好等特點

1、引言

modbus plus(以下簡稱mb+)是一種針對工業(yè)控制應用的本地局域網(wǎng)系統(tǒng)。以太網(wǎng)是當今現(xiàn)有局域網(wǎng)采用的最通用的通信協(xié)議標準。其具有低成本、高可靠性、高速率、開放性好等特點,在工控領域得到了廣泛的應用。

動態(tài)數(shù)據(jù)交換(dde)是windows操作系統(tǒng)一直保持兼容的一種應用程序間的數(shù)據(jù)通信方式。對于很多直接和硬件打交道的應用程序,尤其是plc編程軟件,是一種較為可靠的通信方式。

本文通過某鋼廠單機架平整機板型改造過程中的實際應用,介紹使用vc2005在windows下實現(xiàn)pc與mb+網(wǎng)的dde通信并通過以太網(wǎng)實現(xiàn)與板型儀plc的數(shù)據(jù)交換。

2、系統(tǒng)簡要說明

本系統(tǒng)如圖1所示,包括生產(chǎn)控制plc組,mb+網(wǎng),pc服務器,100m以太網(wǎng),板型控制系統(tǒng)。通過pc服務器實現(xiàn)互聯(lián)。

圖1 單機架平整機板型控制系統(tǒng)

生產(chǎn)控制plc組由mb+網(wǎng)來連接,pc機上使用一塊sa-85的pci卡來連接到mb+,用于訪問各節(jié)點上的plc。pc機上另外使用一塊pci接口的以太網(wǎng)卡連接到以太網(wǎng)。板型儀提供了以太網(wǎng)接口,與pc機接入同一個局域網(wǎng)。

pc機上安裝mb+網(wǎng)的dde服務程序,以及本文介紹的自編程序。dde服務程序通過mb+網(wǎng)獲取plc上的數(shù)據(jù),自編程序使用dde技術獲得數(shù)據(jù),打包后使用tcp協(xié)議發(fā)送給板型儀。板型儀通過tcp協(xié)議將各種測量數(shù)據(jù)和狀態(tài)信號發(fā)給pc服務器,相關數(shù)據(jù)再通過dde協(xié)議送dde服務程序,最后通過mb+網(wǎng)送到相應的plc。

3、系統(tǒng)的具體實現(xiàn)

3.1 dde server軟硬件安裝方法

dde基于用戶/服務器原則,通過建立應用程序間的對話連接,根據(jù)不同的主題和項目進行數(shù)據(jù)通信。為了從服務器獲取數(shù)據(jù),用戶使用一種固定的3級特殊訪問方式,這3級訪問分別為:服務(service)、主題(topic)和數(shù)據(jù)項(item)。

不同的硬件平臺所使用的dde數(shù)據(jù)通信硬件設備也不同,本文介紹的數(shù)據(jù)通信方法是針對mb+網(wǎng)而言的。pc平臺上使用sa-85的pci卡來連接mb+網(wǎng)。使用前需要配置好sa-85的網(wǎng)絡連接。

軟件上,使用wonderware公司提供的io server組件中的modicon modbus

plus(以下簡稱mbplus)來連接mb+并提供dde的方式來訪問數(shù)據(jù)的接口。此工具運行后如圖2所示。

圖2 mbplus連接

要使用此工具,還需要對它進行一些配置。從configure菜單中選擇adapter card setting,設置需要連接的適配器,因為我們只安裝了一個mb+的適配器,所以使用默認配置。之后就可以開始配置dde服務了。我們需要給每一個需要訪問的mb+網(wǎng)上的設備按照dde協(xié)議定義一個topic。選擇configure菜單下的topic definiTIon,進行topic的配置,如圖3。

圖3、topic配置

這里的topic name 就是之后訪問dde服務的topic需要使用的名稱,每個topic需要定義不同的名稱,本系統(tǒng)共連接5個mb+網(wǎng)上的plc,分別定義為plc1、plc2、plc3、plc4、plc5。slave path 處定義的是不同設備的節(jié)點地址。配置好以后就可以使用dde協(xié)議來訪問mb+網(wǎng)上的數(shù)據(jù)了。

3.2 編程實現(xiàn)

在完成了mb+的dde數(shù)據(jù)通信安裝與設置后,就要在用戶程序中進行編程,建立dde對話,控制數(shù)據(jù)通信流程。本文介紹vc2005的dde通信方式。事實上,vc2005并不直接與dde server進行dde對話,它是通過windows操作系統(tǒng)提供的ddeml(dde通信管理庫)來管理dde通信具體工作的。該管理庫的使用方法如下:

(1) ddeml的初始化工作

加載頭文件,.#include “ddeml.h” //在工程中引用ddeml庫然后按照dde server提供的3級訪問方式建立vc與ddeserver的對話。此時service為mbplus,topic為plc4。通過選擇不同的item及相應dde函數(shù)可以完成接收過程數(shù)據(jù)、發(fā)送控制命令、獲取系統(tǒng)狀態(tài)等工作。

使用ddeml后,實際上客戶和服務器之間的多數(shù)會話并不是直達對方的,而是經(jīng)由ddeml中轉,即用回調函數(shù)處理dde交易(transacTIon)。在調用其他ddeml函數(shù)前,必須調用ddeiniTIalize()函數(shù),以獲取實例標識符,注冊dde 回調函數(shù)。通過回調函數(shù)來處理dde的事務。

本例中使用如下方法來初始化dde連接,dword idinst = 0; //定義dde實例標識的變量ddeiniTIalize(&idinst,(pfncallback)ddecallback,appclass_standard | appcmd_clientonly,0);這里將ddecallback函數(shù)指定為dde的回調函數(shù)。實例初始化后得到實例的標識idinst,之后的操作都要使用這個標識。

(2) 通過dde協(xié)議的服務名,主題名和項目名來訪問具體某個項目的數(shù)據(jù)

先定義dde的服務名和主題名

tchar szapp[] = text(“mbplus”); //服務名

tchar sztopic4[]=text(“plc4”); //主題名

tchar szwidth[]=text(“400401”); //項目名

tchar vlwidth[16]; //儲存從dde服務器返回的數(shù)據(jù)

hsz hszwidth; //項目的dde標識

//項目名的命名規(guī)則具體可以查看mbplus程序的說明,這里400401表示的是項目在plc中的地址,這是一個//16位的整形數(shù)

hconv4=ddeconnecttotopic(idinst,szapp,sztopic4,&hsztopic4);

if( hconv4 != null )

{

ddeautorequest(idinst,hconv4,szwidth,&hszwidth);

}

此處的ddeconnecttotopic和ddeautorequest為自定義的函數(shù)

hconv ddeconnecttotopic(dword idddeinst, lpctstr szapp, lpctstr

sztopic, hsz * hsztopic)

{

hsz

hszapp=ddecreatestringhandle(idddeinst,szapp,cp_winunicode);

*

hsztopic=ddecreatestringhandlew(idddeinst,sztopic,cp_winunicode);

return ddeconnect(idddeinst,hszapp,*hsztopic,null);

}

使用ddecreatestringhandle來獲取服務器和主題名的字符句柄,使用ddeconnect來建立指定服務下的指定的主題的連接。之后使用ddeautorequest函數(shù)來向dde服務器請求置頂項目名的數(shù)據(jù),在數(shù)據(jù)發(fā)生變化后dde服務器會自動將新的數(shù)據(jù)發(fā)送給客戶端,客戶端在回調函數(shù)中就可以獲取到新的數(shù)據(jù),具體方法見下文。如果某個主題下有多個項目需要處理,都用ddeautorequest來處理即可,此函數(shù)的實現(xiàn)如下:

void ddeautorequest(dword idddeinst, hconv hconv, lpctstr

szitem, hsz * hszitem)

{

*hszitem=ddecreatestringhandle(idddeinst,szitem,cp_winunicode);

hddedata hdata=ddeclienttransaction

(null,0,hconv,*hszitem,cf_text,xtyp_advstart| xtypf_ackreq,5000,

null);

}

接下來就可以通過dde的回調函數(shù)來獲取數(shù)據(jù)了。

hddedata callback ddecallback(uint utype,uint ufmt,hconv

hconv,hsz hsz1,hsz hsz2,hddedata hdata,

dword dwdata1,dword dwdata2)

{

switch( utype )

{

case xtyp_advdata: //處理dde數(shù)據(jù)

if( ufmt != cf_text )

return dde_fnotprocessed;

memset(szbuffer,0,64); //初始化緩沖區(qū)

datalen=ddegetdata(hdata,null,64,0);//獲取數(shù)據(jù)的長度

ddegetdata(hdata,(unsigned char* )szbuffer,datalen,0);//獲取數(shù)據(jù)

if( hsz1==hsztopic4 && hsz2 == hszwidth ) //判斷數(shù)據(jù)對應于那個數(shù)據(jù)項,并作出具體處理

{

_atoflt(&fltval,szbuffer); //dde的數(shù)據(jù)以字符串形式創(chuàng)送過來的,這里將它轉換成數(shù)值

ptele1101-》msgblock1.stripwidth=fltval.f; //將數(shù)字存入緩沖區(qū)

}

return ( hddedata )dde_fack;

}

return 0;

}

本例中dde回調函數(shù)要處理的dde項目不止一個,任意一個dde項目的值發(fā)生變化時,回調函數(shù)都會被自動調用一次,具體實現(xiàn)時只需要用if語句對hsz1和hsz2進行逐一比較即可處理所有的項目。緩沖區(qū)ptele1101用于存儲通過以太網(wǎng)發(fā)送到板型儀的數(shù)據(jù),下文中將詳細介紹。

上面介紹的方法用于從dde服務器中獲取mb+網(wǎng)上的數(shù)據(jù),那么如何將數(shù)據(jù)寫入到mb+網(wǎng)呢,同樣還是使用ddeml庫中提供的方法,具體如下:

ddepoke(idinst,hconv4,szwidth,text(“1020”));

//寫數(shù)據(jù)到mb+,設置寬度為1020mm

ddepoke為自定義函數(shù),具體實現(xiàn)為:

void ddepoke(dword idinst, hconv hconv, tchar* szitem, tchar*

szdata)

{

hsz hszitem=ddecreatestringhandlew(idinst,szitem,cp_winunicode);

ddeclienttransaction((lpbyte)unicodetoansi(szdata),(dword)(lstrlenw(szdata)+1),hconv,

hszitem,cf_text,xtyp_poke,3000,null);

ddefreestringhandle(idinst,hszitem);

}

(3) 與以太網(wǎng)交換數(shù)據(jù),這里使用的是socket協(xié)議。前面提到了緩沖區(qū)ptele1101,這里存儲的是要傳送到板型儀的數(shù)據(jù)。這是一個結構指針,定義如下:

typedef struct

{

teleheader msgheader; //消息頭

tele1101block1 msgblock1; //消息第一部分

tele1101block2 msgblock2; //消息第二部分

tele1101block3 msgblock3; //消息第三部分

} tele1101, *ptele1101;

ptele1101 ptele1101;

這其中teleheader、tele1101block1、tele1101block2和tele1101block3也分別是一個結構,這里就不詳述了。

本實例中使用另外一個線程來處理以太網(wǎng)的數(shù)據(jù)交換,這樣不會中斷處理dde數(shù)據(jù)的過程。

dword dwthreadid;

thread=createthread(null,0,(lpthread_start_routine )

sockthread,null,0,&dwthreadid);

sockthread為線程的過程函數(shù),具體實現(xiàn)如下:

void sockthread()

{

int i=0;

tchar buf[256];

initwinsock();//初始化socket

//創(chuàng)建并設置協(xié)議類型,地址和端口

socket socksrv=socket(af_inet,sock_stream,0);

sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr=htonl(inaddr_any);

addrsrv.sin_family=af_inet;

addrsrv.sin_port=htons(5001);

//綁定并監(jiān)聽端口

bind(socksrv,(sockaddr*)&addrsrv,sizeof(sockaddr));

listen(socksrv,5);

sockaddr_in addrclient;

int len=sizeof(sockaddr);

while (1) //程序正常運行時,始終接收連接請求

{

sockconn=accept(socksrv,(sockaddr*)&addrclient,&len);

zeromemory(buf,sizeof(buf));

__try

{

while (1) //連接建立后每50秒交換一次數(shù)據(jù)

{

len=send(sockconn,(char *)ptele1101,sizeof(tele1101),0);

len=recv(sockconn,(char *)ptele1102,sizeof(tele1102),0);

if (0==len || socket_error==len)

{

len=wsagetlasterror();

raiseexception(1,0,0,null);

}

sleep(50);

}

}

__except(exception_execute_handler)

{

closesocket(sockconn);

}

}

closesocket(socksrv);

wsacleanup();

}

這里ptele1102為接收數(shù)據(jù)的緩沖區(qū),也是一個結構,定義與ptele1101類似,此處不詳述。

從mb+網(wǎng)來的數(shù)據(jù)在使用dde協(xié)議獲取后存入緩沖區(qū)ptele1101,發(fā)送到板型儀,從板型儀來的數(shù)據(jù)存入緩沖區(qū)ptele1102,相關數(shù)據(jù)再使用dde協(xié)議寫回到mb+網(wǎng),這樣就實現(xiàn)了mb+網(wǎng)和以太網(wǎng)的數(shù)據(jù)交換。

4、結束語

本文介紹的數(shù)據(jù)交換的方法編程實現(xiàn)起來比較容易,代碼量較少,能很好的解決異種網(wǎng)絡間的數(shù)據(jù)交換的需求,并在單機架平整機板型控制系統(tǒng)中得到了成功的應用,取得了滿意的效果。文中介紹的使用dde協(xié)議和socket協(xié)議處理數(shù)據(jù)的方式有較好的通用性,經(jīng)過簡單修改既可以用于其他的系統(tǒng)。另外通過簡單的擴展,即可實現(xiàn)數(shù)據(jù)采集和分析的功能??梢詮V泛應用于工業(yè)控制的各個領域。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉