摘 要:主要介紹三菱FX系列PLC與上位機之間的通訊協(xié)議,并采用CSerial類來實現(xiàn)串行通信,本文給出了程序設(shè)計方法和部分源代碼。
引言
可編程控制器(PLC)是集計算機技術(shù)、自動控制技術(shù)、通信技術(shù)為一體的新型自動控制裝置。由于體積小、可靠性高以及組態(tài)靈">

欧美成人aaaaa免费视频_亚洲欧美激情小说另类_欧美激情一区二区三区视频_一级在线|欧洲

技術(shù)頻道

VC環(huán)境下三菱PLC與微機的串行通信

摘 要:主要介紹三菱FX系列PLC與上位機之間的通訊協(xié)議,并采用CSerial類來實現(xiàn)串行通信,本文給出了程序設(shè)計方法和部分源代碼。
引言
可編程控制器(PLC)是集計算機技術(shù)、自動控制技術(shù)、通信技術(shù)為一體的新型自動控制裝置。由于體積小、可靠性高以及組態(tài)靈活等優(yōu)點,PLC在工業(yè)控制領(lǐng)域得到了廣泛的應(yīng)用。將PC機與可編程控制器組合起來,充分利用PC機強大的人機接口功能、豐富的應(yīng)用軟件和低廉的價格來共同實現(xiàn)管理、控制一體化成為一個新的發(fā)展趨勢。本文重點介紹在Windows 2000環(huán)境下如何利用VC來實現(xiàn)PC機與三菱PLC之間的串行通訊。
1 三菱PLC與計算機之間通信協(xié)議
FX2系列PLC與計算機之間的通信采用RS-232標準,其傳輸速率固定為9600bps,奇偶校驗位采用偶校驗。數(shù)據(jù)格式如表1所示。數(shù)據(jù)以幀為單位發(fā)送和接收。一個多字符幀由圖1所示的五部分組成,其中和校驗值是將命令碼STX——ETX之間的字符的ASCII碼(十六進制數(shù))相加,取得所得和的最低二位數(shù)。STX和ETX分別表示該字符幀的起始標起和結(jié)束標志。


