中级会员
 
- 积分
- 437
- 金钱
- 437
- 注册时间
- 2013-4-10
- 在线时间
- 84 小时
|
2金钱
第一个寄存器的数读不上来,求分析,解决!谢谢!
04:输入寄存器
/* ----------------------- Defines ------------------------------------------*/
#define REG_INPUT_START 0
#define REG_INPUT_NREGS 4
/* ----------------------- Static variables ---------------------------------*/
static USHORT usRegInputStart = REG_INPUT_START;
static USHORT usRegInputBuf[REG_INPUT_NREGS]={0x1111,0x2222,0x3333,0x4444};
/* ----------------------- Start implementation -----------------------------*/

03:保持寄存器
/* ----------------------- Defines ------------------------------------------*/
#define REG_HOLDING_START 0x0000
#define REG_HOLDING_NREGS 8
uint16_t usRegHoldingBuf[REG_HOLDING_NREGS]= {0x147b,0x3f8e(变量),0x147b,0x400e,0x1eb8,0x4055,0x147b,0x408e};
 
|
最佳答案
查看完整内容[请看2#楼]
不是的,实际上modbus协议原本是用在plc上的,plc的第一个数据起始地址就是1。
你看你现在设置为0,但是第一个数据无法读出,因为你从modbusPoll发出去看上去是从0开始读取的,但是freemodbus转换后起始地址是1,读取数据函数里读取哪个地址使用的地址是iRegIndex = ( int )( usAddress - REG_INPUT_START );所以导致你第一个(0号)数据无法读取,你改成REG_INPUT_START = 1,那么其实地址就是你数组的buf[0]数据了。你可以试 ...
|