資源簡介
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 ?{
????
?}
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 ?{
????
?}
???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個文件信息
評論
共有 條評論