• 大小: 9.85MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-17
  • 语言: 其他
  • 标签: modbus  

资源简介

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++]=‘\r‘;
 modbus.ModSenbuf[i++]=‘\n‘;
 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++]=‘\r‘;
 modbus.ModSenbuf[i++]=‘\n‘;
 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自动流控制收发\CORE\core_cm3.c

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

评论

共有 条评论