久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9946|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)與eview觸摸屏Modbus通訊方法

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:107593 發(fā)表于 2016-3-11 15:26 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本文介紹了一種基于Modbus 通信協(xié)議的eView 觸摸屏與常用的51 單片機(jī)的通信方法。該方法通過C51 編程實(shí)現(xiàn)Modbus 通信,在51 系列單片機(jī)上具有通用性,有一定的借鑒作用。工業(yè)控制中經(jīng)常需要觀察系統(tǒng)的運(yùn)行狀態(tài)或者修改運(yùn)行參數(shù)。觸摸屏能夠直觀、生動(dòng)地顯示運(yùn)行參數(shù)和運(yùn)行狀態(tài),而且通過觸摸屏畫面可以直接修改系統(tǒng)運(yùn)行參數(shù),人機(jī)交互性好。單片機(jī)廣泛應(yīng)用于工控領(lǐng)域中,與觸摸屏配合,可組成良好的人機(jī)交互環(huán)境。觸摸屏與單片機(jī)通信,需要根據(jù)觸摸屏采用的通信協(xié)議為單片機(jī)編寫相應(yīng)的通信程序。Modbus 協(xié)議是美國Modicon 公司推出的,一種有效支持控制器之間以及控制器經(jīng)由網(wǎng)絡(luò)(如以太網(wǎng))與其他設(shè)備之間進(jìn)行通信的協(xié)議。本文以STC89C51 單片機(jī)和人機(jī)電子有限公司的eView 觸摸屏為例,介紹其通信程序的開發(fā)過程。
1 系統(tǒng)結(jié)構(gòu)
實(shí)現(xiàn)觸摸屏與單片機(jī)的通信,主要是解決通信協(xié)議的問題。本文使用開放的Modbus 通信協(xié)議,以觸摸屏作主站,單片機(jī)作從站。eView 觸摸屏本身支持Modbus通信協(xié)議,如果單片機(jī)也支持Modbus 協(xié)議,就可以進(jìn)行通信了。eview 觸摸屏支持RS-232 和RS-485 兩種通信接口。在工業(yè)控制領(lǐng)域,由于RS-485 具有可靠性高、傳輸距離遠(yuǎn)、抗干擾能力強(qiáng)等優(yōu)點(diǎn),所以在本系統(tǒng)中觸摸屏與單片機(jī)通信采用RS-485 連接,傳輸速率設(shè)置為9600kbps。RS-485 信號(hào)傳輸是一種半雙工的傳輸方式,單片機(jī)通過一個(gè)RS-232/RS-485 無源轉(zhuǎn)換器把232 信號(hào)轉(zhuǎn)換成485信號(hào),連接到eView 觸摸屏上。圖l 為該系統(tǒng)的原理圖。




單片機(jī)控制系統(tǒng)采用STC89C51 系列單片機(jī),其內(nèi)部集成MAX810/STC810專用復(fù)位電路(原有外部復(fù)位可繼續(xù)保留,與Intel8051 引腳兼容),具有抗干擾能力強(qiáng)、加密性強(qiáng)、高抗靜電(ESD)、超低功耗等特點(diǎn),而且價(jià)格低廉。在本系統(tǒng)中,觸摸屏是上位機(jī),單片機(jī)是下位機(jī)。
2Modbus 協(xié)議
2.1Modbus 協(xié)議簡介
Modbus 協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(如以太網(wǎng))與其他設(shè)備之間可以通信。它已經(jīng)成為一種通用工業(yè)標(biāo)準(zhǔn)。不同廠商生產(chǎn)的控制設(shè)備可以通過它連成工業(yè)網(wǎng)絡(luò),集中監(jiān)控。Modbus 協(xié)議定義了一個(gè)控制器能認(rèn)識(shí)使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進(jìn)行通信的。它描述了一控制器請求訪問其他設(shè)備的過程.如何回應(yīng)來自其他設(shè)備的請求,以及怎樣偵測錯(cuò)誤并記錄;制定了消息域格局和內(nèi)容的公共格式。
當(dāng)在某一Modbus 網(wǎng)絡(luò)上通信時(shí),此協(xié)議決定了每個(gè)控制器需要知道它們的設(shè)備地址,識(shí)別按地址發(fā)來的消息,以及決定要產(chǎn)生何種行動(dòng)。如果需要回應(yīng),則控制器將生成反饋信息并用Modbus 協(xié)議發(fā)出。在其他網(wǎng)絡(luò)上,包含了M0dhus協(xié)議的消息轉(zhuǎn)換為在此網(wǎng)絡(luò)上使用的幀或包結(jié)構(gòu)。
2.2ModbusRTU 通信數(shù)據(jù)傳輸模式
當(dāng)控制器設(shè)備基于Modbus 協(xié)議以RTU 模式通信時(shí),消息中的每個(gè)字節(jié)包含2 個(gè)4 位的十六進(jìn)制字符。這種方式的主要優(yōu)點(diǎn)是:在同樣的波特率下,可比ASCII方式傳送更多的數(shù)據(jù)。
編碼采用8 位二進(jìn)制,十六進(jìn)制數(shù)0~9 和A~F;消息中每個(gè)8 位域都是由
2 個(gè)十六進(jìn)制字符組成。組織結(jié)構(gòu)如下:



