bsp_ModBus.h varint.h usart.h stdarg.h D:/gitt/MicrochipFor32/bsp_Device/bsp_ModBus.cpp D:/gitt/MicrochipFor32/bsp_Device/bsp_ModBus_STM32.h bsp_ModBus_Tx bsp_ModBus_Rx Fun_ModBus Fun_R_OutCoil = 0x01 读取输出线圈 Fun_R_InCoil = 0x02 读取输入线圈 Fun_R_KeepReg = 0x03 读取保持寄存 Fun_R_InReg = 0x04 读取输入寄存 Fun_W_OneCoil = 0x05 写入单线圈 Fun_W_OneReg = 0x06 写入单寄存 Fun_W_Coils = 0x0F 写入多线圈 Fun_W_Regs = 0x10 写入多寄存 ModBus通信函数 /*---------------------------------------------------------------------------------------------------- # #Copyright(c)2022YuankangLiang(XerolySkinner) # #本软件按原样提供,无任何明示或暗示 #在任何情况下,作者都不承担任何损害赔偿责任 # #使用的许可声明: #1.不得歪曲本软件的来源,你不能声称你编写了原始软件. #2.免费授予以任何目的,前提是版权声明出现在所有副本中. #并且版权声明和许可声明同时出现. #3.你有使用,复制,修改,分发,和销售本软件的许可. #4.如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的. #5.本通知不得从任何来源删除或更改. # #YuankangLiang(XerolySkinner) #E-mail:zabbcccbbaz@163.com #QQ:2715099320 #MobilePhone:13005636215 # #Allrightsreserved. */ #pragmaonce #include"varint.h" #include"usart.h" #include<stdarg.h> #ifdef__cplusplus //---------------------------------------------------------------------------------------------------- //数据码 enumFun_ModBus{ Fun_R_OutCoil=0x01, Fun_R_InCoil=0x02, Fun_R_KeepReg=0x03, Fun_R_InReg=0x04, Fun_W_OneCoil=0x05, Fun_W_OneReg=0x06, Fun_W_Coils=0x0F, Fun_W_Regs=0x10, }; //---------------------------------------------------------------------------------------------------- //类目 classbsp_ModBus_Tx{ public: bsp_ModBus_Tx(u8ID); public: voidReadKeepReg(u16address,u16mem); voidReadInReg(u16address,u16mem); voidWriteOneReg(u16address,u16var); voidWriteRegs(u16address,u16mem,u16*var); voidWriteRegsVar(u16address,u16mem,...); voidReadOutCoil(u16address,u16mem); voidReadInCoil(u16address,u16mem); voidWriteOneCoil(u16address,u16state); voidWriteCoils(u16address,u16mem,u8*var); voidWriteCoilsVar(u16address,u16mem,...); protected: virtualvoidTransmit(u8*dat,u16len)=0; protected: u8ID; }; //---------------------------------------------------------------------------------------------------- classbsp_ModBus_Rx{ public: bsp_ModBus_Rx(void); ~bsp_ModBus_Rx(void); public: voidanalysis(u8*dat); //共有变量 u8ID; u8Func; u8crcts; //保持寄存器特有 u16*KeepRegDat; u8KeepRegMem; //输入寄存器特有 u16*InRegDat; u8InRegMem; //输出线圈特有 u8*OutCoilDat; u8OutCoilMem; //输入线圈特有 u8*InCoilDat; u8InCoilMem;}; #endif