|
@@ -23,16 +23,17 @@
|
|
|
#include "mb.h"
|
|
#include "mb.h"
|
|
|
#include "mbport.h"
|
|
#include "mbport.h"
|
|
|
#include "string.h"
|
|
#include "string.h"
|
|
|
|
|
+#include "main.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ----------------------- Defines ------------------------------------------*/
|
|
/* ----------------------- Defines ------------------------------------------*/
|
|
|
//输入寄存器
|
|
//输入寄存器
|
|
|
#define REG_INPUT_START 3000
|
|
#define REG_INPUT_START 3000
|
|
|
-#define REG_INPUT_NREGS 4
|
|
|
|
|
|
|
+#define REG_INPUT_NREGS 1
|
|
|
|
|
|
|
|
//保持寄存器
|
|
//保持寄存器
|
|
|
-#define REG_HOLD_START 4000
|
|
|
|
|
-#define REG_HOLD_NREGS 1500
|
|
|
|
|
|
|
+#define REG_HOLD_START STS_R_START
|
|
|
|
|
+#define REG_HOLD_NREGS 500
|
|
|
|
|
|
|
|
//线圈
|
|
//线圈
|
|
|
#define REG_COILS_START 0
|
|
#define REG_COILS_START 0
|
|
@@ -109,6 +110,9 @@ eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )
|
|
|
iRegIndex++;
|
|
iRegIndex++;
|
|
|
usNRegs--;
|
|
usNRegs--;
|
|
|
}
|
|
}
|
|
|
|
|
+ {
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
@@ -143,6 +147,9 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
|
|
|
eMBErrorCode eStatus = MB_ENOERR;
|
|
eMBErrorCode eStatus = MB_ENOERR;
|
|
|
uint16_t iRegIndex;
|
|
uint16_t iRegIndex;
|
|
|
usAddress = usAddress - 1;
|
|
usAddress = usAddress - 1;
|
|
|
|
|
+
|
|
|
|
|
+ sts_data_t *t_data = get_sts();
|
|
|
|
|
+ md_data_t *data = &t_data->m_data;
|
|
|
if((usAddress >= REG_HOLD_START) && ((usAddress+usNRegs) <= (REG_HOLD_START + REG_HOLD_NREGS)))
|
|
if((usAddress >= REG_HOLD_START) && ((usAddress+usNRegs) <= (REG_HOLD_START + REG_HOLD_NREGS)))
|
|
|
{
|
|
{
|
|
|
iRegIndex = (uint16_t)(usAddress - usRegHoldStart);
|
|
iRegIndex = (uint16_t)(usAddress - usRegHoldStart);
|
|
@@ -150,7 +157,10 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
|
|
|
switch(eMode)
|
|
switch(eMode)
|
|
|
{
|
|
{
|
|
|
case MB_REG_READ://读寄存器
|
|
case MB_REG_READ://读寄存器
|
|
|
-
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ uint16_t *start = &data->dev;
|
|
|
|
|
+ memcpy(&usRegHoldBuf[iRegIndex],start+iRegIndex,usNRegs*2);
|
|
|
|
|
+ }
|
|
|
while(usNRegs > 0)
|
|
while(usNRegs > 0)
|
|
|
{
|
|
{
|
|
|
*pucRegBuffer++ = (uint8_t)(usRegHoldBuf[iRegIndex] >> 8);
|
|
*pucRegBuffer++ = (uint8_t)(usRegHoldBuf[iRegIndex] >> 8);
|
|
@@ -158,6 +168,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
|
|
|
iRegIndex++;
|
|
iRegIndex++;
|
|
|
usNRegs--;
|
|
usNRegs--;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
break;
|
|
break;
|
|
|
case MB_REG_WRITE://写寄存器
|
|
case MB_REG_WRITE://写寄存器
|
|
|
WusNRegs = usNRegs;
|
|
WusNRegs = usNRegs;
|
|
@@ -168,6 +179,48 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
|
|
|
iRegIndex++;
|
|
iRegIndex++;
|
|
|
usNRegs--;
|
|
usNRegs--;
|
|
|
}
|
|
}
|
|
|
|
|
+ {
|
|
|
|
|
+ if(usAddress == STS_OUTPUT_STATUS)
|
|
|
|
|
+ {
|
|
|
|
|
+ uint16_t recive = 0;
|
|
|
|
|
+ memcpy(&recive,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
|
|
|
|
|
+ if(recive > 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ t_data->open_output();
|
|
|
|
|
+ }else
|
|
|
|
|
+ {
|
|
|
|
|
+ t_data->close_output();
|
|
|
|
|
+ }
|
|
|
|
|
+ t_data->write_at24(IIC_OUT_CHANNEL,recive,sizeof(recive));
|
|
|
|
|
+ }else if(usAddress == STS_CHOISE_INPUT)
|
|
|
|
|
+ {
|
|
|
|
|
+ uint16_t recive = 0;
|
|
|
|
|
+ memcpy(&recive,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
|
|
|
|
|
+ if(recive == 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ t_data->choise_input(INPUT_CHANNEL_1);
|
|
|
|
|
+ }else
|
|
|
|
|
+ {
|
|
|
|
|
+ t_data->choise_input(INPUT_CHANNEL_2);
|
|
|
|
|
+ }
|
|
|
|
|
+ }else if(usAddress >= STS_INPUT_THRESHOLD && usAddress < STS_OUTPUT_THRESHOLD)
|
|
|
|
|
+ {
|
|
|
|
|
+ WeeiRegIndex = (uint16_t)(usAddress - STS_INPUT_THRESHOLD);
|
|
|
|
|
+ uint16_t *p_start = &(data->input_th[0].voltage_max);
|
|
|
|
|
+ memcpy(p_start+WeeiRegIndex,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
|
|
|
|
|
+ t_data->write_at24(IIC_INPUT_THRESHOLD_START+(WeeiRegIndex*2),&usRegHoldBuf[WiRegIndex],WusNRegs*2);
|
|
|
|
|
+
|
|
|
|
|
+ }else if(usAddress >= STS_OUTPUT_THRESHOLD && usAddress < STS_TEMP_THRESHOLD)
|
|
|
|
|
+ {
|
|
|
|
|
+ }else if(usAddress >= STS_TEMP_THRESHOLD && usAddress < STS_OVER_FUNC)
|
|
|
|
|
+ {
|
|
|
|
|
+ }else if(usAddress == STS_OVER_FUNC)
|
|
|
|
|
+ {
|
|
|
|
|
+ }else
|
|
|
|
|
+ {
|
|
|
|
|
+ eStatus = MB_ENOREG;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|