自在自线亚洲а∨天堂在线-中文字幕一区视频播放-扒开双腿猛进入喷水高潮叫声-欧美日本亚洲一区二区-老熟妇高潮偷拍一区二区-国产精品高清一区二区不卡-午夜色福利视频一区二区三区-亚洲国产成人精品福利在线观看-亚洲欧美成人一区二区在线电影

當(dāng)前位置:機(jī)電之家首頁 >> PLC技術(shù)>> plc應(yīng)用 >> 永宏plc應(yīng)用 >> 用VC實(shí)現(xiàn)PC機(jī)與永宏P(guān)LC的通訊具體分析
用VC實(shí)現(xiàn)PC機(jī)與永宏P(guān)LC的通訊具體分析

1  引言
      近年來,隨著大規(guī)模集成電路的發(fā)展,可編程控制器得到了迅速的發(fā)展,并廣泛應(yīng)用于各種領(lǐng)域中。由于可編程控制器具有自身的通訊端口和通信協(xié)議,這就使得工業(yè)現(xiàn)場的實(shí)時(shí)監(jiān)控和控制成為可能。所以在實(shí)際的運(yùn)用中,常常采用plc作為下位控制機(jī)實(shí)現(xiàn)整個(gè)過程的自動(dòng)控制。而微機(jī)在數(shù)據(jù)處理及人機(jī)界面方面有得天獨(dú)厚的優(yōu)勢,因此采用微機(jī)為上位機(jī)來進(jìn)行數(shù)據(jù)的顯示、控制參數(shù)的修改及過程的控制,這樣就不得不解決上位管理機(jī)與下位控制機(jī)之間的通訊問題。
      由于串行通訊具有線路簡單、應(yīng)用靈活、可靠性高等優(yōu)點(diǎn),并且普通微機(jī)上均都帶有串口,便于實(shí)現(xiàn),所以微機(jī)與plc之間常采用串行異步通訊。vc具有面向?qū)ο蟮脑O(shè)計(jì)方法、簡單方便的串行通訊和實(shí)用性強(qiáng)等優(yōu)點(diǎn),無需借用其他語言就可以開發(fā)出優(yōu)秀的控制系統(tǒng)通訊軟件。本文重點(diǎn)就是介紹在bbbbbbs98環(huán)境下如何利用vc來實(shí)現(xiàn)pc機(jī)與永宏plc之間的串行通訊。并以實(shí)際控制系統(tǒng)“半自動(dòng)化燈檢機(jī)”為例加以說明。
2  控制系統(tǒng)簡介
      半自動(dòng)化燈檢機(jī)系統(tǒng)的主要工藝流程:供瓶機(jī)供瓶→進(jìn)瓶輸送帶送瓶→氣缸放瓶→主傳動(dòng)履帶式置瓶棍移送瓶→進(jìn)入高速旋轉(zhuǎn)工位旋瓶→進(jìn)入低速旋轉(zhuǎn)工位慢速旋瓶(同時(shí)也就進(jìn)入燈檢工位)→至出瓶輸送帶送瓶→進(jìn)入剔除工位分瓶(由電磁閥來控制氣缸動(dòng)作)。下位機(jī)主要采用永宏plc完成現(xiàn)場的狀態(tài)檢測與控制。上位機(jī)則用一般的微機(jī),通過rs-232與plc通信接受現(xiàn)場狀態(tài)的顯示并加以控制生產(chǎn)過程。電機(jī)的運(yùn)轉(zhuǎn)通過plc控制,而電機(jī)的升降速則由變頻器調(diào)節(jié)。因此本系統(tǒng)軟件需要完成的主要任務(wù)是:從plc,變頻器循環(huán)接受現(xiàn)場的狀態(tài),并根據(jù)不同的狀態(tài)控制變頻器及電機(jī)的運(yùn)轉(zhuǎn)。主要的界面有:監(jiān)控畫面,密碼設(shè)置,參數(shù)設(shè)置和報(bào)警畫面等。其中監(jiān)控畫面設(shè)有:操作按鈕,如停止,啟動(dòng)及產(chǎn)品合格數(shù)的實(shí)時(shí)顯示。畫面中的每一個(gè)按鈕或狀態(tài)顯示都需要上位機(jī)與下位機(jī)的通信來完成。
