VC++:基于libnodave库的S7协议解析(S7协议栈)

libnodave是一个用于通信和控制Siemens S7系列PLC(可编程逻辑控制器)的开源库。它提供了一个简单易用的接口,使开发人员可以通过C语言与Siemens S7 PLC进行通信。

libnodave发码收码结构不清晰,本文在其基础上,对S7协议栈进线解析,直接给不ByteBuff协议栈,源码清晰结果简单。话不多说直接上代码:

1. S7TCP.h

#pragma once
#ifndef S7TCP
#define S7TCP

#define MAXSTRSIZE  1024    
#define AREA_M      0x83    //m区
#define AREA_DB     0x84    //db区
#define AREA_I      0x85    //i区

class CS7TCP
{
private:
    SOCKET m_socket;
    unsigned char m_SendBuffer[MAXSTRSIZE];
    unsigned char m_RecvBuffer[MAXSTRSIZE];
public:
    int m_readlen;

    unsigned char *m_pWrite;
public:
    CS7TCP(SOCKET socket){
        m_socket = socket;
    }

    BOOL Connect200SMART();
    BOOL ConnectCP243();
    BOOL ConnectCP343();
    BOOL Connect1200();

    BOOL ReadBytes(int area, int db, int start, int len, unsigned char* buffer);
    BOOL WriteBytes(int area, int db, int start, int len, unsigned char* buffer);
    BOOL WriteBits(int area, int db, int start, int len, unsigned char* buffer);

    short GetShort(unsigned char* str);
    void PutShort(unsigned char* str, short i);
private:
    void Send(unsigned char* str, int len);
    int Recv(unsigned char* str);
};

#endif

2. S7TCP.cpp

#include "stdafx.h"
#include "S7TCP.h"

//b200SMART,cp243,cp343长度都是22
unsigned char b200SMART[]={
    0x03,0x00,0x00,0x16,
    0x11,0xE0,0x00,
    0x00,0x00,0x01,0x00,
    0xC1,0x02,0x00,0x00,
    0xC2,0x02,0x02,0x00, 
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值