熟女人妻水多爽中文字幕,国产精品鲁鲁鲁,隔壁的少妇2做爰韩国电影,亚洲最大中文字幕无码网站

技術頻道

娓娓工業
您現在的位置: 中國傳動網 > 技術頻道 > 應用方案 > VC環境下三菱PLC與微機的串行通信

VC環境下三菱PLC與微機的串行通信

時間:2018-01-10 10:52:21來源:網絡轉載

導語:?可編程控制器(PLC)是集計算機技術、自動控制技術、通信技術為一體的新型自動控制裝置。由于體積小、可靠性高以及組態靈活等優點,PLC在工業控制領域得到了廣泛的應用

0[align=center]引言

可編程控制器(PLC)是集計算機技術、自動控制技術、通信技術為一體的新型自動控制裝置。由于體積小、可靠性高以及組態靈活等優點,PLC在工業控制領域得到了廣泛的應用。將PC機與可編程控制器組合起來,充分利用PC機強大的人機接口功能、豐富的應用軟件和低廉的價格來共同實現管理、控制一體化成為一個新的發展趨勢。本文重點介紹在Windows2000環境下如何利用VC來實現PC機與三菱PLC之間的串行通訊。

1三菱PLC與計算機之間通信協議

FX2系列PLC與計算機之間的通信采用RS-232標準,其傳輸速率固定為9600bps,奇偶校驗位采用偶校驗。數據格式如表1所示。數據以幀為單位發送和接收。一個多字符幀由圖1所示的五部分組成,其中和校驗值是將命令碼STX——ETX之間的字符的ASCII碼(十六進制數)相加,取得所得和的最低二位數。STX和ETX分別表示該字符幀的起始標起和結束標志。

(1)起始字元(STX):ASCII碼的起始字元STX對應的16進制數位0x02。無論命令信息還是回應信息,它們的起始字元均為STX,接收方以此來判知傳輸資料的開始。

(2)命令號碼:為兩位16進制數。所謂命令號碼是指上位機要求下位機所執行的動作類別,例如要求讀取或寫入單點狀態、寫入或讀取暫存器資料、強制設定、運行、停止等。在回應信息中,下位機會將上位機接收到的命令號碼原原本本的隨同其它信息一同發送給上位機。

(3)元件首地址:對應要操作的元件的相應的地址。如從D123單元中讀取數據時,要把它對應的地址:0x10F6發送給PLC。

(4)元件個數:一次讀取位元件或字元件的數量。

(5)結束字元(ETX):ASCII碼的結束字元ETX對應的16進制數為0x03。無論命令信息還是回應信息,它們的結束字元均為ETX,接收方以此來判知此次通訊已結束。

(6)校驗碼(Checksum):校驗碼是將STX-ETX之間的ASCII字元的16進制數值以“LRC(LongitudinalRedundancyCheck)”法計算出1個Byte長度(兩個16進制數值00-FFH)的校驗碼。當下位機接收到信息后,用同樣的方法計算出接收信息的校驗碼,如果兩個校驗碼相同,則說明傳送正確。

FX2系列與計算機之間的通信是以主機發出的初始命令,PLC對其做出響應的方式進行通信的。共有0、1、7、8四種命令,上位機實現對PLC的讀寫和強行置位。通過ENQ、ACK和NAK,上位機協調與PLC的通信應答。

2編程口操作命令類型

串行通信是計算機與其他機器之間進行通信的一種常用方法,在Windows操作系統中提供了實現各種串行通信的API函數。通過SC-09編程電纜或FX-232-BD通訊模塊,可以將PC機和計算機串行通信口RS-232連接起來,可以實現PC機對PLC的RAM區數據進行讀、寫操作。根據PLC本身所具有的特性,計算機可對PLC進行以下4種類型的操作:

(1)位元件或字元件狀態讀操作(CMD0);

(2)位元件或字元件狀態寫操作(CMD1);

(3)位元件強制ON操作(CMD7);

(4)位元件強制OFF操作(CMD8)。

3軟件編程

(1)串行通信實現方法

在進行以上四種操作之前要對串行通信口進行必要的初始化。本人采用了一個專門針對串行通信的CSerial類,并在Open函數中進行了進一步的完善。它由MuMegaTechnologies公司提供的一個VisualC++類,我們只要理解CSerial類種的幾個成員函數,就能很方便地實現串行通信了。以下是該類定義:

classCSerial

