SNAP7 C++ 通讯
?
靜態(tài)調(diào)用的dll的一個(gè)實(shí)例
2017年11月17日 09:49:18?凈無(wú)邪?閱讀數(shù):334
版權(quán)聲明:本文為博主原創(chuàng)文章,歡迎各位朋友轉(zhuǎn)載。轉(zhuǎn)載時(shí),保留鏈接地址! https://blog.csdn.net/naibozhuan3744/article/details/78557761
本實(shí)例主要分為三部分。第一部分:vs2013的配置,第二部分:snap7的dll常用函數(shù)何功能的介紹。第三部分:調(diào)用snap7的是一個(gè)實(shí)例應(yīng)用。
?
一、vs2013配置
1.1 將文件snap7.h,snap7.cpp,snap7.dll,snap7.lib全部加入創(chuàng)建工程的目錄下,其中將snap7.dll放入debug目錄下。
?
?
?
1.2將snap7的dll加入新建的工程
?
1.3在主對(duì)話框開頭,加入pragma comment (lib,”snap7.lib”);
?
?
二、snap7的dll常用函數(shù)功能介紹
2.1ConnectTo(const?char?*RemAddress,intRack,?int?Slot);
//通過(guò)PLC的IP地址*RemAddress建立連接。
// *RemAddress PLC的IP地址,
// Rack s7200SMART PLC的齒數(shù),一般為0
// Slot s7200SMART PLC的槽數(shù),一般為1
2.2Disconnect();
//斷開PC與PLC的連接
2.3DBRead(intDBNumber,?int?Start,?int?Size,?void?*pUsrData);
//讀V區(qū)的Byte值
//DBNumber讀V區(qū)識(shí)別號(hào)碼,一般為1
//Start讀PLC的起始地址
//Size讀PLC的字節(jié)個(gè)數(shù)
//*pUsrData數(shù)據(jù)緩沖區(qū),函數(shù)讀到的數(shù)據(jù)存在這個(gè)緩沖區(qū)內(nèi)
2.4DBWrite(intDBNumber,?int?Start,?int?Size,?void?*pUsrData);????//寫V區(qū)的Byte值
2.5MBRead(int?Start,?int?Size,?void*pUsrData);????????????????//讀M區(qū)的Byte值
2.6MBWrite(int?Start,?int?Size,?void*pUsrData);???????????????//寫M區(qū)的Byte值
2.7EBRead(int?Start,?int?Size,?void*pUsrData);????????????????//讀O區(qū)的Byte值
2.8EBWrite(int?Start,?int?Size,?void?*pUsrData);???????????????//寫O區(qū)的Byte值
2.9ABRead(int?Start,?int?Size,?void*pUsrData);????????????????//讀I區(qū)的Byte值
2.10ABWrite(int?Start,?int?Size,?void*pUsrData);??????????????//寫I區(qū)的Byte值
2.11TMRead(int?Start,?int?Amount,void?*pUsrData);?????????????//讀T區(qū)的Byte值
2.12TMWrite(int?Start,?int?Amount,void?*pUsrData);???????????????//寫T區(qū)的Byte值
2.13CTRead(int?Start,?int?Amount,void?*pUsrData);?????????????//讀C區(qū)的Byte值
2.14CTWrite(int?Start,?int?Amount,void?*pUsrData);???????????????//寫C區(qū)的Byte值
2.15DReadW(intDBNumber,?int?Start,?int?Size,?WORD?*pUsrData);????//讀V區(qū)的Word值
2.16DReadDW(intDBNumber,?int?Start,?int?Size,?DWORD?*pUsrData);??//讀V區(qū)的DWord值
2.17DWriteW(intDBNumber,?int?Start,?int?Size,?WORD?*pUsrData);??????//寫V區(qū)的Word值
2.18DWriteDW(intDBNumber,?int?Start,?int?Size,?DWORD?*pUsrData);?//讀V區(qū)的DWord值
2.19ReadBit(int?Area,?intByteAddr,?int?BitNo,?BOOL?&BitValue);??????//函數(shù)功能:讀PLC某個(gè)區(qū)域的值
//Area表示內(nèi)存區(qū)。取值0x84:D區(qū)? 0x83:M區(qū)? 0x82:O區(qū)? 0x81:I區(qū)? 0x1C:C區(qū)? 0x1D:T區(qū)
//ByteAddr表示起始字節(jié)地址
????? //BitNo表示起始字節(jié)中的第BiteNo位(比如:v1.2表示v區(qū)起始地址1的第2位)
//BitValue表示要設(shè)置的值,只能為0或者1
?
?
2.20ReadVBit(intByteAddr,?int?BitNo,?BOOL?&BitValue);???????????//函數(shù)功能:讀PLC的V區(qū)域值??
2.21WriteBit(int?Area,?intByteAddr,?int?BitNo,?BOOL?BitValue);??????//函數(shù)功能:讀PLC某個(gè)區(qū)域的值
//Area表示內(nèi)存區(qū)。取值0x84:D區(qū)? 0x83:M區(qū)? 0x82:O區(qū)? 0x81:I區(qū)? 0x1C:C區(qū)? 0x1D:T區(qū)
//ByteAddr表示起始字節(jié)地址
????? //BitNo表示起始字節(jié)中的第BiteNo位(比如:v1.2表示v區(qū)起始地址1的第2位)
//BitValue表示要設(shè)置的值,只能為0或者1
2.22WriteVBit(intByteAddr,?int?BitNo,?BOOL?BitValue);???????????//函數(shù)功能:寫PLC的V區(qū)域值
2.23SetBit(intAddrType,?int?ByteAddr,?int?BitNo);?????????????//函數(shù)功能:置位PLC某個(gè)位的值為1? AddrType取值:0x84:D區(qū)? 0x83:M區(qū)? 0x82:O區(qū)? 0x81:I區(qū)? 0x1C : C區(qū)? 0x1D:T區(qū)
2.24SetVBit(intByteAddr,?int?BitNo);???????????????????????//函數(shù)功能:置PLC的V區(qū)域某個(gè)位的值為1
2.25ResetBit(intAddrType,?int?ByteAddr,?int?BitNo);?????????? ???//函數(shù)功能:置位PLC某個(gè)位的值為0 AddrType取值:0x84:D區(qū)? 0x83:M區(qū)? 0x82:O區(qū)? 0x81:I區(qū)? 0x1C : C區(qū)? 0x1D:T區(qū)
2.26ResetVBit(intByteAddr,?int?BitNo);????????????????????????//函數(shù)功能:置位PLC的V區(qū)域某個(gè)位的值為0
2.27ReadArea(int?Area,?intDBNumber,?int?Start,?int?Amount,?int?WordLen,?void?*pUsrData);
//讀PLC某個(gè)區(qū)域的值
//Area表示內(nèi)存區(qū)。取值0x84:V區(qū)? 0x83:M區(qū)? 0x82:O區(qū)? 0x81:I區(qū)? 0x1C:C區(qū)? 0x1D:T區(qū)
?
//DBNumber表示區(qū)域號(hào),一般為1
//Start表示起始地址。當(dāng)函數(shù)功能為讀bit時(shí),int addr =Start/8; int bit = Start%8;此時(shí)表示第addr地址的第Bit位。如Start = 8;則表示第1號(hào)地址的第0位,即addr.Bit(1.0);
//Amount表示要讀取的數(shù)據(jù)長(zhǎng)度,當(dāng)函數(shù)類型為讀bit時(shí),只能為1
//WordLen決定函數(shù)的功能,函數(shù)功能有讀位,字節(jié),字,雙字。取值:?0x1:Bit? 0x2:Byte? 0x4:Word? 0x6:DW? 0x8 : Real?0x1c : C區(qū)(16Bit)? 0x1D:T區(qū)(16Bit)
注意:讀Word和DWord功能有問(wèn)題,高位字節(jié)在前,低位字節(jié)在后(跟我們的程序反過(guò)來(lái))
//*pUsrData表示數(shù)據(jù)緩沖區(qū),讀取的數(shù)據(jù)存入該緩沖區(qū)
2.28WriteArea(int?Area,?intDBNumber,?int?Start,?int?Amount,?int?WordLen,?void?*pUsrData);
//寫PLC某個(gè)區(qū)域的值
//Area表示內(nèi)存區(qū)。取值0x84:V區(qū)? 0x83:M區(qū)? 0x82:O區(qū)? 0x81:I區(qū)? 0x1C:C區(qū)? 0x1D:T區(qū)
?
//DBNumber表示區(qū)域號(hào),一般為1
// Start表示起始地址。當(dāng)函數(shù)功能為寫bit時(shí),int addr =Start/8; int bit = Start%8;此時(shí)表示第addr地址的第Bit位。如Start = 8;則表示第1號(hào)地址的第0位,即addr.Bit(1.0);
//Amount表示要寫的數(shù)據(jù)長(zhǎng)度,當(dāng)函數(shù)類型為寫bit時(shí),只能為1
// WordLen決定函數(shù)的功能,函數(shù)功能有寫位,字節(jié),字,雙字。取值:?0x1:Bit? 0x2:Byte? 0x4:Word? 0x6:DW? 0x8 : Real?0x1c : C區(qū)(16Bit)? 0x1D:T區(qū)(16Bit)
注意:讀Word和DWord功能有問(wèn)題,高位字節(jié)在前,低位字節(jié)在后(跟我們的程序反過(guò)來(lái))
//*pUsrData表示數(shù)據(jù)緩沖區(qū),寫入PLC的數(shù)據(jù)存入該緩沖區(qū)
?
三、調(diào)用snap7的是一個(gè)實(shí)例
//創(chuàng)建一個(gè)指向TS7Client類的指針
???TS7Client* client =?new?TS7Client;??
???//連接PLC
?? client->ConnectTo("192.168.22.198", 0, 1);?
???//創(chuàng)建數(shù)據(jù)接收緩沖區(qū)
???BYTE?buff[10] = { 0 };??
???//讀V區(qū)0地址的1位數(shù)據(jù)
?? client->DBRead(1,0, 1, buff);
???//斷開與PLC連接
client->Disconnect();
總結(jié)
以上是生活随笔為你收集整理的SNAP7 C++ 通讯的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 1702: [Usaco2007 Mar
- 下一篇: 【机器视觉学习笔记】最近邻插值实现图片任