Modbus封装库(Com,tcp,udp一应俱全)

news/2024/5/18 15:59:42 标签: tcp/ip, udp

自行封装在用的Modbus通迅库,集成了com,tcp,udp, 做个笔记吧, 以下头文件,

#pragma once
#include <functional>
#include <vector>
#include <string>
#include <memory>
#ifdef LIBMODBUS_EXPORTS
#define LIBMODBUS_EXPORT_API __declspec(dllexport)
#else
#define LIBMODBUS_EXPORT_API __declspec(dllimport)
#endif
class LIBMODBUS_EXPORT_API RTUModbus {

public:
    //devflag is 1 as default value
    RTUModbus();
    ~RTUModbus();
public:
    std::string getAddrPLC();
    uint16_t getDevflag();
    int getPort();
    void sendBit(uint16_t addrstart, bool mvalue);
    bool readBit(uint16_t addrstart, uint8_t* destBit);
    void sendDataRegister(uint16_t addrstart, uint16_t mvalue);
    void sendDataRegisters(uint16_t addrstart, uint16_t* mvalue);
    void sendDataRegisters(uint16_t addrstart,const int len, uint16_t* mvalue);

    bool readDataRegisters(uint16_t addrstart, uint16_t* destBit);

    bool readDataRegisters(uint16_t addrstart,const int len, uint16_t* destBit);
    bool isConnected();
    void setPLCParam(const int mport, std::string ipra);
    void disconnect();
    bool connectPLCbyNet(const int port, const int devflag, std::string addr);
    bool connectPLC(const int devflag);
    //mport :com1  ,flag:0 Rs232,1:RS485
    bool connectPLCbySerial(const char * mport, const int flag, const int baud = 115200,
        char parity = 'N', const int data_bit = 8, const int stopbit = 1);
    bool connectTo_UDP(std::string strIP, const int mport);

private:
    std::shared_ptr<void> _modClient;
};

应用标例:

RTUModbus* mBus=new RTUModbus();

网口连接:

//tcp:

bool res=mBus->connectPLCbyNet(9000,1,"192.168.3.58");

//udp

bool res=connectTo_UDP("192.168.3.58",9000);

串口:

bool res=connectPLCbySerial("com1",1,115200);

读写方式,三者(串口、网口tcp,udp)都是共用的

下载地址:

LibModbus库(udp,tcp.com)一应俱全

https://download.csdn.net/download/sukeman/88504938

平台;VC++2015 ++


http://www.niftyadmin.cn/n/5157531.html

相关文章

Single Image Haze Removal Using Dark Channel Prior(暗通道先验)

去雾算法都会依赖于很强的先验以及假设&#xff0c;并结合相应的物理模型&#xff0c;完成去雾过程。本文作者何凯明及其团队通过大量的无雾图像和有雾图像&#xff0c;归纳总结出无雾图像在其对应的暗通道图像上具有极低的强度值&#xff08;趋近于0&#xff09;&#xff0c;并…

人工智能基础_机器学习020_归一化实战_天池工业蒸汽量项目归一化实战过程---人工智能工作笔记0060

标题&#xff1a;天池工业蒸汽量项目归一化实战 1. 引言 在工业生产中&#xff0c;蒸汽是重要的能源之一。然而&#xff0c;由于各种因素的影响&#xff0c;蒸汽的产量和质量可能会有所波动。为了确保生产过程的稳定性和效率&#xff0c;我们需要对蒸汽量进行归一化处理。本文…

zframe_send发送的内容,可以使用zmq_recv接收吗

首先直接说结论&#xff1a;可以&#xff0c;但是不建议。 因为&#xff1a;在ZMQ中&#xff0c;zframe_send是CZMQ库中的一个函数&#xff0c;用于发送ZMQ消息帧&#xff0c;而zmq_recv是ZMQ的原生函数&#xff0c;用于接收消息。 如果你在同一套接字上混合使用CZMQ的zframe…

git commit规范提交

Git每次提交代码时&#xff0c;都要写Commit Message&#xff08;提交说明&#xff09;&#xff0c;通常情况下&#xff0c;Commit Message应该清晰明了&#xff0c;说明本次提交的目的和具体操作等。然而笔者工作多年来发现&#xff0c;有些公司对Commit Message没有明确的要求…

C#把自启动程序添加到注册表中

1.Regedit自启动注册表路径 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 2.获取运行程序路径 SetAutoStart(AppDomain.CurrentDomain.FriendlyName, AppDomain.CurrentDomain.BaseDirectory); 3.添加到注册表中&#xff0c;如果注册表已经存…

14:00面试,14:06就出来了,问的问题有点变态。。。。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

【JAVA学习笔记】64 - 坦克大战1.4,限制坦克发射子弹,敌方击中我方坦克爆炸

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter18/src/com/yinhai/tankgame1_3 增加功能 1.我方坦克在发射的子弹消亡后&#xff0c;才能发射新的子弹. >扩展(发多颗子弹怎么办)&#xff08;其实已经解决了&#xff0c;在62章我们已经…

k8s、docker 卸载

k8s卸载 k8s 重置 kubeadm reset -f如果kubernets是1.24以上版本&#xff0c;请先单独卸载containerd sudo apt purge containerd.iok8s软件卸载 ubuntu #apt卸载 apt purge kubelet kubeadm kubectlcentos yum erase -y kubelet kubectl kubeadm 删除kubelet相关信息&am…