3  永宏plc的通訊格式
      整個(gè)通訊采用上位機(jī)主動(dòng)發(fā)送和接收的方式,plc內(nèi)部不需要特定的梯形圖編程來做下位機(jī)通訊程序。
3.1 通訊格式
      計(jì)算機(jī)與永宏fb系列plc通訊必須遵從fb-plc通訊協(xié)議。無論是上位機(jī)發(fā)出的命令信息格式還是下位機(jī)發(fā)出的回應(yīng)信息格式均可分為6個(gè)資料位,如圖1所示。


(1) 起始字元(stx):ascii碼的起始字元stx對應(yīng)的16進(jìn)制數(shù)為02h。無論命令信息還是回應(yīng)信息,它們的起始字元均為stx,接收方以此來判知傳輸資料的開始。
(2) 從機(jī)站號:為兩位16進(jìn)制數(shù)。fb-plc的站號是什么,這個(gè)值就是多少。因?yàn)閒b-plc的站號可以為1-255,所以這個(gè)值的范圍為01h-ffh。
(3) 命令號碼:為兩位16進(jìn)制數(shù)。所謂命令號碼是指上位機(jī)要求下位機(jī)所執(zhí)行的動(dòng)作類別,例如要求讀取或?qū)懭雴吸c(diǎn)狀態(tài)、寫入或讀取暫存器資料、強(qiáng)制設(shè)定、運(yùn)行、停止等等。在回應(yīng)信息中,下位機(jī)會(huì)將從上位機(jī)接收到的命令號碼原原本本的隨同其它信息一同發(fā)送給上位機(jī)。
(4) 本文資料:可為0(無本文資料)-500個(gè)ascii字元。在命令信息中,此信息用于指定命令所要運(yùn)作或存取的對象及要寫入的數(shù)值。如果通訊正確,那么在回應(yīng)信息中此欄為0(30h)和從上位機(jī)接收到的本文資料;如果通訊異常,那么為錯(cuò)誤碼。
(5) 校驗(yàn)碼(checksum):校驗(yàn)碼是將1-4各欄的所有ascii字元的16進(jìn)制數(shù)值以“l(fā)rc(longitudinal redundancy check)”法計(jì)算出1個(gè)byte長度(兩個(gè)16進(jìn)制數(shù)值00-ffh)的校驗(yàn)碼。當(dāng)下位機(jī)接收到信息后,用同樣的方法計(jì)算出接收信息的校驗(yàn)碼,如果兩個(gè)校驗(yàn)碼相同,則說明傳送正。
(6) 結(jié)束字元(etx):ascii碼的結(jié)束字元etx對應(yīng)的16進(jìn)制數(shù)為03h。無論命令信息還是回應(yīng)信息,他們的結(jié)束字元均為etx,接收方以此來判知此次通訊已結(jié)束。
3.2 通訊命令
      永宏系列plc有多種命令字,常用的幾種描述如附表所示。例如,上位機(jī)要讀取plc內(nèi)部繼電器m1和m2的狀態(tài),則上位機(jī)發(fā)送的命令字符串格式為:
      起始符(02h)+站號(01)+命令字(44)+個(gè)數(shù)(02)+起始地址(0001)+校驗(yàn)碼(3b)+結(jié)束符
