modbus主机源码.rar


modbus主机源码.rar。
资源截图
代码片段和文件信息


/*
    此为MODBUS主机ASC协议

MODBUS测试时的两组数据(已测试能正常接收该数据包)
主机发 :010300110001EA+回车换行
          :0103020001F9+回车换行        
*/

#include “function_config.h“
#if _MODBUSEN_
#include “modbus_app.h“
#include “timer.h“

MODBUS modbus;
PLCREG modreg;//MODBUS寄存器

void Modbus_Init()  //
{
 Rs485RT_Init();  //RS485收发控制脚
 RS485RT_0;//接收
   Rs485UART_Init();
   Rs485_GetAdd();  //读取本板子地址--因为是主机程序,所以在该函数中将MODBUS地址直接设置为2
}

void SetPLC_Reg(u16 regu16 datu16 waitms)  //将PLC的reg寄存器设置为dat
{
   u8 ich;
   i=0;
 modbus.ModRecount=0;
 modbus.ModSenbuf[i++]=‘:‘;//asc起始字符
 //Treg=reg;
 HextoAsc(PLCMODBUSADD&modbus.ModSenbuf[i]);  //地址
 i+=2;
 HextoAsc(0x06&modbus.ModSenbuf[i]);  //功能码  0x03
 i+=2;  
   HextoAsc(reg/256&modbus.ModSenbuf[i]);  //要读的寄存器起始地址
 i+=2;
   HextoAsc(reg%256&modbus.ModSenbuf[i]);  //
 i+=2;
   HextoAsc(dat/256&modbus.ModSenbuf[i]);  //要写入的数据
 i+=2;
   HextoAsc(dat%256&modbus.ModSenbuf[i]);  //
 i+=2;
 ch=Calc_LRC(&modbus.ModSenbuf[1]i-1); //减去冒号进行校验码计算
 HextoAsc(ch&modbus.ModSenbuf[i]);  //校验码
 i+=2;
 modbus.ModSenbuf[i++]=‘
‘;
 modbus.ModSenbuf[i++]=‘
‘;
 modbus.ModSenbuf[i++]=0;
 modbus.ModRecount=0;
   Modbus_sendstring( (char*)modbus.ModSenbuf);
   time10ms.plcwaitms=0;
 
 while(time10ms.plcwaitms< waitms)
 {
    
 }
Mosbus_Event();  //处理 PLC返回的数据包 
}


void GetPLC_Reg(u16 regu8 rcountu16 waitms)  //读取PLC某寄存器的值
{
   u8 ich;
   i=0;
 modbus.ModRecount=0;
 modbus.CurrReg=reg;
 modbus.ModSenbuf[i++]=‘:‘;//asc起始字符
 HextoAsc(PLCMODBUSADD&modbus.ModSenbuf[i]);  //地址
 i+=2;
 HextoAsc(0x03&modbus.ModSenbuf[i]);  //功能码  0x03
 i+=2;  
   HextoAsc(reg/256&modbus.ModSenbuf[i]);  //要读的寄存器起始地址
 i+=2;
   HextoAsc(reg%256&modbus.ModSenbuf[i]);  //
 i+=2;
   HextoAsc(rcount/256&modbus.ModSenbuf[i]);  //   要读的寄存器个数
 i+=2;
   HextoAsc(rcount%256&modbus.ModSenbuf[i]);  //   要读的寄存器个数
 i+=2;
 ch=Calc_LRC(&modbus.ModSenbuf[1]i-1); //减去冒号进行校验码计算
 HextoAsc(ch&modbus.ModSenbuf[i]);  //校验码
 i+=2;
 modbus.ModSenbuf[i++]=‘
‘;
 modbus.ModSenbuf[i++]=‘
‘;
 modbus.ModSenbuf[i++]=0;
   Modbus_sendstring( (char*)modbus.ModSenbuf);
 time10ms.plcwaitms=0;
 while(time10ms.plcwaitms< waitms)
 {
    
 }
   Mosbus_Event(); //处理PLC返回的数据包
}
//

void Mosbus_Event()  //处理 PLC返回的数据包
{
u8  TempFun;
volatile u16 Tregtxcount;
  if(modbus.ModReflag==0)  return ;   //收到了MODBUS ASC数据包
   
// Modbus_sendstring((char *)modbus.ModRecbuf);  //发回MODBUS收到的数据帧
 modbus.ModAdd= Get_hex((u8 *)(&modbus.ModRecbuf[1]));//返回数据包的从机地址
 if(PLCMODBUSADD==modbus.ModAdd)   //PLC地址吻合
 {
    TempFun = Get_hex((u8 *)(&modbus.ModRecbuf[3]));//得到功能码
     if(TempFun>=0x80)   //返回的功能码大于128
 {
        
 }
     else
 {
   modbus.ModFun=TempFun;
 if(modbus.ModFun==0x06)  //对PLC写入操作后返回的数据包
 {
  tx= Get_hex((u8 *)(&modbus.ModRecbuf[7]));      //得到寄存器号
tx<<=8;
tx|=Get_hex((u8 *)(&modbus.Mod

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      11895  2018-07-08 22:43  主机源码MODBUS_ASC 主机modbus_app.c

     文件       2790  2018-07-08 22:43  主机源码MODBUS_ASC 主机modbus_app.h

     文件        892  2018-07-08 22:43  主机源码MODBUS_ASC 主机MODBUS_ASC.C

     文件        208  2018-07-08 22:43  主机源码MODBUS_ASC 主机MODBUS_ASC.H

     文件         70  2018-07-08 22:43  主机源码MODBUS_ASC 主机MODBUS_reg(1).h

     文件         87  2018-07-08 22:43  主机源码MODBUS_ASC 主机Modbus_reg.c

     文件       4691  2018-07-08 22:43  主机源码MODBUS_ASC 主机MODBUS_UART.C

     文件        474  2018-07-08 22:43  主机源码MODBUS_ASC 主机MODBUS_UART.H

     文件       1923  2018-07-08 22:43  主机源码MODBUS_ASC 主机MODREG.TXT

     文件       3720  2018-07-08 22:43  主机源码MODBUS_ASC 主机Plc_cmd.c

     文件       1259  2018-07-08 22:43  主机源码MODBUS_ASC 主机plc_cmd.h

     文件      17273  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发COREcore_cm3.c

     文件      85714  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发COREcore_cm3.h

     文件      15503  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发COREstartup_stm32f10x_hd.s

     文件       2901  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发HARWAREMODBUSmodbus.c

     文件        594  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发HARWAREMODBUSmodbus.h

     文件       2529  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发HARWAREMODBUSmodbus_uart.c

     文件        156  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发HARWAREMODBUSmodbus_uart.h

     文件       4149  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发HARWAREMODBUSCRCModbusCRC.c

     文件        645  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发HARWAREMODBUSCRCModbusCRC.h

     文件        460  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发HARWARETIME imer.c

     文件        100  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发HARWARETIME imer.h

     文件        399  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发keilkilll.bat

     文件       3942  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发OBJcore_cm3.crf

     文件        104  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发OBJcore_cm3.d

     文件      11224  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发OBJcore_cm3.o

     文件     349955  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发OBJdelay.crf

     文件       1669  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发OBJdelay.d

     文件     383216  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发OBJdelay.o

     文件         19  2018-07-08 22:43  主机源码MODBUS从机成功modbus从机1.0自动流控制收发OBJExtDll.iex

............此处省略401个文件信息

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

发表评论

评论列表(条)