精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

英創信息技術RS485接口通訊的WinCE編程介紹

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2019-11-14 09:41 ? 次閱讀

工業控制場合,RS485總線因其接口簡單,組網方便,傳輸距離遠等特點而得到廣泛應用。RS485和RS232一樣都是基于串口的通訊接口,數據收發的操作是一致的,所以使用的是同樣WinCE的底層驅動程序。但是它們在實際應用中通訊模式卻有著很大的區別,RS232接口為全雙工數據通訊模式,而RS485接口為半雙工數據通訊模式,數據的收發不能同時進行,為了保證數據收發的不沖突,硬件上是通過方向切換來實現的,相應也要求軟件上必須將收發的過程嚴格地分開。WinCE是一個多線程實時操作系統,RS232通信數據收發可在不同線程中同時進行,而對于RS485就不能采用這種方式,必須按照一定的流程來實現RS485所要求的通訊過程。大多數的RS485通訊采用主從通訊方式,在本文中將以電力系統中常用的DL/T 645多功能電能表通信規約為例,來說明RS485半雙工通訊的WinCE編程要點。

本例通過封裝兩個類來實現DL645通信規約,一、用于串口通信的CESerial類,完成打開、關閉串口,收發串口數據等功能。二、實現DL645規約鏈路層的類DL645_LCP,它提供設置通信地址,超時時間等信息,并完成通信幀的打包、解包、錯誤較驗、數據幀收發的功能。

基于485半雙工通信的特點,使用一個函數Transmit()來完成數據收發。在調用Transmit()函數發送數據后,程序并不立即返回,而是等待數據接收。一個完整的數據發送\接收過程如下:

·應用層調用DL645_LCP類的Transmit()方法,并將發送的數據傳遞給Transmit()。

·在Transmit()方法中對數據打包,增加幀起始符,幀結束符,校驗碼等信息,使其符合DL645規約。

·調用串口通信CESerial類的WritePort()方法函數,發送一幀數據。

·等待數據接收。遇下列情況之一時,函數返回:1、接收到一幀完整數據,2、接收超時,3、較驗出錯,4、通信出錯。

下面是Transmit()函數的源代碼:

int DL645_LCP::Transmit( LPSTR pDat, int DLen )

{

int i1, i2;

UCHAR WBuf[MaxWDatLen];

// fill write data

for( i1=0; i1《4; i1++ )

WBuf[i1] = 0xFE;

WBuf[i1] = 0x68;

i1++;

memcpy( &WBuf[i1], &m_LAddr, 6 );

i1 += 6;

WBuf[i1] = 0x68;

i1++;

memcpy( &WBuf[i1], pDat, 2 );

i1 += 2;

for( i2=2; i2 《 Dlen; i2++)

{

WBuf[i1] = pDat[i2] + 0x33;

i1++;

}

WBuf[i1] = GetCS( &WBuf[4], i1-4 );

i1++;

WBuf[i1] = 0x16;

i1++;

// write data

m_nDatLen = 0;

m_nDatErrFlg = 0;

m_nUserDatLen = 0;

m_state = RevStateIDLE;

// 發送一幀數據

ceSer.WritePort( (LPSTR)WBuf, i1 );

SetTimeOut( m_dwTimeOut );

// 等待數據接收

for(;;)

{

if( IsTimeOut() )

return ErrTimeout; // 接收超時返回

else if( m_nDatErrFlg == 1 )

return -2; // 數據出錯返回

else if( m_state == RevStateEND ) // 數據接收完成返回

{

memcpy( pDat, &RBuf[8], m_nDatLen-8-2 );

return m_nUserDatLen;

}

else

{

Sleep( 5 );

}

}

}

數據接收時,CESerial類的中斷處理函數收到數據,直接調用DL645_LCP類中的Receive()方法,在Receive()函數中完成一幀數據的解包工作。

void DL645_LCP::Receive( )

