SNAP7 C++ 通讯

SNAP7 C++ 通讯 静态调用的dll的一个实例2017年11月17日09:49:18 净无邪 阅读数:334版权声明:本文为博主原创文章,欢迎各位朋友转载。转载时,保留链接地址!https://blog.csdn.net/naibozhuan3744/article/details/78557761本实例主要分为三部分。第一部分:vs2013的配置,第二部分:snap7的dll常用函数何功能的介…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

 

静态调用的dll的一个实例

2017年11月17日 09:49:18 净无邪 阅读数:334

版权声明:本文为博主原创文章,欢迎各位朋友转载。转载时,保留链接地址! 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目录下。

 

 

 SNAP7 C++ 通讯

SNAP7 C++ 通讯

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

SNAP7 C++ 通讯

 

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

 

 SNAP7 C++ 通讯

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

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

//通过PLC的IP地址*RemAddress建立连接。

// *RemAddress PLC的IP地址,

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

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

2.2Disconnect();

//断开PC与PLC的连接

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

//读V区的Byte值

//DBNumber读V区识别号码,一般为1

//Start读PLC的起始地址

//Size读PLC的字节个数

//*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区  0x83:M区  0x82:O区  0x81:I区  0x1C:C区  0x1D:T区

//ByteAddr表示起始字节地址

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

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

 

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

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

//Area表示内存区。取值0x84:D区  0x83:M区  0x82:O区  0x81:I区  0x1C:C区  0x1D:T区

//ByteAddr表示起始字节地址

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

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

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

2.23SetBit(intAddrType, int ByteAddr, int BitNo);             //函数功能:置位PLC某个位的值为1  AddrType取值:0x84:D区  0x83:M区  0x82:O区  0x81:I区  0x1C : C区  0x1D:T区

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

2.25ResetBit(intAddrType, int ByteAddr, int BitNo);              //函数功能:置位PLC某个位的值为0 AddrType取值:0x84:D区  0x83:M区  0x82:O区  0x81:I区  0x1C : C区  0x1D:T区

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

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

//读PLC某个区域的值

//Area表示内存区。取值0x84:V区  0x83:M区  0x82:O区  0x81:I区  0x1C:C区  0x1D:T区

 

//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决定函数的功能,函数功能有读位,字节,字,双字。取值: 0x1:Bit  0x2:Byte  0x4:Word  0x6:DW  0x8 : Real 0x1c : C区(16Bit)  0x1D:T区(16Bit)

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

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

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

//写PLC某个区域的值

//Area表示内存区。取值0x84:V区  0x83:M区  0x82:O区  0x81:I区  0x1C:C区  0x1D:T区

 

//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决定函数的功能,函数功能有写位,字节,字,双字。取值: 0x1:Bit  0x2:Byte  0x4:Word  0x6:DW  0x8 : Real 0x1c : C区(16Bit)  0x1D:T区(16Bit)

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

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

 

三、调用snap7的是一个实例

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

   TS7Client* client = new TS7Client;  

   //连接PLC

   client->ConnectTo(“192.168.22.198”, 0, 1); 

   //创建数据接收缓冲区

   BYTE buff[10] = { 0 };  

   //读V区0地址的1位数据

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

   //断开与PLC连接

client->Disconnect();

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234279.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 全国计算机等级考试二级教程2019年版——Python语言程序设计参考答案[通俗易懂]

    全国计算机等级考试二级教程2019年版——Python语言程序设计参考答案

    2022年2月8日
    79
  • java输出数组的方法_java怎样输出数组中的所有元素

    java输出数组的方法_java怎样输出数组中的所有元素文章目录数组的输出的三种方式一维数组:1.传统的for循环方式2.foreach循环3.利用Array类中的toString方法二维数组:1.传统的for循环方式2.foreach循环3.利用Array类中的toString方法数组的输出的三种方式一维数组:定义一个数组int[]array={1,2,3,4,5};1.传统的for循环方式for(inti=0;i<array.length;i++){System.out.println(array

    2022年10月11日
    1
  • tkMapper的使用[通俗易懂]

    tkMapper的使用[通俗易懂]Maven引入<dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.1.5</version></dependency>…

    2022年10月7日
    3
  • 电子灌封胶是什么材料_灌封胶

    电子灌封胶是什么材料_灌封胶关注+星标公众号,不错过精彩内容来源|芯片之家一、什么是灌封?灌封(灌胶)就是将聚氨酯灌封胶、有机硅灌封胶、环氧树脂灌封胶用设备或手工方式灌入装有电子元件、线路的器件内,在常温或加热条…

    2022年10月2日
    4
  • Activity Result API详解,是时候放弃startActivityForResult了「建议收藏」

    Activity Result API详解,是时候放弃startActivityForResult了「建议收藏」如果你将项目中的appcompat库升级到1.3.0或更高的版本,你会发现startActivityForResult()方法已经被废弃了。这个方法相信所有做过Android的开发者都用过,它主要是用于在两个Activity之间交换数据的。那么为什么这个如此常用的方法会被废弃呢?官方给出的说法是,现在更加建议使用ActivityResultAPI来实现在两个Activity之间交换数据的功能。我个人的观点是,startActivityForResult()方法并没有什么致命的问题,只是

    2022年7月11日
    18
  • C++字符串加密_c++字符串连接函数

    C++字符串加密_c++字符串连接函数有的时候,使用C++进行爬虫操作时,会涉及到一些请求参数的加密,例如对utf8的中文进行加密,我们用js对如下字符串进行加密的结果如下:加密前字符串:keras-lx-还魂草.z01URL加密后:keras-lx-%E8%BF%98%E9%AD%82%E8%8D%89.z01使用网页在线加密工具和使用js加密效果是一样的自己用C++写的URL加密代码如下://URL编码.cpp:…

    2025年7月7日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号