2.3ModbusRTU 消息幀結(jié)構(gòu)
ModbusRTU 消息幀結(jié)構(gòu)如下:







(1)地址碼
地址碼為通信傳送的第一個(gè)字節(jié)。這個(gè)寧節(jié)表明,由用戶設(shè)定地址碼的從機(jī)將接收由主機(jī)發(fā)送來的信息。每個(gè)從機(jī)都有具有唯一的地址碼,只有符合地址碼的從機(jī)才能響應(yīng)回送,且響應(yīng)回送均以各自的地址碼開始。主機(jī)發(fā)送的地址碼則表明將發(fā)送到的從機(jī)地址,而從機(jī)發(fā)送的地址碼表明回送的從機(jī)地址。地址0用作廣播地址,以使所有的從設(shè)備都能認(rèn)識(shí)。
(2)功能代碼
功能代碼為通信傳送的第二個(gè)字節(jié)。Modbus 通信規(guī)約定義可能的代碼范圍是十進(jìn)制的1~255。當(dāng)然,有些代碼適用于所有控制器,有些僅適用于某種控制器,還有些保留以備后用。主機(jī)發(fā)送請求,通過功能碼告訴從機(jī)執(zhí)行什么動(dòng)作;從機(jī)響應(yīng)請求,從機(jī)發(fā)送的功能碼與從主機(jī)發(fā)送來的功能碼一樣,表明從機(jī)已響應(yīng)主機(jī)進(jìn)行操作。如果從機(jī)發(fā)送的功能碼的最高位為1,則表明從機(jī)沒有響應(yīng)操作或發(fā)送出錯(cuò),主設(shè)備應(yīng)用程序得到異議的回應(yīng)后,典型的處理是重發(fā)消息。表l 列出了常用Modbus 支持的部分功能碼。







以讀取線圈狀態(tài)為例說明。主站發(fā)送命令:[設(shè)備地址][命令號(hào)01][起始寄存器地址高8 位][低8 位][讀取的寄存器數(shù)高8 位][低8 位][CRC 校驗(yàn)的低8位][高8 位]。從站響應(yīng):[設(shè)備地址][命令號(hào)01][返回的字節(jié)個(gè)數(shù)][數(shù)據(jù)1][數(shù)據(jù)2]…[數(shù)據(jù)n][CRC 校驗(yàn)的低8 位][高8 位]。
(3)數(shù)據(jù)區(qū)
數(shù)據(jù)區(qū)根據(jù)功能碼的不同而不同。數(shù)據(jù)區(qū)包含需要從機(jī)執(zhí)行什么動(dòng)作,或由從機(jī)采集的返送信息。這些信息可以是實(shí)際數(shù)值、設(shè)置點(diǎn)、主機(jī)發(fā)送給從機(jī)或從機(jī)發(fā)送給主機(jī)的地址等。例如,功能碼告訴從機(jī)讀取寄存器的值,則數(shù)據(jù)區(qū)必須包含要讀取寄存器的起始地址及讀取長度。對于不同的從機(jī),地址和數(shù)據(jù)信息都不相同。
(4)錯(cuò)誤校驗(yàn)碼
主機(jī)或從機(jī)可用校驗(yàn)碼判別接收信息是否出錯(cuò)。錯(cuò)誤檢測域包含一個(gè)16 位的值(用2 個(gè)8 位的字符來實(shí)現(xiàn))。錯(cuò)誤檢測域的內(nèi)容是通過對消息內(nèi)容進(jìn)行“循環(huán)冗余檢測”得出的。CRC 域附加在消息的最后,添加時(shí)先是低字節(jié)然后是高字節(jié),故CRC 的高位字節(jié)是發(fā)送消息的最后一個(gè)寧節(jié)。錯(cuò)誤校驗(yàn)采用CRC-16 校驗(yàn)方法。
3 軟件編程
下面是采用C5l 編寫的軟件,主要包括CRC 校驗(yàn)和終端接收及波特率設(shè)置等。由于篇幅有限,其他程序略。
//功能:串口初始化,波特率為9600bps,方式1;