(1) 起始字元(STX):ASCII碼的起始字元STX對應(yīng)的16進制數(shù)位0x02。無論命令信息還是回應(yīng)信息,它們的起始字元均為STX,接收方以此來判知傳輸資料的開始。
(2) 命令號碼:為兩位16進制數(shù)。所謂命令號碼是指上位機要求下位機所執(zhí)行的動作類別,例如要求讀取或?qū)懭雴吸c狀態(tài)、寫入或讀取暫存器資料、強制設(shè)定、運行、停止等。在回應(yīng)信息中,下位機會將上位機接收到的命令號碼原原本本的隨同其它信息一同發(fā)送給上位機。
(3) 元件首地址:對應(yīng)要操作的元件的相應(yīng)的地址。如從D123單元中讀取數(shù)據(jù)時,要把它對應(yīng)的地址:0x10F6發(fā)送給PLC。
(4) 元件個數(shù):一次讀取位元件或字元件的數(shù)量。
(5) 結(jié)束字元(ETX):ASCII碼的結(jié)束字元ETX對應(yīng)的16進制數(shù)為0x03。無論命令信息還是回應(yīng)信息,它們的結(jié)束字元均為ETX,接收方以此來判知此次通訊已結(jié)束。
(6) 校驗碼(Checksum):校驗碼是將STX-ETX之間的ASCII字元的16進制數(shù)值以“LRC(Longitudinal Redundancy Check)”法計算出1個Byte長度(兩個16進制數(shù)值00-FFH)的校驗碼。當下位機接收到信息后,用同樣的方法計算出接收信息的校驗碼,如果兩個校驗碼相同,則說明傳送正確。
FX2系列與計算機之間的通信是以主機發(fā)出的初始命令,PLC對其做出響應(yīng)的方式進行通信的。共有0、1、7、8四種命令,上位機實現(xiàn)對PLC的讀寫和強行置位。通過ENQ、ACK和NAK,上位機協(xié)調(diào)與PLC的通信應(yīng)答。
2 編程口操作命令類型
串行通信是計算機與其他機器之間進行通信的一種常用方法,在Windows操作系統(tǒng)中提供了實現(xiàn)各種串行通信的API函數(shù)。通過SC-09編程電纜或FX-232-BD通訊模塊,可以將PC機和計算機串行通信口RS-232連接起來,可以實現(xiàn)PC機對PLC的RAM區(qū)數(shù)據(jù)進行讀、寫操作。根據(jù)PLC本身所具有的特性,計算機可對PLC進行以下4種類型的操作:
(1) 位元件或字元件狀態(tài)讀操作(CMD0);
(2) 位元件或字元件狀態(tài)寫操作(CMD1);
(3) 位元件強制ON操作(CMD7);
(4) 位元件強制OFF操作(CMD8)。
3 軟件編程
(1) 串行通信實現(xiàn)方法
在進行以上四種操作之前要對串行通信口進行必要的初始化。本人采用了一個專門針對串行通信的CSerial類,并在Open函數(shù)中進行了進一步的完善。它由MuMega Technologies公司提供的一個Visual C++類,我們只要理解CSerial類種的幾個成員函數(shù),就能很方便地實現(xiàn)串行通信了。以下是該類定義:
class CSerial
{
public:
CSerial();
~CSerial();
BOOL Open( int nPort , int nBaud,int nParity,int nByteSize,int nStopBits );
BOOL Close( void );
int ReadData( void *, int );
int SendData( const char *, int );
int ReadDataWaiting( void );
BOOL IsOpened( void ){ return( m_bOpened ); }
protected:
BOOL WriteCommByte( unsigned char );
HANDLE m_hIDComDev;
OVERLAPPED m_OverlappedRead, m_OverlappedWrite;
BOOL m_bOpened;
};
① Serial::Open這個成員函數(shù)打開通信端口。帶五個參數(shù),第一個是串口號,第二個參數(shù)是數(shù)據(jù)傳輸速率,第三個是數(shù)據(jù)效驗方式,第四個是數(shù)據(jù)位數(shù),第五個是數(shù)據(jù)停止位。
② Serial::Close函數(shù)關(guān)閉通信端口。
③ CSerial::SendData函數(shù)把數(shù)據(jù)從一個緩沖區(qū)寫到串行端口。第一個參數(shù)是緩沖區(qū)指針,其中包含要被發(fā)送的資料;第二個參數(shù)是發(fā)送的字節(jié)數(shù)。
④ CSerial::ReadData函數(shù)從斷口接收緩沖區(qū)讀入數(shù)據(jù)。第一個參數(shù)是緩沖區(qū)指針,資料將被放入該緩沖區(qū);第二個參數(shù)緩沖區(qū)的大小。

(2) 位元件或字元件狀態(tài)讀操作

操作對象元件:PLC內(nèi)部的X、Y、M、S、T、C、D元件;命令格式如表1;在發(fā)送完上述命令格式代碼后,就可以讀取PLC響應(yīng)信息了。響應(yīng)信息格式如圖2;


部分程序代碼:
BOOL CPlcComDlg::ReadPLC(char *Read, char *address, int bytes)
{
CSerial Serial;
char read_BUFFER;
if(Serial.Open(m_com, m_Buad, m_Parity, m_Byte, m_StopBites))
{
Serial.SendData(&ENQ_request,1);//發(fā)送聯(lián)絡(luò)訊號
Sleep(100);
Serial.ReadData(&read_BUFFER,1);//讀取PLC響應(yīng)訊號
if(read_BUFFER==ACK)
{
//初始化變量
//發(fā)送圖2命令格式代碼
ASCII(readdatasum_check,readdata_sum);
//將STX-ETX之間的字符相加,轉(zhuǎn)換成ASCII(十六進制),并取和的低二位數(shù)。
if(*readdatasum_CHECK==*readdatasum_check)//和校驗
{
//對讀出的數(shù)據(jù)進行處理,轉(zhuǎn)換成整型數(shù)
for(int j=0;j<bytes/2;j++)
{
for(i=j*2;i<j*2+4;i++)
Read[i]=(Read[i]>0x39)?(Read[i]-0x41+0xA):(Read [i]-0x30);
Read_value[j]=(((((Read [j*4+2]<<4)+Read [j*4+3]))+Read [j*4+0])<<4)+Read [j*4+1];
}
return TRUE;
}
else
return FALSE;
}
}
}
}
//將整數(shù)轉(zhuǎn)換成ASCII(十六進制),并取低二位,
void CPlcComDlg::ASCII(char *total_databytes, int read_bytes)
{
unsigned int uTmp;
uTmp=read_bytes & 0x000f;
total_databytes[1]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xA);
uTmp=(read_bytes>>4) & 0x000f;
total_databytes[0]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xA);
}

