13 个解决方案
#1
大概看了一下,好象先要定义好通讯参数,寄存器,然后数据交换的事情就交给控件维护了,你的数据就和控件寄存器之前交互就好了
Connection
OpenConnection
CloseConnection
BaudRate
StopBits
Parity
DataBits
IPAddr1-4
ConnectionTimeout
Timeout
DelayBetweenPoll
IsConnected
TCPIPPort
RTSControl
这几个用来管通讯参数的
Coil
Register
Long
LongSwap
Float
FloatSwap
Double
DoubleSwap
ReadRegisterArray
WriteRegisterArray
ReadCoilArray
WriteCoilArray
这几些是读写寄存器的
UpdateEnable
UpdateDisable
UpdateOnce
ReadCoilStatus
ReadInputStatus
ReadHoldingRegisters
ReadInputRegisters
ForceSingleCoil
PresetSingleRegister
ForceMultipleCoils
PresetMultipleRegisters
ReadWriteMultipleRegisters
这些应该是和寄存器定义和维护有关的
Connection
OpenConnection
CloseConnection
BaudRate
StopBits
Parity
DataBits
IPAddr1-4
ConnectionTimeout
Timeout
DelayBetweenPoll
IsConnected
TCPIPPort
RTSControl
这几个用来管通讯参数的
Coil
Register
Long
LongSwap
Float
FloatSwap
Double
DoubleSwap
ReadRegisterArray
WriteRegisterArray
ReadCoilArray
WriteCoilArray
这几些是读写寄存器的
UpdateEnable
UpdateDisable
UpdateOnce
ReadCoilStatus
ReadInputStatus
ReadHoldingRegisters
ReadInputRegisters
ForceSingleCoil
PresetSingleRegister
ForceMultipleCoils
PresetMultipleRegisters
ReadWriteMultipleRegisters
这些应该是和寄存器定义和维护有关的
#2
不会英文,在线翻译后根本就不知道是什么意思了.它的几个参数设置还好理解,但后面具体功能应用就不懂了,象是下面的:
象扩号里的数字究竟代表具体含意搞不懂,将它的例子运行后和modbus客户端或是服务器连接都不能通信成功,不知道该怎么才能跑起来了.
e = Mbaxp1.OpenConnection
e = Mbaxp1.ReadHoldingRegisters(1, 1, 0, 10, 1000) ' slave 1
e = Mbaxp1.ReadInputRegisters(2, 1, 0, 10, 1000) ' slave 1
e = Mbaxp1.ReadHoldingRegisters(3, 2, 0, 10, 1000) ' slave 2
e = Mbaxp1.ReadInputRegisters(4, 2, 0, 10, 1000) ' slave 2
Mbaxp1.UpdateEnable (1) 'start the tasks
Mbaxp1.UpdateEnable (2)
Mbaxp1.UpdateEnable (3)
Mbaxp1.UpdateEnable (4)
象扩号里的数字究竟代表具体含意搞不懂,将它的例子运行后和modbus客户端或是服务器连接都不能通信成功,不知道该怎么才能跑起来了.
#3
Mbaxp1.OpenConnection 是建立连接,或者打开端口之类的操作
后边是定义寄存器的HoldingRegisters(保持寄存器)InputRegisters(输入寄存器)这些内容就不是不懂英文就可以不看的了,你不了解的话你做不下去的
后边五个参数,第一个handle不太清楚意思,可能是寄存器块的序号,第二个参数是站地址,定义了两个站,第三个参数是寄存器的起始地址,第四个参数是寄存器的个数,第五个参数是更新周期,
最后这四句应该是起动轮询功能,激活四块寄存器读取从站数据。
这个应该是主站工作方式,从下位机那边读数据过来
读入成功之后这里就在Label里显示数据
后边是定义寄存器的HoldingRegisters(保持寄存器)InputRegisters(输入寄存器)这些内容就不是不懂英文就可以不看的了,你不了解的话你做不下去的
后边五个参数,第一个handle不太清楚意思,可能是寄存器块的序号,第二个参数是站地址,定义了两个站,第三个参数是寄存器的起始地址,第四个参数是寄存器的个数,第五个参数是更新周期,
最后这四句应该是起动轮询功能,激活四块寄存器读取从站数据。
这个应该是主站工作方式,从下位机那边读数据过来
读入成功之后这里就在Label里显示数据
Private Sub Mbaxp1_ResultOk(ByVal Handle As Integer)
If Handle = 1 Then
Label1 = Mbaxp1.Register(1, 0)
End If
If Handle = 2 Then
Label2 = Mbaxp1.Register(2, 0)
End If
If Handle = 3 Then
Label3 = Mbaxp1.Register(3, 0)
End If
If Handle = 4 Then
Label4 = Mbaxp1.Register(4, 0)
End If
End Sub
#4
确如您所说的,现在的问题是,我用其它的modbus客户端和服务端可以正常连接和交换数据,但我把服务端用这个mbaxp代替后,发送同样的内容客户端不响应,英文提示好象是超时错误,而且把同样的内容返回到服务端,按比例modbus协议书中所说似乎它应该返回的是错误代码的,但我怎么搞都不能连接上客户端,现在不知道怎么回事.
第一个handle应该是对应的任务号,第二个是从机地址也就是客户端地址号,第三个是寄存器的开始地址,第四个是要读的寄存器数量,最后一个是更新时间?不知道是否正确.
但是我用其它的服务端发送的是:01 03 00 00 00 0a c5 cd客户端能够将指定位置内容返回给服务端,但使用mbaxp代替服务端同样发送:01 03 00 00 00 0a c5 cd客户端不响应并且只返回同样的内容:01 03 00 00 00 0a c5 cd并不是指定位置的数据内容,搞不明白啊.
#5
现在你用的这段代码是主站的,相当于是客户端,你去读他肯定没反应了
#6
菜鸟的我自己也搞不清楚哪个应该是主哪个应该是从了,我用mbaxp试过连接客户/服务端都不行的,连接客户端还有提示连接服务端就连提示都没有了.
通信参数都是一样的,我觉得厂家给的例子不太可能会出错,但就是不知道自己哪个地方搞错了始终连接不上.
通信参数都是一样的,我觉得厂家给的例子不太可能会出错,但就是不知道自己哪个地方搞错了始终连接不上.
#7
主站是客户端,一个网络里只能有一个主站,其他的都是从站(服务器端),
从站是提供数据的,由主站来读取
从站是提供数据的,由主站来读取
#8
一般设备都是从站,你用主站去读,站地址要对就,然后是寄存器地址和数量要对好,数据不对有些设备会返回错误代码,有些设备可能就不理你了,
如果你是和厂家设备通讯的话建议先下载个modscan32和设备先连通,等可以的时候再来写代码。
如果你是和厂家设备通讯的话建议先下载个modscan32和设备先连通,等可以的时候再来写代码。
#9
我用的是交叉线再用串口监听通信,估计是原来一直没有留意的地址设置造成的?那个模拟服务端的地址只能从100开始增加,而这个好象是从0开始所以连接不成功?但怎么不返回错误代码的呢?唉,明天再尝试怎么回事了.
#10
其它几个模拟调试网站今天晚上都不能下载,有鬼了.
#11
modscan32和实际地址相差1实际通讯的时候寄存器地址是0起点的,但一般写出来的资料,还有像modscan32填写的寄存器地址都是1起点的,所以进代码的时候要减1
#12
首先地址确实是错误的,使用ModSim32模拟从机的时候它的地址是以100开始不是从0开始的,而且寄存器地址要减去实际地址1个数;但是让我困惑的是,我只有一个串口1,用USB转了一个串口4,不知道为什么只能实现用串口4做主机串口1做从机能正常收发;反过来用1口做主机4口做从机则不能够连接,难道这两者都有区别?
#13
寄存器地址你要以厂家的通讯协议资料为准的,加一减一的话要调试的时候自己掂量着办,
USB转出来的串口通讯质量好象是稍差一些,我手头上有些电脑串口也有这样的问题,能收不能发,而且还是从主板上直接引出来的,搞不清原因。
USB转出来的串口通讯质量好象是稍差一些,我手头上有些电脑串口也有这样的问题,能收不能发,而且还是从主板上直接引出来的,搞不清原因。
#1
大概看了一下,好象先要定义好通讯参数,寄存器,然后数据交换的事情就交给控件维护了,你的数据就和控件寄存器之前交互就好了
Connection
OpenConnection
CloseConnection
BaudRate
StopBits
Parity
DataBits
IPAddr1-4
ConnectionTimeout
Timeout
DelayBetweenPoll
IsConnected
TCPIPPort
RTSControl
这几个用来管通讯参数的
Coil
Register
Long
LongSwap
Float
FloatSwap
Double
DoubleSwap
ReadRegisterArray
WriteRegisterArray
ReadCoilArray
WriteCoilArray
这几些是读写寄存器的
UpdateEnable
UpdateDisable
UpdateOnce
ReadCoilStatus
ReadInputStatus
ReadHoldingRegisters
ReadInputRegisters
ForceSingleCoil
PresetSingleRegister
ForceMultipleCoils
PresetMultipleRegisters
ReadWriteMultipleRegisters
这些应该是和寄存器定义和维护有关的
Connection
OpenConnection
CloseConnection
BaudRate
StopBits
Parity
DataBits
IPAddr1-4
ConnectionTimeout
Timeout
DelayBetweenPoll
IsConnected
TCPIPPort
RTSControl
这几个用来管通讯参数的
Coil
Register
Long
LongSwap
Float
FloatSwap
Double
DoubleSwap
ReadRegisterArray
WriteRegisterArray
ReadCoilArray
WriteCoilArray
这几些是读写寄存器的
UpdateEnable
UpdateDisable
UpdateOnce
ReadCoilStatus
ReadInputStatus
ReadHoldingRegisters
ReadInputRegisters
ForceSingleCoil
PresetSingleRegister
ForceMultipleCoils
PresetMultipleRegisters
ReadWriteMultipleRegisters
这些应该是和寄存器定义和维护有关的
#2
不会英文,在线翻译后根本就不知道是什么意思了.它的几个参数设置还好理解,但后面具体功能应用就不懂了,象是下面的:
象扩号里的数字究竟代表具体含意搞不懂,将它的例子运行后和modbus客户端或是服务器连接都不能通信成功,不知道该怎么才能跑起来了.
e = Mbaxp1.OpenConnection
e = Mbaxp1.ReadHoldingRegisters(1, 1, 0, 10, 1000) ' slave 1
e = Mbaxp1.ReadInputRegisters(2, 1, 0, 10, 1000) ' slave 1
e = Mbaxp1.ReadHoldingRegisters(3, 2, 0, 10, 1000) ' slave 2
e = Mbaxp1.ReadInputRegisters(4, 2, 0, 10, 1000) ' slave 2
Mbaxp1.UpdateEnable (1) 'start the tasks
Mbaxp1.UpdateEnable (2)
Mbaxp1.UpdateEnable (3)
Mbaxp1.UpdateEnable (4)
象扩号里的数字究竟代表具体含意搞不懂,将它的例子运行后和modbus客户端或是服务器连接都不能通信成功,不知道该怎么才能跑起来了.
#3
Mbaxp1.OpenConnection 是建立连接,或者打开端口之类的操作
后边是定义寄存器的HoldingRegisters(保持寄存器)InputRegisters(输入寄存器)这些内容就不是不懂英文就可以不看的了,你不了解的话你做不下去的
后边五个参数,第一个handle不太清楚意思,可能是寄存器块的序号,第二个参数是站地址,定义了两个站,第三个参数是寄存器的起始地址,第四个参数是寄存器的个数,第五个参数是更新周期,
最后这四句应该是起动轮询功能,激活四块寄存器读取从站数据。
这个应该是主站工作方式,从下位机那边读数据过来
读入成功之后这里就在Label里显示数据
后边是定义寄存器的HoldingRegisters(保持寄存器)InputRegisters(输入寄存器)这些内容就不是不懂英文就可以不看的了,你不了解的话你做不下去的
后边五个参数,第一个handle不太清楚意思,可能是寄存器块的序号,第二个参数是站地址,定义了两个站,第三个参数是寄存器的起始地址,第四个参数是寄存器的个数,第五个参数是更新周期,
最后这四句应该是起动轮询功能,激活四块寄存器读取从站数据。
这个应该是主站工作方式,从下位机那边读数据过来
读入成功之后这里就在Label里显示数据
Private Sub Mbaxp1_ResultOk(ByVal Handle As Integer)
If Handle = 1 Then
Label1 = Mbaxp1.Register(1, 0)
End If
If Handle = 2 Then
Label2 = Mbaxp1.Register(2, 0)
End If
If Handle = 3 Then
Label3 = Mbaxp1.Register(3, 0)
End If
If Handle = 4 Then
Label4 = Mbaxp1.Register(4, 0)
End If
End Sub
#4
确如您所说的,现在的问题是,我用其它的modbus客户端和服务端可以正常连接和交换数据,但我把服务端用这个mbaxp代替后,发送同样的内容客户端不响应,英文提示好象是超时错误,而且把同样的内容返回到服务端,按比例modbus协议书中所说似乎它应该返回的是错误代码的,但我怎么搞都不能连接上客户端,现在不知道怎么回事.
第一个handle应该是对应的任务号,第二个是从机地址也就是客户端地址号,第三个是寄存器的开始地址,第四个是要读的寄存器数量,最后一个是更新时间?不知道是否正确.
但是我用其它的服务端发送的是:01 03 00 00 00 0a c5 cd客户端能够将指定位置内容返回给服务端,但使用mbaxp代替服务端同样发送:01 03 00 00 00 0a c5 cd客户端不响应并且只返回同样的内容:01 03 00 00 00 0a c5 cd并不是指定位置的数据内容,搞不明白啊.
#5
现在你用的这段代码是主站的,相当于是客户端,你去读他肯定没反应了
#6
菜鸟的我自己也搞不清楚哪个应该是主哪个应该是从了,我用mbaxp试过连接客户/服务端都不行的,连接客户端还有提示连接服务端就连提示都没有了.
通信参数都是一样的,我觉得厂家给的例子不太可能会出错,但就是不知道自己哪个地方搞错了始终连接不上.
通信参数都是一样的,我觉得厂家给的例子不太可能会出错,但就是不知道自己哪个地方搞错了始终连接不上.
#7
主站是客户端,一个网络里只能有一个主站,其他的都是从站(服务器端),
从站是提供数据的,由主站来读取
从站是提供数据的,由主站来读取
#8
一般设备都是从站,你用主站去读,站地址要对就,然后是寄存器地址和数量要对好,数据不对有些设备会返回错误代码,有些设备可能就不理你了,
如果你是和厂家设备通讯的话建议先下载个modscan32和设备先连通,等可以的时候再来写代码。
如果你是和厂家设备通讯的话建议先下载个modscan32和设备先连通,等可以的时候再来写代码。
#9
我用的是交叉线再用串口监听通信,估计是原来一直没有留意的地址设置造成的?那个模拟服务端的地址只能从100开始增加,而这个好象是从0开始所以连接不成功?但怎么不返回错误代码的呢?唉,明天再尝试怎么回事了.
#10
其它几个模拟调试网站今天晚上都不能下载,有鬼了.
#11
modscan32和实际地址相差1实际通讯的时候寄存器地址是0起点的,但一般写出来的资料,还有像modscan32填写的寄存器地址都是1起点的,所以进代码的时候要减1
#12
首先地址确实是错误的,使用ModSim32模拟从机的时候它的地址是以100开始不是从0开始的,而且寄存器地址要减去实际地址1个数;但是让我困惑的是,我只有一个串口1,用USB转了一个串口4,不知道为什么只能实现用串口4做主机串口1做从机能正常收发;反过来用1口做主机4口做从机则不能够连接,难道这两者都有区别?
#13
寄存器地址你要以厂家的通讯协议资料为准的,加一减一的话要调试的时候自己掂量着办,
USB转出来的串口通讯质量好象是稍差一些,我手头上有些电脑串口也有这样的问题,能收不能发,而且还是从主板上直接引出来的,搞不清原因。
USB转出来的串口通讯质量好象是稍差一些,我手头上有些电脑串口也有这样的问题,能收不能发,而且还是从主板上直接引出来的,搞不清原因。