相應(yīng)下位機(jī)響應(yīng)的字符串為:
      起始符(02h)+站號(01)+命令字(44)+錯(cuò)誤碼(0)+m0,m1狀態(tài)(10)+校驗(yàn)碼(5c)+結(jié)束符若要對字元件進(jìn)行寫操作,那么命令碼改為47。表明該指令要向plc內(nèi)部寄存器寫入數(shù)據(jù),同時(shí)要給出寫入的數(shù)據(jù)個(gè)數(shù)、開始寄存器和數(shù)據(jù)內(nèi)容。
      校驗(yàn)和在信息幀的尾部,用來判斷傳輸?shù)恼_與否。當(dāng)數(shù)據(jù)從信息源出發(fā),由于信道總是有一定的噪聲存在,在信號達(dá)到信宿之前會(huì)與噪聲發(fā)生疊加,使接收端收到的二進(jìn)制數(shù)位和發(fā)送端實(shí)際發(fā)送的二進(jìn)制數(shù)位不一致,因而產(chǎn)生差錯(cuò)。進(jìn)行差錯(cuò)檢驗(yàn)的方法很多,常用的有奇偶校驗(yàn)碼,水平垂直冗余校驗(yàn)lrc,目前廣泛使用的是lrc校驗(yàn)碼,它可以查出99%以上18位或更長的突出錯(cuò)誤,因而在計(jì)算機(jī)與plc進(jìn)行點(diǎn)對點(diǎn)的短程通訊時(shí),采用這種校驗(yàn)方法出錯(cuò)的幾率較小。plc接收到計(jì)算機(jī)發(fā)送的命令后,如果沒有錯(cuò)誤,plc會(huì)發(fā)出確認(rèn)碼“0”;若有錯(cuò)誤,plc會(huì)發(fā)出錯(cuò)誤代碼“1”。

4 軟件編程
      軟件編程采用微軟的vc++6.0作為開發(fā)工具。系統(tǒng)主監(jiān)控畫面要求不斷掃描下位機(jī)的信號的通斷狀態(tài),以及讀取plc的內(nèi)部存取單元加以顯示。此外手動(dòng)按鈕可以直接控制,由此主程序結(jié)構(gòu)流程圖如圖2所示。


      為了確保通信的成功,在pc機(jī)和永宏plc之間開始數(shù)據(jù)傳送前,常采用握手通訊的方法,即pc機(jī)發(fā)送特征字符,下位機(jī)接收并回送同一特征字符,由pc機(jī)進(jìn)行檢測正確后開始數(shù)據(jù)傳送,以保證串行通訊數(shù)據(jù)的可靠。此外在通訊過程中,常因某些原因不能保證每次通訊成功,遇到這種情況,不能簡單地宣布通訊失敗,本程序設(shè)置了通訊重復(fù)次數(shù)計(jì)數(shù)器,只有在規(guī)定次數(shù)后握手通訊仍未完成時(shí),才宣布通訊失敗,從而大大提高了通訊的成功率和系統(tǒng)的容錯(cuò)能力。另外,程序中應(yīng)用定時(shí)器對通訊時(shí)間加以限制,以免發(fā)生死鎖情況。定時(shí)器的打開和關(guān)閉由程序進(jìn)行控制。握手通訊成功后,設(shè)置握手連接成功標(biāo)志位,這樣,pc機(jī)和永宏plc之間就可以開始數(shù)據(jù)傳送。握手通訊程序如下:
void cscommplcdlg::onscommstart() 
{ m_mscomm.setcommport(1);     file://選擇com1
 m_mscomm.setportopen(true);  file://打開串口
 m_mscomm.setsettings("9600,e,7,1"); 
file://波特率9600,偶校驗(yàn),7個(gè)數(shù)據(jù)位,1個(gè)停止位 
 m_mscomm.setbbbbbmode(1); 
file://1:表示以二進(jìn)制方式檢取數(shù)據(jù)
m_mscomm.setrthreshold(1);  file://參數(shù)1表示每 file://當(dāng)收到一只字符時(shí)引發(fā)一個(gè)接收數(shù)據(jù)的oncomm事件
 m_mscomm.setbbbbblen(0); file://設(shè)置當(dāng)前接收區(qū)    file://數(shù)據(jù)長度為0
 cbbbbbb sendstr="";//設(shè)置要發(fā)送的字符串
 sendstr+=0x02;
 sendstr+="014eabcdefgb8";
 sendstr+=0x03;
 m_mscomm.setoutput(colevariant(sendstr));
file://發(fā)送數(shù)據(jù)
 char sendcount=0;
 while(m_mscomm.getinbuffercount==0)
 { sendcount+=1;
   if(sendcount<10)
  m_mscomm.setoutput(colevariant(sendstr));  file://再次發(fā)送數(shù)據(jù)
   else
  afxmessagebox("communication fail!"); return; }
 variant data;
 char s;
 char *recstr=&s;
 short l=m_mscomm.getinbuffercount();
 if(l>0)
 {   data=m_mscomm.getbbbbb();
     recstr=(char *)(unsigned char *)data.parray->pvdata;
     if(strcmp(sendstr,recstr)==0)      
    { bbbbsuccess=1;      file://設(shè)置連接成功標(biāo)志
  m_timer=settimer(1,1000,null);  
file://開啟定時(shí)器
    }
 }

4.1 實(shí)時(shí)數(shù)據(jù)監(jiān)控的實(shí)現(xiàn)
      在本系統(tǒng)的主監(jiān)控畫面上,如圖3所示。要求實(shí)時(shí)監(jiān)控現(xiàn)實(shí)合格產(chǎn)品數(shù)。在下位機(jī)plc程序中,每當(dāng)合格產(chǎn)品經(jīng)過特定傳動(dòng)待時(shí),光電開關(guān)便感應(yīng)信號,plc對此信號計(jì)數(shù),存放于一內(nèi)存單元。上位機(jī)就要定時(shí)不斷讀取此單元內(nèi)容顯示。

程序代碼如下:
void cscommplcdlg::ontimer(uint nidevent) 
{ cbbbbbb sendstr="";//設(shè)置要發(fā)送的字符串
 sendstr+=0x02;
 sendstr+="014601r0001273";
 sendstr+=0x03;
 m_mscomm.setoutput(colevariant(sendstr));//發(fā)送數(shù)據(jù)
 sleep(50);
 variant data;
 char s;
 char *recstr=&s;
 short recdata=0; 
 short l=m_mscomm.getinbuffercount();
 if(l>0)
 {    data=m_mscomm.getbbbbb();
  recstr=(char *)(unsigned char *)data.parray->pvdata;
  recstr[l]=` 
作者:未知 點(diǎn)擊:1203次 [打印] [關(guān)閉] [返回頂部]
本文標(biāo)簽:用VC實(shí)現(xiàn)PC機(jī)與永宏P(guān)LC的通訊具體分析
* 由于無法獲得聯(lián)系方式等原因,本網(wǎng)使用的文字及圖片的作品報(bào)酬未能及時(shí)支付,在此深表歉意,請《用VC實(shí)現(xiàn)PC機(jī)與永宏P(guān)LC的通訊具體分析》相關(guān)權(quán)利人與機(jī)電之家網(wǎng)取得聯(lián)系。
電子樣本

SN系列樣冊
:鞏經(jīng)理
:13915946763
:南京塞姆泵業(yè)有限公司
個(gè)人求購

宋磊 【求購】  氮化硅套管  2026-4-3
黃經(jīng)理 【求購】  LS母線槽  2026-4-3
陳先生 【求購】  施耐德塑殼...  2026-4-2
譚經(jīng)理 【求購】  工業(yè)溫度計(jì)  2026-4-2
焦經(jīng)理 【求購】  液壓馬達(dá)  2026-4-2
周先生 【求購】  36號白油  2026-4-2
王經(jīng)理 【求購】  萊克斯洛面...  2026-4-2
柯經(jīng)理 【求購】  西奧電梯  2026-4-2
VIP公司推薦