(3) 位元件或字元件狀態(tài)寫操作

操作對象元件:PLC內(nèi)部的X、Y、M、S、T、C、D元件;命令格式如圖3所示。




程序代碼(略)。

(4) 位元件強制ON操作

操作對象元件:PLC內(nèi)部的X、Y、M、S、T、C元件;命令格式如圖4所示。

部分程序代碼如下:
void CPlcComDlg::ForceOnOpreation(char *Address)
{
CSerial Serial;
char read_BUFFER;
CString strtemp;
if(Serial.Open(m_com,9600))
{
Serial.SendData(&ENQ_request,1);
Sleep(100);
Serial.ReadData(&read_BUFFER,1);
if(read_BUFFER==ACK)
{
//初始化變量
//發(fā)送圖4命令格式代碼
ASCII(Sum_Check,sum); //將STX-ETX之間的字符相加,轉(zhuǎn)換成ASCII(十六進制),并取和的低二位數(shù)
for(i=0;i<2;i++)
Serial.SendData(&Sum_Check[i],1);//和校驗
Sleep(100);
Serial.ReadData(&read_buffer,1);
if(read_buffer==ACK)
return TRUE;
else
return FALSE;
}
}
}

(5) 位元件強制OFF操作

操作對象元件:PLC內(nèi)部的X、Y、M、S、T、C元件;命令格式如圖5所示。

4 實時通訊控制界面

本程序能夠?qū)崿F(xiàn)遠程控制FX系列PLC的運行。能讀取位元件的當前狀態(tài),以及對它們置位和復(fù)位。能夠讀取字元件的值和往字元件寫值。并能自動連續(xù)讀取單個字元件的值。

圖6 通訊界面

5 結(jié)論

本程序?qū)崿F(xiàn)了上位機對三菱PLC的實時監(jiān)控,傳送數(shù)據(jù)準確,這種通信方法不僅成本低,而且簡單、穩(wěn)定、實用性強。
參考文獻
[1] 李現(xiàn)勇. Visual C++串口通信技術(shù)與工程實踐.人民郵電出版社,2002年5月

文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。

