静态调用的dll的一个实例(PLC snap7)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/naibozhuan3744/article/details/78557761

本实例主要分为三部分。第一部分:vs2013的配置,第二部分:snap7的dll常用函数何功能的介绍。第三部分:调用snap7的是一个实例应用。

 

一、vs2013配置

1.1 将文件snap7.h,snap7.cpp,snap7.dll,snap7.lib全部加入创建工程的目录下,其中将snap7.dll放入debug目录下。

 

 

 

1.2将snap7的dll加入新建的工程

 

1.3在主对话框开头,加入pragma comment (lib,”snap7.lib”);

 

 

二、snap7的dll常用函数功能介绍

2.1ConnectTo(const char *RemAddress,intRack, int Slot);

//通过PLCIP地址*RemAddress建立连接。

// *RemAddress PLCIP地址,

// Rack s7200SMART PLC的齿数,一般为0

// Slot s7200SMART PLC的槽数,一般为1

2.2Disconnect();

//断开PCPLC的连接

2.3DBRead(intDBNumber, int Start, int Size, void *pUsrData);

//V区的Byte

//DBNumberV区识别号码,一般为1

//StartPLC的起始地址

//SizePLC的字节个数

//*pUsrData数据缓冲区,函数读到的数据存在这个缓冲区内

2.4DBWrite(intDBNumber, int Start, int Size, void *pUsrData);    //V区的Byte

2.5MBRead(int Start, int Size, void*pUsrData);                //M区的Byte

2.6MBWrite(int Start, int Size, void*pUsrData);               //M区的Byte

2.7EBRead(int Start, int Size, void*pUsrData);                //O区的Byte

2.8EBWrite(int Start, int Size, void *pUsrData);               //O区的Byte

2.9ABRead(int Start, int Size, void*pUsrData);                //I区的Byte

2.10ABWrite(int Start, int Size, void*pUsrData);              //I区的Byte

2.11TMRead(int Start, int Amount,void *pUsrData);             //T区的Byte

2.12TMWrite(int Start, int Amount,void *pUsrData);               //T区的Byte

2.13CTRead(int Start, int Amount,void *pUsrData);             //C区的Byte

2.14CTWrite(int Start, int Amount,void *pUsrData);               //C区的Byte

2.15DReadW(intDBNumber, int Start, int Size, WORD *pUsrData);    //V区的Word

2.16DReadDW(intDBNumber, int Start, int Size, DWORD *pUsrData);  //V区的DWord

2.17DWriteW(intDBNumber, int Start, int Size, WORD *pUsrData);      //V区的Word

2.18DWriteDW(intDBNumber, int Start, int Size, DWORD *pUsrData); //V区的DWord

2.19ReadBit(int Area, intByteAddr, int BitNo, BOOL &BitValue);      //函数功能:读PLC某个区域的值

//Area表示内存区。取值0x84:D  0x83M  0x82O  0x81I  0x1C:C  0x1DT

//ByteAddr表示起始字节地址

      //BitNo表示起始字节中的第BiteNo位(比如:v1.2表示v区起始地址1的第2位)

//BitValue表示要设置的值,只能为0或者1
 

 

2.20ReadVBit(intByteAddr, int BitNo, BOOL &BitValue);           //函数功能:读PLCV区域值  

2.21WriteBit(int Area, intByteAddr, int BitNo, BOOL BitValue);      //函数功能:读PLC某个区域的值

//Area表示内存区。取值0x84:D  0x83M  0x82O  0x81I  0x1C:C  0x1DT

//ByteAddr表示起始字节地址

      //BitNo表示起始字节中的第BiteNo位(比如:v1.2表示v区起始地址1的第2位)

//BitValue表示要设置的值,只能为0或者1

2.22WriteVBit(intByteAddr, int BitNo, BOOL BitValue);           //函数功能:写PLCV区域值

2.23SetBit(intAddrType, int ByteAddr, int BitNo);             //函数功能:置位PLC某个位的值为1  AddrType取值:0x84:D  0x83M  0x82O  0x81I  0x1C : C  0x1DT

2.24SetVBit(intByteAddr, int BitNo);                       //函数功能:置PLCV区域某个位的值为1

2.25ResetBit(intAddrType, int ByteAddr, int BitNo);              //函数功能:置位PLC某个位的值为0 AddrType取值:0x84:D  0x83M  0x82O  0x81I  0x1C : C  0x1DT

2.26ResetVBit(intByteAddr, int BitNo);                        //函数功能:置位PLCV区域某个位的值为0

2.27ReadArea(int Area, intDBNumber, int Start, int Amount, int WordLen, void *pUsrData);

//PLC某个区域的值

//Area表示内存区。取值0x84:V  0x83M  0x82O  0x81I  0x1C:C  0x1DT

 

//DBNumber表示区域号,一般为1

//Start表示起始地址。当函数功能为读bit时,int addr =Start/8; int bit = Start%8;此时表示第addr地址的第Bit位。如Start = 8;则表示第1号地址的第0位,即addr.Bit(1.0)

//Amount表示要读取的数据长度,当函数类型为读bit时,只能为1

//WordLen决定函数的功能,函数功能有读位,字节,字,双字。取值: 0x1Bit  0x2Byte  0x4Word  0x6:DW  0x8 : Real 0x1c : C(16Bit)  0x1DT(16Bit)

注意:读WordDWord功能有问题,高位字节在前,低位字节在后(跟我们的程序反过来)

//*pUsrData表示数据缓冲区,读取的数据存入该缓冲区

2.28WriteArea(int Area, intDBNumber, int Start, int Amount, int WordLen, void *pUsrData);

//PLC某个区域的值

//Area表示内存区。取值0x84:V  0x83M  0x82O  0x81I  0x1C:C  0x1DT

 

//DBNumber表示区域号,一般为1

// Start表示起始地址。当函数功能为写bit时,int addr =Start/8; int bit = Start%8;此时表示第addr地址的第Bit位。如Start = 8;则表示第1号地址的第0位,即addr.Bit(1.0)

//Amount表示要写的数据长度,当函数类型为写bit时,只能为1

// WordLen决定函数的功能,函数功能有写位,字节,字,双字。取值: 0x1Bit  0x2Byte  0x4Word  0x6:DW  0x8 : Real 0x1c : C(16Bit)  0x1DT(16Bit)

注意:读WordDWord功能有问题,高位字节在前,低位字节在后(跟我们的程序反过来)

//*pUsrData表示数据缓冲区,写入PLC的数据存入该缓冲区

 

三、调用snap7的是一个实例

//创建一个指向TS7Client类的指针

   TS7Client* client = new TS7Client;  

   //连接PLC

   client->ConnectTo("192.168.22.198", 0, 1); 

   //创建数据接收缓冲区

   BYTE buff[10] = { 0 };  

   //V0地址的1位数据

   client->DBRead(1,0, 1, buff);

   //断开与PLC连接

client->Disconnect();

展开阅读全文

没有更多推荐了,返回首页