通过Modbus协议进行CR1000通信 _Campbellsci论坛问答

你好

我正试图“;只是收集“;从CR1000到我的PC的数据(不向CR1000发送数据或写入数据)。我想把CR1000作为Modbus从机,把我的电脑(使用NI LabView运行)作为Modbus服务器,而不需要经过LoggerNet btwn LabView和CR1000。

通过Modbus协议进行CR1000通信
_Campbellsci论坛问答

根据CR1000的手册和CRBasic的帮助(Modbus从属示例),我编译了以下CRBasic代码,并通过LoggerNet(在不同的pc上)将其发送到CR1000。然后将CR1000 w/RF416连接到PC(Modbus服务器)进行执行。我想知道代码是否正确?我应该在ModBusSlave线路中使用ComSDC7还是ComRS232?

我的系统是:一台AM25T连接到CR1000;
CR1000连接到RF416
RF416连接到PC(作为Modbus服务器)
欢迎提供任何反馈。非常感谢。

公共电池V
公共RTempC
公共时间_F(25)

单位BattV=伏特
单位RTempC=摄氏度
单位温度F=华氏度

'定义数据表
数据表(TableTC,True,-1)
数据间隔(0,10,最小值,10)
平均值(1,BattV,FP2,错误)
平均值(1,Temp_F(1),FP2,假)
平均值(1,Temp_F(2),FP2,假)
平均值(1,Temp_F(3),FP2,假)
平均值(1,Temp_F(4),FP2,假)
平均值(1,Temp_F(5),FP2,假)
平均值(1,Temp_F(6),FP2,假)
平均值(1,Temp_F(7),FP2,假)
平均值(1,Temp_F(8),FP2,假)
平均值(1,Temp_F(9),FP2,假)
平均值(1,Temp_F(10),FP2,假)
平均值(1,Temp_F(11),FP2,假)
平均值(1,Temp_F(12),FP2,假)
平均值(1,Temp_F(13),FP2,假)
平均值(1,Temp_F(14),FP2,假)
平均值(1,Temp_F(15),FP2,假)
平均值(1,Temp_F(16),FP2,假)
平均值(1,Temp_F(17),FP2,假)
平均值(1,Temp_F(18),FP2,假)
平均值(1,Temp_F(19),FP2,假)
平均值(1,Temp_F(20),FP2,假)
平均值(1,Temp_F(21),FP2,假)
平均值(1,Temp_F(22),FP2,假)
平均值(1,Temp_F(23),FP2,假)
平均值(1,Temp_F(24),FP2,假)
平均值(1,Temp_F(25),FP2,假)
床头柜

'主程序
开始进度
ModBusSlave(ComSDC79600,1,Temp_F(),0)

扫描(2,秒,1.0)
'默认数据记录器蓄电池电压测量值BattV
蓄电池(蓄电池电压)
AM25T多路复用器上的K型(铜-康铜)热电偶测量Temp_F()
AM25T(Temp_F(),25,mV250C,1,1,K型,RTempC,1,2,1,True,0,_6Hz,1.8,32)
'调用数据表并存储数据
调用表(TableTC)
下一次扫描
结束程序

新对话如下:

尊敬的Chliao:,
我也想通过modbus通信发送数据,但我不知道Labview必须发送哪种指令,这样cr1000才能发送变量,如Temp(0)、Temp(1)、Temp(2)等。。。

当做
否认

新对话如下:

嗨,拒绝,

老实说,我是坎贝尔SCI系统的新手,对此一无所知。到目前为止,我使用“;VISA WRITE(签证书写);以及“;VISA READ(签证阅读);只有当我通过VISA WRITE发送\n\r到CR1000时,我可以读取“;CR1000>";仅在缓冲区中。NI论坛上的人建议使用DSC与CR1000直接沟通。或者,如果没有DSC模块,则使用Modbus自由。

根据我的理解(不确定是否正确),CR1000本身排除了CRBASIC程序作为Modbus从站。

你有什么信息可以分享吗?

当做
赤寮

新对话如下:

我想把CR1000作为Modbus从机,把我的电脑(使用NI LabView运行)作为Modbus服务器,而不需要经过LoggerNet btwn LabView和CR1000。

ModBus RTU主设备,NI LabView-(RS-232)-(RS232)-RF416-RF416-(CSI/O)-ModBus RTU从设备,CR1000

此应用程序中的每个设备都需要进行适当的配置。每个设备都配置为与其所连接设备的配置相匹配。例如,RF416的RS-232波特率需要与Modbus主设备(8-N-1)的RS-232波特率相匹配。RF416应处于透明模式。电脑上RF416的活动接口应为RS-232。CR1000上RF416的活动接口应为数据记录器调制解调器启用,CS I/O ME波特率应设置为与CR1000程序文件的ModBusSlave指令中定义的CR1000的CS I/O端口的波特率相匹配。ModBusSlave指令将数据记录器设置为ModBus从设备,并配置ModBus设置和通信端口:

'ModBusSlave(通信端口、波特率、ModBusAddr、ModBusVariable、BooleanVariable)
ModBusSlave(ComME、-9600,1、ModBusVariable()、Variable(())

设备配置实用程序非常适合配置RF416和CR1000。

新对话如下:

尊敬的MattPerry:,
例如,如果我的控制软件是Labview,我可以使用哪种指令?
cr1000在modbus从选项中发送回复的命令顺序是什么?

致以亲切的问候
拒绝Antonino

新对话如下:

假设LabView支持ModBus-RTU,则可以使用数据记录器程序文件中的ModBusSlave指令。这将数据记录器设置为ModBusSlave设备。数据记录器将充当ModBusSlave设备,并响应来自ModBusMaster的请求(功能)以下是一个程序示例:

公共PTemp、batt_volt、ModResult、I
公共ModIn(80)

'主程序
开始进度

'ModBusSlave(通信端口、波特率、ModBusAddr、ModBusVariable、BooleanVariable)

ModBusSlave(ComRS2329600,1,ModIn(),0)

扫描(2,秒,0,0)

面板温度(PTemp,250)

蓄电池(蓄电池电压)

ModIn(1)=电池电压
ModIn(2)=参数
ModIn(3)=ModResult

下一次扫描
结束程序

----
在本例中,ModBusSlave指令具有:

1.将数据记录器的RS232端口定义为将用于此指令的通信端口,
2.将通信速率(以bps为单位)设置为9600,
3.将ModBusSlave(CR1000)地址设置为1,
4.将用作ModBusMaster数据源的变量数组指定为ModIn()。
5.映射到控制端口1到8的离散命令。

当CR1000接收到3(读取保持寄存器)或4(读取输入寄存器)的Function命令时,它将使用ModIn()变量数组中定义的数据进行响应,在本例中,这些数据将是batt_volt、PTemp和ModResult。这些变量是浮点变量,每个变量使用两个ModBus寄存器。ModBus输入寄存器的偏移量为30000;ModBus保持寄存器的偏移量为40000。因此,对应于任何阵列位置X的第一个寄存器是保持寄存器40000+2X-1。例如,为了检索数组值3,ModBusMaster会要求两个以40005开头的寄存器。

新对话如下:

亲爱的马特:,

在CR1000的手册15.2.3.4中,列出了以下功能命令01、02、03、04、05、15和16。

但是函数命令6,7和9代表什么?

我向CR1000发送了命令7,并收到了我在CRBasic中指定的表数组。命令7是否请求CR1000发回存储在内存中的数据?

如果我发送命令9,我会连续收到一系列代码。这些代码是什么类型的?ASCII还是十六进制?

非常感谢你。
赤寮

新对话如下:

Chliao,

我很抱歉,但我不会在这一系列问题上提供太多帮助。我无法评论CR1000将如何响应这些不受支持的功能。然而,我确实找到了一个关于modbus协议和功能的好网站:

http://www.lammertbies.nl/comm/info/modbus.html#func

-马特

*最后更新人:MattPerry于2009年4月6日下午4:02*

新对话如下:

亲爱的马特:,

感谢您提供有用的网站。通过发送命令“”;\n\r7”中;(超级终端)到CR1000,我可以检索我想要的数据。非常感谢。

Denyan,

在LabView中,我只使用“;写签证;将上述命令发送到CR1000,并且我可以通过使用“;读签证”;。祝你好运,

Chliao公司

新对话如下:

非常感谢您的支持。
现在我试着对这个代码进行实验。。。。


当做
否认

新对话如下:

尊敬的Chliao:,
我已经通过超级终端发送了以下指令:“;\n\r7”中;但cr1000没有给我ModbusSlave中指示的变量。
程序示例为:

公共PTemp、batt_volt、ModResult、I
公共ModIn(80)

'主程序
开始进度

'ModBusSlave(通信端口、波特率、ModBusAddr、ModBusVariable、BooleanVariable)

ModBusSlave(ComRS2329600,1,ModIn(),0)

扫描(2,秒,0,0)

面板温度(PTemp,250)

蓄电池(蓄电池电压)

ModIn(1)=电池电压
ModIn(2)=参数
ModIn(3)=ModResult

下一次扫描
结束程序


代码中有问题吗?

当做
否认

新对话如下:

\不适用7

是指记录器的终端接口。按键盘上的Enter键将得到CR1000提示。输入7将显示变量/值的列表。

此功能与ModbusSlave指令无关。

ModbusSlave旨在设置数据记录器,以便使用Modbus协议监听数据查询。回到我是如何来到这里的。。。。是的,Modbus是使用LabView从Campbell记录仪检索实时数据的一种可行方法。

分享到:

原文链接:,转发请注明来源!
海洋仪器网 仪器使用 通过Modbus协议进行CR1000通信 _Campbellsci论坛问答
「通过Modbus协议进行CR1000通信 _Campbellsci论坛问答」评论列表

发表评论