{

public:

CSerial();

~CSerial();

BOOLOpen(intnPort,intnBaud,intnParity,intnByteSize,intnStopBits);

BOOLClose(void);

intReadData(void*,int);

intSendData(constchar*,int);

intReadDataWaiting(void);

BOOLIsOpened(void){return(m_bOpened);}

protected:

BOOLWriteCommByte(unsignedchar);

HANDLEm_hIDComDev;

OVERLAPPEDm_OverlappedRead,m_OverlappedWrite;

BOOLm_bOpened;

};

①Serial::Open這個成員函數打開通信端口。帶五個參數,第一個是串口號,第二個參數是數據傳輸速率,第三個是數據效驗方式,第四個是數據位數,第五個是數據停止位。

②Serial::Close函數關閉通信端口。

③CSerial::SendData函數把數據從一個緩沖區寫到串行端口。第一個參數是緩沖區指針,其中包含要被發送的資料;第二個參數是發送的字節數。

④CSerial::ReadData函數從斷口接收緩沖區讀入數據。第一個參數是緩沖區指針,資料將被放入該緩沖區;第二個參數緩沖區的大小。

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

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

部分程序代碼:

BOOLCPlcComDlg::ReadPLC(char*Read,char*address,intbytes)

{

CSerialSerial;

charread_BUFFER;

if(Serial.Open(m_com,m_Buad,m_Parity,m_Byte,m_StopBites))

{

Serial.SendData(&ENQ_request,1);//發送聯絡訊號

Sleep(100);

Serial.ReadData(&read_BUFFER,1);//讀取PLC響應訊號

if(read_BUFFER==ACK)

{

//初始化變量

//發送圖2命令格式代碼

ASCII(readdatasum_check,readdata_sum);

//將STX-ETX之間的字符相加,轉換成ASCII(十六進制),并取和的低二位數。

if(*readdatasum_CHECK==*readdatasum_check)//和校驗

{

//對讀出的數據進行處理,轉換成整型數

for(intj=0;j{

for(i=j*2;iRead[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];

}

returnTRUE;

}

else

returnFALSE;

}

}

}

}

//將整數轉換成ASCII(十六進制),并取低二位,

voidCPlcComDlg::ASCII(char*total_databytes,intread_bytes)

{

unsignedintuTmp;

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)位元件或字元件狀態寫操作

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

程序代碼(略)。

(4)位元件強制ON操作

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

部分程序代碼如下:

voidCPlcComDlg::ForceOnOpreation(char*Address)

{

CSerialSerial;

charread_BUFFER;

CStringstrtemp;

if(Serial.Open(m_com,9600))

{

Serial.SendData(&ENQ_request,1);

Sleep(100);

Serial.ReadData(&read_BUFFER,1);

if(read_BUFFER==ACK)

{

//初始化變量

//發送圖4命令格式代碼

ASCII(Sum_Check,sum);//將STX-ETX之間的字符相加,轉換成ASCII(十六進制),并取和的低二位數

for(i=0;i<2;i++)

Serial.SendData(&Sum_Check[i],1);//和校驗

Sleep(100);

Serial.ReadData(&read_buffer,1);

if(read_buffer==ACK)

returnTRUE;

else

returnFALSE;

}

}

}

(5)位元件強制OFF操作

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

4實時通訊控制界面

本程序能夠實現遠程控制FX系列PLC的運行。能讀取位元件的當前狀態,以及對它們置位和復位。能夠讀取字元件的值和往字元件寫值。并能自動連續讀取單個字元件的值。

圖6通訊界面

5結論

本程序實現了上位機對三菱PLC的實時監控,傳送數據準確,這種通信方法不僅成本低,而且簡單、穩定、實用性強。

標簽:

點贊

分享到:

上一篇:單片機與PLC在工業應用中異同...

下一篇:變頻器作用及工作原理

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網站簡介|會員服務|聯系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業自動化與智能制造的全媒體“互聯網+”創新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業執照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號

主站蜘蛛池模板: 安溪县| 闵行区| 旬阳县| 湘阴县| 高要市| 枞阳县| 克什克腾旗| 铜鼓县| 东光县| 噶尔县| 柏乡县| 湖南省| 禄丰县| 霸州市| 顺昌县| 新乡市| 当涂县| 社会| 和林格尔县| 芜湖县| 麟游县| 浏阳市| 特克斯县| 贵州省| 无锡市| 葵青区| 鞍山市| 卢氏县| 油尖旺区| 昌图县| 湘潭县| 伊川县| 永兴县| 萍乡市| 北宁市| 奇台县| 木里| 汝阳县| 温泉县| 龙游县| 新乐市|