From 4ec239dd5d3838b58873fd61986fc3391eb96a3d Mon Sep 17 00:00:00 2001 From: zhyinch <zhyinch@gmail.com> Date: 星期四, 03 三月 2022 10:51:40 +0800 Subject: [PATCH] V1.48 支持MODBUS读写参数 --- 源码/核心板/Src/application/modbus.c | 18 +++++++++++++++++- 1 files changed, 17 insertions(+), 1 deletions(-) diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c" index 715d445..fbde13a 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/modbus.c" @@ -512,8 +512,14 @@ RS485_TX_BUFF[2]=RegNum*2; for(i=0;i<RegNum;i++) { + if(startRegAddr<100) + { RS485_TX_BUFF[3+i*2]=(Modbus_HoldReg[startRegAddr+i]>>8)&0xFF;// /////////先发送高字节--在发送低字节 RS485_TX_BUFF[4+i*2]=(Modbus_HoldReg[startRegAddr+i])&0xFF; // + }else{ + RS485_TX_BUFF[3+i*2]=(g_com_map[startRegAddr+i-100]>>8)&0xFF;// /////////先发送高字节--在发送低字节 + RS485_TX_BUFF[4+i*2]=(g_com_map[startRegAddr+i-100])&0xFF; // + } } calCRC=CRC_Compute(RS485_TX_BUFF,RegNum*2+3); RS485_TX_BUFF[RegNum*2+3]=(calCRC>>8)&0xFF; //CRC高地位不对吗? // 先高后低 @@ -534,9 +540,19 @@ //写单个保持寄存器 void Modbus_06_Solve(void) { + if(startRegAddr>100) + { + if(startRegAddr<600) + { + g_com_map[startRegAddr-100]=RS485_RX_BUFF[4]<<8|RS485_RX_BUFF[5]; + } + save_com_map_to_flash(); + delay_ms(500); + SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader + }else{ Modbus_HoldReg[startRegAddr]=RS485_RX_BUFF[4]<<8;//高字节在前 ////////修改为高字节在前,低字节在后 Modbus_HoldReg[startRegAddr]|=((u16)RS485_RX_BUFF[5]);//低字节在后 - + } RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; RS485_TX_BUFF[1]=RS485_RX_BUFF[1]; RS485_TX_BUFF[2]=RS485_RX_BUFF[2]; -- Gitblit v1.9.3