void lnit_Com(void)
{
     TMOD=0X20;
     PCON=0X00;
     SCON=-X50;
     TH1=0Xfd;
  TL=0Xfd;
  TR1=1;
  EA=1;
  ES=1;
}
//CRC 校驗(yàn)函數(shù)
uint CRC 16(uchar*pushmsg,unsigned short usdatalen)
{
uchar uchCRCHi=0xff;  //高CRC字節(jié)初始化
uchar uchCRCLO=0xff;  //低CRC字節(jié)初始化
uint ulndex;
while (usDataLen--)  //傳輸消息緩沖區(qū)
{
   ulndex=uchCRCHi-*pushMsg0++;// 計(jì)算CRC
   uchCRCHi=uchCRCLO^auchCRCHi[ulndex];
   uchCRCLO=uchCRCLO[ulndex];
}
return (uchCRCHi<<8|uchCRCLo);
}
//發(fā)送函數(shù)和判斷函數(shù)
void send(uchar rrbuf[],int sendCount)
{
uchar i,crcHi,crclo,j,k=0;
uchar sendbuf[32];
usDataLen=sendCount-2;
sendbuf[0]=ReceBuf[0];
sendbuf[1]=ReceBuf[1];
sendbuf[2]=sendCount-2;
for(j=3;j<sendCount-2;j++)
{
sendbuf[j]=rrbuf[k];k++;
}
  k=o;
  crcData=CRC(sendbuf,usDataLen);
  crcHi=crcData/256;
  crcHi=crcData%256;
  senddbuf[sendCount-2]=crcHi;
  senddbuf[sendCount-1]=crcLo;
  for(i=0;i<sendCount;i++)
  {
   SBUF=sendbuf[ i ];
   while(TI=0);TI=0;
  }
}
void Read()
{
switch(startAdress)
{
  case 0x002; send(&writcVUf[0],sendcCount);break;
  case 0x003; send(rbufl,sendCount );break;
  default;
  {
  SBUF=0x00;while(TI==0 TI=0; );
  }
}
}
//數(shù)據(jù)幀分析處理函數(shù)
void crc_Data()
{
    crcDataHi=crcData/256;
crcDataHi=crcData/256;
if(crcDataHi==receBuf[6]&crcDataLo==recebuf[7])
{
  StartAress=ReceBuf[2] ;
  StartAress<<=8;
  StartAress=StartAress|ReceBuf[3];
  if(ReceBuf[0]==0x00)
  {
  sendCount=5+2*(ReceBUf[4]*256+ReceBuf[5]);
  Read();
  }

}
else{SBUF=0x0a;while(TI==0);TI=0;}
}
  //串口中斷函數(shù)---實(shí)現(xiàn)CRC數(shù)據(jù)信息的分析處理
  void cmmmIntProc()interrupt 4{
  if(RI){
  RI=0;ReceBuf[receCount]=SBUF;
  receCount++;usDataLen=receCount-2;
  switch(ReceBuf[1])
  {
  case 0x01;if(receCount>=8)
    {receCount=0readbit();} break;
  case 0x02;if(receCount>=8)
    {receCount=0readbit();} break;
  case 0x03;if(receCount>=8)
    {receCount=0readbit();} break;
  case 0x04;if(receCount>=8)
    {receCount=0readbit();} break;
  case 0x05;if(receCount>=8)
    {receCount=0readbit();} break;
  case 0x06;if(receCount>=8)
    {receCount=0;WriteVyte();}break;
  default; if(receCount>=8)
  {
  receCount=0;SBUF=0X55;
  while(TI==0);
  TI=0;
  }
  }
     }
   }
  

                  

4 總結(jié)
由于Modhus 協(xié)議具有開放性和透明性等特點(diǎn),而51系列單片機(jī)技術(shù)成熟、開發(fā)成本低,二者的結(jié)合將繼續(xù)成為各類通信系統(tǒng)設(shè)計(jì)的首選。本設(shè)計(jì)方法已經(jīng)應(yīng)用于觸摸屏與單片機(jī)通信設(shè)計(jì),并取得了較好效果。這種方法對于編制類似的通信軟件有一定的借鑒作用,部分程序可以直接移植。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:428400 發(fā)表于 2018-11-18 18:31 | 只看該作者
這個(gè)是維綸官網(wǎng)的例子嗎
回復(fù)

使用道具 舉報(bào)

板凳
ID:468555 發(fā)表于 2019-1-15 15:18 | 只看該作者
論壇這么好
回復(fù)

使用道具 舉報(bào)

地板
ID:578008 發(fā)表于 2019-7-26 15:56 | 只看該作者
有沒有主機(jī)的代碼
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人av网站在线观看 | 国产成人99久久亚洲综合精品 | 逼逼网| 日韩精品中文字幕在线 | 一区二区电影网 | 欧美精品v国产精品v日韩精品 | 成人福利在线 | 久久精品青青大伊人av | 中文字幕一区在线观看视频 | 视频在线观看一区二区 | 孰女乱色一区二区三区 | 欧美一区二区三区在线观看 | 国产精品久久久久久久久久久新郎 | 日韩精品在线看 | 二区三区视频 | 亚洲国产精品日本 | 另类在线 | 亚洲大片在线观看 | 精品无码久久久久久国产 | 欧美国产精品一区二区 | 成人在线视频免费播放 | 欧美一区二区免费 | 国产一级一级国产 | 天天射天天操天天干 | 天天操伊人 | 日韩成人免费视频 | 中文在线а√在线8 | 欧美激情精品久久久久久 | 91av免费观看 | 久久久久国 | 婷婷综合 | 精品日韩电影 | 日韩一区在线播放 | 天天草天天 | 成人午夜在线 | 亚洲视频在线观看一区二区三区 | 欧美xxxⅹ性欧美大片 | 久草在线在线精品观看 | 午夜伊人| 日韩亚洲欧美综合 | 国产精品日日摸夜夜添夜夜av |