在MODSCAN调试,怎么一直有“modbus message time-out”是什么原因
答案:4 悬赏:30 手机版
解决时间 2021-03-10 08:39
- 提问者网友:流星是天使的眼泪
- 2021-03-09 21:34
在MODSCAN调试,怎么一直有“modbus message time-out”是什么原因
最佳答案
- 五星知识达人网友:低血压的长颈鹿
- 2021-03-09 22:23
Modbus两种协议的编程方法:
1、LRC校验
LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。
LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。下面是它对应的代码:
BYTE GetCheckCode(const char * pSendBuf, int nEnd)//获得校验码
{
BYTE byLrc = 0;
char pBuf[4];
int nData = 0;
for(i=1; i {
//每两个需要发送的ASCII码转化为一个十六进制数
pBuf [0] = pSendBuf [i];
pBuf [1] = pSendBuf [i+1];
pBuf [2] = '\0';
sscanf(pBuf,"%x",& nData);
byLrc += nData;
}
byLrc = ~ byLrc;
byLrc ++;
return byLrc;
}
2、CRC校验
CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。
CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。
1、LRC校验
LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。
LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。下面是它对应的代码:
BYTE GetCheckCode(const char * pSendBuf, int nEnd)//获得校验码
{
BYTE byLrc = 0;
char pBuf[4];
int nData = 0;
for(i=1; i
//每两个需要发送的ASCII码转化为一个十六进制数
pBuf [0] = pSendBuf [i];
pBuf [1] = pSendBuf [i+1];
pBuf [2] = '\0';
sscanf(pBuf,"%x",& nData);
byLrc += nData;
}
byLrc = ~ byLrc;
byLrc ++;
return byLrc;
}
2、CRC校验
CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。
CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。
全部回答
- 1楼网友:duile
- 2021-03-10 00:48
网页链接
Modbus是基于16Bit的。
根据数据包的要求,一般一次读写不超过125个数据。
所以先考虑是否读取长度问题。
其次,通讯的数据流要分析一下,看校验码之类的对不对。
- 2楼网友:我住北渡口
- 2021-03-10 00:09
这个问题经常有,一般分好多种。
如果能出现这句话说明,接口是的好的,如果接口不好,就会出现,设备连接不上的提示。
现在的问题归纳大概有以下几个:
1,连接的点的地址太多,试试改到10个地址;(因为接口质量问题,有时候连接的地址多,就会出错);
2,连接的设备的站号不对;
3,选择的数据格式不对,试试选'3
如果能出现这句话说明,接口是的好的,如果接口不好,就会出现,设备连接不上的提示。
现在的问题归纳大概有以下几个:
1,连接的点的地址太多,试试改到10个地址;(因为接口质量问题,有时候连接的地址多,就会出错);
2,连接的设备的站号不对;
3,选择的数据格式不对,试试选'3
- 3楼网友:往事埋风中
- 2021-03-09 23:33
Modbus两种协议的编程方法:
1、LRC校验
LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。
LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。下面是它对应的代码:
BYTE GetCheckCode(const char * pSendBuf, int nEnd)//获得校验码
{
BYTE byLrc = 0;
char pBuf[4];
int nData = 0;
for(i=1; i {
//每两个需要发送的ASCII码转化为一个十六进制数
pBuf [0] = pSendBuf [i];
pBuf [1] = pSendBuf [i+1];
pBuf [2] = '\0';
sscanf(pBuf,"%x",& nData);
byLrc += nData;
}
byLrc = ~ byLrc;
byLrc ++;
return byLrc;
}
2、CRC校验
CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。
CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后
1、LRC校验
LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。
LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。下面是它对应的代码:
BYTE GetCheckCode(const char * pSendBuf, int nEnd)//获得校验码
{
BYTE byLrc = 0;
char pBuf[4];
int nData = 0;
for(i=1; i
//每两个需要发送的ASCII码转化为一个十六进制数
pBuf [0] = pSendBuf [i];
pBuf [1] = pSendBuf [i+1];
pBuf [2] = '\0';
sscanf(pBuf,"%x",& nData);
byLrc += nData;
}
byLrc = ~ byLrc;
byLrc ++;
return byLrc;
}
2、CRC校验
CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。
CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