Compare commits
3 Commits
1df66eccd1
...
a635b8af4e
| Author | SHA1 | Date | |
|---|---|---|---|
| a635b8af4e | |||
| 7ba768b8c2 | |||
| b45b8e1d8d |
@@ -465,7 +465,8 @@ func (rt *rtuTransport) readRTUFrameWithRes() (res *pdu, err error) {
|
|||||||
// 标准modbus响应已读取完成,现在读取自定义数据
|
// 标准modbus响应已读取完成,现在读取自定义数据
|
||||||
// 设置5秒超时来读取自定义数据
|
// 设置5秒超时来读取自定义数据
|
||||||
customDataTimeout := 5 * time.Second
|
customDataTimeout := 5 * time.Second
|
||||||
err = rt.link.SetDeadline(time.Now().Add(customDataTimeout))
|
deadline := time.Now().Add(customDataTimeout)
|
||||||
|
err = rt.link.SetDeadline(deadline)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -477,6 +478,16 @@ func (rt *rtuTransport) readRTUFrameWithRes() (res *pdu, err error) {
|
|||||||
var lastErr error // 记录最后一次非超时错误
|
var lastErr error // 记录最后一次非超时错误
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
// 检查是否已经超时
|
||||||
|
if time.Now().After(deadline) {
|
||||||
|
// 超时时间到,退出循环
|
||||||
|
// 如果有之前记录的错误,使用它;否则err保持为nil(超时是正常的)
|
||||||
|
if lastErr != nil {
|
||||||
|
err = lastErr
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
// 检查缓冲区是否还有空间
|
// 检查缓冲区是否还有空间
|
||||||
if startPos+totalRead+len(tempBuf) > len(rxbuf) {
|
if startPos+totalRead+len(tempBuf) > len(rxbuf) {
|
||||||
// 如果缓冲区不够,扩展它
|
// 如果缓冲区不够,扩展它
|
||||||
@@ -497,7 +508,7 @@ func (rt *rtuTransport) readRTUFrameWithRes() (res *pdu, err error) {
|
|||||||
if readErr != nil {
|
if readErr != nil {
|
||||||
if os.IsTimeout(readErr) {
|
if os.IsTimeout(readErr) {
|
||||||
// 超时时间到,退出循环
|
// 超时时间到,退出循环
|
||||||
// 如果有之前记录的错误,使用它;否则使用超时错误
|
// 如果有之前记录的错误,使用它;否则err保持为nil(超时是正常的)
|
||||||
if lastErr != nil {
|
if lastErr != nil {
|
||||||
err = lastErr
|
err = lastErr
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user