欧美成人aaaaa免费视频_亚洲欧美激情小说另类_欧美激情一区二区三区视频_一级在线|欧洲

      久久久另类综合| 亚洲一区国产精品| 欧美色精品在线视频| 久久精彩视频| 亚洲少妇自拍| 亚洲国产美国国产综合一区二区| 国产精品一二一区| 欧美精品97| 鲁大师成人一区二区三区| 欧美一区视频在线| 午夜欧美电影在线观看| 亚洲视频日本| 一道本一区二区| 亚洲精品视频啊美女在线直播| 伊人久久大香线蕉综合热线| 国产欧美日韩一区二区三区在线 | 国产精品爽黄69| 欧美日韩免费一区| 欧美黄色一区二区| 欧美xart系列在线观看| 久久精品首页| 久久福利毛片| 欧美在线影院| 久久久久久夜精品精品免费| 欧美一区深夜视频| 欧美专区日韩专区| 欧美一级淫片aaaaaaa视频| 午夜精品成人在线视频| 亚洲一区欧美二区| 午夜精品久久久久久久久| 亚洲性视频网站| 欧美怡红院视频| 久久看片网站| 欧美极品影院| 欧美日韩一级大片网址| 国产精品成人免费| 国产精品久久久久久一区二区三区 | 欧美午夜精品久久久久久久| 久久人人爽人人| 免费欧美视频| 欧美日韩在线影院| 国产欧美另类| 在线观看欧美视频| 一本大道久久a久久精二百| 亚洲一品av免费观看| 久久久久久久久蜜桃| 久久综合九色综合欧美就去吻| 欧美激情第10页| 国产精品乱码一区二三区小蝌蚪| 国产精品人人做人人爽 | 国产精品久久久久久久久果冻传媒| 欧美日韩理论| 国产精品你懂的在线| 狠狠久久亚洲欧美| 99视频一区| 欧美一区在线直播| 欧美激情视频一区二区三区在线播放| 欧美网站在线观看| 狠狠色综合色区| 在线视频欧美日韩| 久久偷窥视频| 国产欧美一区二区三区沐欲| 亚洲精品黄网在线观看| 午夜性色一区二区三区免费视频 | 有码中文亚洲精品| 亚洲一区在线播放| 欧美精品福利| 亚洲电影欧美电影有声小说| 亚洲欧美韩国| 欧美三级黄美女| 亚洲日本中文字幕区| 久久精品欧美日韩| 国产精品久久久久久亚洲毛片| 亚洲国产视频一区二区| 欧美一区在线看| 国产精品福利在线观看网址| 亚洲国产一区二区精品专区| 久久久国产精品一区| 国产精品美女主播| 一区二区三区日韩欧美精品| 免费成人黄色av| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲在线观看视频网站| 欧美涩涩网站| 一区二区欧美国产| 欧美日产国产成人免费图片| 亚洲精品一二| 欧美激情综合五月色丁香| 最新国产の精品合集bt伙计| 久久午夜精品| 一区在线播放| 久久露脸国产精品| 国产亚洲精品福利| 欧美一区二区三区在线播放| 国产精品网站在线播放| 香蕉成人啪国产精品视频综合网| 欧美日韩一区在线观看视频| 在线一区二区日韩| 欧美系列亚洲系列| 亚洲自拍三区| 国产精品老女人精品视频| 亚洲一区日韩| 国产精品自拍网站| 久久精品国产99国产精品澳门| 国产精品一区二区在线观看不卡 | 国产一区二区精品| 久久久综合网站| 亚洲国产精品一区二区www在线| 久久久五月婷婷| 在线观看福利一区| 久久久夜精品| 99精品视频免费观看| 欧美日韩一区综合| 亚洲欧美日韩国产另类专区| 国产精品久久久久三级| 久久激情久久| 一区二区av| 国产视频亚洲精品| 美女视频黄a大片欧美| 最近看过的日韩成人| 欧美视频官网| 美女亚洲精品| 亚洲性视频h| 在线欧美日韩国产| 欧美午夜a级限制福利片| 久久se精品一区精品二区| 亚洲激情视频| 国产精品一区二区三区免费观看| 美女黄毛**国产精品啪啪| av成人国产| 一区二区三区在线观看视频 | 欧美精品国产一区| 西西人体一区二区| 亚洲青色在线| 国内精品久久久久久久果冻传媒| 欧美激情成人在线视频| 欧美在线地址| 在线视频亚洲欧美| 亚洲电影下载| 国产一区二区看久久| 欧美性片在线观看| 欧美精品大片| 免费精品99久久国产综合精品| 亚洲一区在线免费| 一区二区三区蜜桃网| 亚洲黄色成人网| 韩国女主播一区| 国产亚洲精品久久久久动| 欧美日韩视频一区二区| 美女黄色成人网| 久久久综合视频| 久久成人人人人精品欧| 在线视频欧美一区| 最新日韩在线| 亚洲电影在线看| 韩国女主播一区二区三区| 国产欧美日韩在线播放| 国产精品theporn| 国产精品h在线观看| 欧美精品一区二区三区很污很色的 | 91久久中文| 亚洲人成毛片在线播放女女| 亚洲丰满在线| 亚洲国产精品久久人人爱蜜臀| 在线观看久久av| 亚洲国产精品一区制服丝袜| 在线观看成人一级片| 国产综合欧美| 伊人久久大香线| 亚洲国内欧美| 亚洲精品乱码久久久久久黑人| 亚洲国产精品一区二区www| 亚洲精品中文字幕女同| 亚洲精品一线二线三线无人区| 亚洲人体1000| 亚洲视频网站在线观看| 亚洲欧美资源在线| 久久亚洲一区| 欧美精品激情| 国产精品第三页| 国产有码在线一区二区视频| 狠狠综合久久| 99精品国产99久久久久久福利| 亚洲视频专区在线| 久久国内精品视频| 欧美成人免费大片| 国产精品久久久久久久7电影| 国产精品综合| 亚洲国产美女| 亚洲欧美激情视频在线观看一区二区三区 | 国产欧美日韩亚洲一区二区三区| 国产亚洲一区二区在线观看 | 欧美四级在线观看| 国产欧美精品一区二区色综合 | 欧美激情1区| 国产精品黄色在线观看| 精品动漫3d一区二区三区| 99国产麻豆精品| 久久久久欧美精品| 欧美日韩色婷婷|