资源简介
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个文件信息
相关资源
- Modbus协议官方文档中、英文全
- Omron ETN21模块进行modbustcp通讯
- modbus通讯协议详解
- MCGS与单片机通信
- VC 6 Modbus RTU测试程序
- modbus51_c代码
- Modbus TCP Client
-
NModbus4 通讯类库(fr
amework4.5版本) - 西门子S7-1200 MODBUS-TCP通讯编程
- 200SMART Modbus-TCP通信程序演示-轮询(多
- 整理的ModbusProtocol SDK开发包
- delphi编写的modbus测试源码
- modbus通讯,用DELPHI编写
- FreeModbus_Slave+STM32F407+USART2代码亲测可
- 人民电器电表modbus rtu通信协议解析
- ModBus-RTU协议C封装
- 51单片机编写的标准modbus协议通信模版
- STM32F103移植FreeModbus实现modbus主机.zi
- 台达PLC44个程序
- Modbus—TCP协议
- 单片机modbus例程解析
- RS485串口调试工具
- MODBUS--ASCii实现的主要代码
- QJ71MT91.pdf
- modbus模拟器.rar
- stm32 modbus 协议程序
- 完整的STM32F407_MODBUS通信工程代码。
- MSP430F5529移植modbus
- 台达A2伺服MODBUS通讯调试工具
- stm32实现modbus主机从机功能通信
评论
共有 条评论