{

UINT i, i1;

if( m_nDatLen 《= MaxRDatLen )

{

for( i=0; i

{

SetTimeOut( m_dwTimeOut );

RBuf[m_nDatLen] = (unsigned char)ceSer.DatBuf[i];

switch( m_state )

{

case RevStateIDLE:

if( RBuf[m_nDatLen]==0x68 )

{

m_state = RevStateSTART;

m_nDatLen++;

}

break;

case RevStateSTART:

m_nDatLen++;

if( m_nDatLen==7 ) m_state = RevStateADDR;

break;

case RevStateADDR:

if( RBuf[m_nDatLen]==0x68 )

{

m_state = RevStateSTART1;

m_nDatLen++;

}

break;

case RevStateSTART1:

m_nDatLen++;

m_state = RevStateCTRL;

break;

case RevStateCTRL:

m_nUserDatLen = RBuf[m_nDatLen];

if( m_nUserDatLen==0 ) m_state = RevStateDATA;

else m_state = RevStateDLEN;

m_nDatLen++;

break;

case RevStateDLEN:

m_nDatLen++;

if( m_nDatLen==(10+m_nUserDatLen) )

m_state = RevStateDATA;

break;

case RevStateDATA:

m_state = RevStateSUM;

if( GetCS( RBuf, m_nDatLen)!= RBuf[m_nDatLen] )

m_nDatErrFlg = 1;

m_nDatLen++;

break;

case RevStateSUM:

if( RBuf[m_nDatLen]==0x16 )

{

m_nDatLen++;

for( i1=0; i1RBuf[10+i1] -= 0x33;

m_state = RevStateEND;

}

break;

default:;

}

}

}

else m_nDatErrFlg = 1;

}

利用本文提供的例程,在DL645_LCD類上做相應的修改,可方便的實現其它的485通信規約。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6085

    瀏覽量

    35212
收藏 人收藏

    評論

    相關推薦

    RS485通訊接口及其應用

    RS485通訊接口及其應用
    發表于 08-17 16:30

    主板中預裝Modbus通訊協議

    modbus_Master.h,與原來的靜態庫保持不變,相應各個API函數的說明請參見網站技術天地文章《Wince下的Modbus主控通訊
    發表于 10-20 10:40

    RS485通訊接口芯片介紹及選型要點

    RS485接口有著豐富產品,適合各種通訊需求。總線端口有著增強的ESD性能及浪涌電流吸收能力。優恩RS485接口芯片UN3485 工作電壓范
    發表于 03-30 16:46

    ?移通RS485轉PROFINET網關

    數據)、觸發數據改變發送(固定位置數據改變才會發送)。7、網關的狀態字可全面反映網橋的通信狀態和串口的通信狀態,控制字可以靈活控制發送、接收邏輯。移通RS485轉PROFINET網關PROFINET接口技術
    發表于 10-22 18:38

    RS485接口通訊WinCE編程要點

    在工業控制場合, RS485 總線因其接口簡單,組網方便,傳輸距離遠等特點而得到廣泛應用。RS485RS232 一樣都是基于串口的通訊
    發表于 06-09 15:47 ?56次下載

    RS485通訊接口及其應用

    RS485通訊接口及其應用 本文敘述了串行遠距離通訊中流行的 R S 4 8 5 通訊方式的特點和組網方式. 給出了具體的電路,
    發表于 05-21 15:43 ?216次下載
    <b class='flag-5'>RS485</b><b class='flag-5'>通訊</b><b class='flag-5'>接口</b>及其應用

    rs485通訊協議

    rs485通訊協議是本技術頻道的核心內容,介紹rs485通訊協議原理,
    發表于 08-13 17:21
    <b class='flag-5'>rs485</b><b class='flag-5'>通訊</b>協議

    RS485通訊基本要求

    RS485通訊基本要求,了解RS485常用的工業通訊方式呢,學習485必備
    發表于 06-14 17:51 ?48次下載

    工業通訊RS232如何轉RS485通訊接頭

    本文首先介紹RS232通訊RS485通訊的概述,其次介紹
    發表于 04-19 10:18 ?3.3w次閱讀
    工業<b class='flag-5'>通訊</b><b class='flag-5'>RS</b>232如何轉<b class='flag-5'>RS485</b><b class='flag-5'>通訊</b>接頭

    信息技術WinCE系統多串口擴展方案簡介

     異步串行通訊口(UART)是在工業自動化中應用最為廣泛的通訊接口之一,其接口形式包括RS232C、RS
    的頭像 發表于 10-31 15:15 ?1650次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>WinCE</b>系統多串口擴展方案簡介

    信息技術RS485總線的特征簡介與實際應用

    發送標準,經通訊工業協會(TIA)修訂后命名為TIA/EIA-485-A。滿足RS485標準的收發器采用差分傳輸方式(Differential Driver Mode),數據最高傳輸速率為10Mbps,最大通信距離約為1219m
    的頭像 發表于 10-31 15:09 ?2132次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>RS485</b>總線的特征簡介與實際應用

    信息技術工控主板對RS485硬件方向控制介紹

    RS485是工業現場最常用的現場總線之一。
    的頭像 發表于 11-15 09:38 ?1427次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b>工控主板對<b class='flag-5'>RS485</b>硬件方向控制<b class='flag-5'>介紹</b>

    信息技術工控系統中的RS485通訊接口設計介紹

    在工業控制、采集等現場應用中,非常普遍地都會使用到RS485、CAN等通訊接口。同時這類通訊線纜連接的兩個設備相隔距離又比較遠(最長的距離會達到1公里以上)、設備工作環境也比較惡劣(機
    的頭像 發表于 02-03 10:22 ?1597次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b>工控系統中的<b class='flag-5'>RS485</b><b class='flag-5'>通訊</b><b class='flag-5'>接口</b>設計<b class='flag-5'>介紹</b>

    信息技術WinCE主板與STM32多功能模塊通訊介紹

    ,STM32F103RCT6通過其USB Device接口工控主板連接通訊,STM32在WinCE系統中被當做一個串口設備,
    的頭像 發表于 02-06 11:12 ?2036次閱讀

    什么是RS485接口

    什么是RS485接口? 隨著科技的發展,通信技術已經滲透到我們生活的方方面面。在各種通信方式中,RS485接口因其獨特的優勢和廣泛的應用領域
    的頭像 發表于 01-11 17:37 ?4903次閱讀