<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于DDE協(xié)議的Modbus Plus與Ethernet數據交換

基于DDE協(xié)議的Modbus Plus與Ethernet數據交換

作者: 時(shí)間:2012-08-14 來(lái)源:網(wǎng)絡(luò ) 收藏

  (2) 通過(guò)dde協(xié)議的服務(wù)名,主題名和項目名來(lái)訪(fǎng)問(wèn)具體某個(gè)項目的數據

  先定義dde的服務(wù)名和主題名

tchar szapp[] = text("mbplus"); //服務(wù)名
tchar sztopic4[]=text("plc4"); //主題名
tchar szwidth[]=text("400401"); //項目名
tchar vlwidth[16]; //儲存從dde服務(wù)器返回的數據
hsz hszwidth; //項目的dde標識

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

hconv4=ddeconnecttotopic(idinst,szapp,sztopic4,hsztopic4);
if( hconv4 != null )
{
ddeautorequest(idinst,hconv4,szwidth,hszwidth);
}

  此處的ddeconnecttotopic和ddeautorequest為自定義的函數

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來(lái)獲取服務(wù)器和主題名的字符句柄,使用ddeconnect來(lái)建立指定服務(wù)下的指定的主題的連接。之后使用ddeautorequest函數來(lái)向dde服務(wù)器請求置頂項目名的數據,在數據發(fā)生變化后dde服務(wù)器會(huì )自動(dòng)將新的數據發(fā)送給客戶(hù)端,客戶(hù)端在回調函數中就可以獲取到新的數據,具體方法見(jiàn)下文。如果某個(gè)主題下有多個(gè)項目需要處理,都用ddeautorequest來(lái)處理即可,此函數的實(shí)現如下:

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);
}

  接下來(lái)就可以通過(guò)dde的回調函數來(lái)獲取數據了。

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數據
if( ufmt != cf_text )
return dde_fnotprocessed;
memset(szbuffer,0,64); //初始化緩沖區
datalen=ddegetdata(hdata,null,64,0);//獲取數據的長(cháng)度
ddegetdata(hdata,(unsigned char* )szbuffer,datalen,0);//獲取數據
if( hsz1==hsztopic4 hsz2 == hszwidth ) //判斷數據對應于那個(gè)數據項,并作出具體處理
{
_atoflt(fltval,szbuffer); //dde的數據以字符串形式創(chuàng )送過(guò)來(lái)的,這里將它轉換成數值
ptele1101->msgblock1.stripwidth=fltval.f; //將數字存入緩沖區
}
return ( hddedata )dde_fack;
}
return 0;
}

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



關(guān)鍵詞: DDE Modbus Plus Ethernet 數據交換

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>