labview使用modbus有很多种方法,其中最方便地第一种就是用共享变量引擎(Shared Variable Engine, SVE)来读写modbus的寄存器(类似模拟IO)和线圈(数字IO)。其他方法比较繁琐,因此这里只研究了这种labview使用I/O Server访问modbus的方式,其它的比如采用VISA的modbus串口/TCP VI进行读写的方式以及采用OPC服务器进行读写的方式在这里就不研究了。
这里采用的win10 64bit中文版系统,Labview 2018(和谐版),同时安装了分布式控制系统(Distributed Control System, DSC),这样就可以使用modbus I/O Server了,根据官网资料,除了labview,必须还要安装DSC或者RT模块,才能使用modbus,其中最好是安装DSC模块。
这里的系统架构如下图所示,Labview负责逻辑和前端展示,与PLC的modbus协议进行交互是通过I/O Server完成的。I/O Server其实是NI 的共享变量引擎SVE的一种插件。所以在运行的时候需要安装和启动SVE。
这个SVE一般在windows里面是以服务形式安装的,安装的服务名为NITaggerService,安装位置是在C:\Program Files (x86)\National Instruments\Shared\Tagger。如果是SVE的一些问题,可以查看这个服务是否启动。但是坑爹的NI没有说log文件在哪儿,有时候查错很麻烦。
安装了DSC之后,就可以启用modbus I/O Server了,对于中文Win10系统装labview 2018而言,坑的地方在于你按照官网教程走完是不行的,会出现modbus变量无法读取的问题,并且显示链接已经断开。如果你手动启动SVE服务(即:NITaggerService),当时是可以启动的,然后你用NI分布式系统管理器(NI distributed system manager)查看变量会不成功,再看服务已经停止了,但是由于没有log文件,所以我们也不知道它什么时候停止的。
后来发现一个方法可以修正这个问题:在NI分布式系统管理器中重新编辑一次I/O Server(参考下土),再在“ *** 作”菜单下点击“启动本地共享变量引擎”,所有的值就正常了。
modbus在I/O Server中的的地址设置比较诡异,是按照[数据解释类型][功能码地址头][PLC格式的起始地址][位]来区分的。
比如SD400002,其中数据解释类型是SD,表示有符号的双字整数(Signed DWord Integer),双字意味着这是个32位的整数,需要两个寄存器,功能码地址头是4,表示功能码是3,即modbus的保持寄存器(Holding Register)字段,后面的PLC格式的起始地址是5位的00002,也就是从第2个寄存器开始,连续取2个寄存器(即00002和00003),组合成有符号的双字整数。
至于组合的过程涉及到大小端(Endianness)的问题,大小端涉及到byte order和word order的问题,一个word就是一个寄存器(16位),一个byte是8位,当一个寄存器中的两个byte组合并解释为变量的具体取值的时候,可以选择把哪个byte放到前面,哪个byte放到后面,这就是byte order,大部分情况下,byte order是大端在前(big endianness),而word order则是在两个寄存器储存的两个16位的字(word),如何组成32位的数据,不同的厂商会有不同的约定,这个就差异比较大了,需要查看手册。
NI的modbus I/O Server中,word order可以在高级选项中设置,但是byte order是没有地方可以设置的。
此外,NI还有一个比较坑爹的地方是它的modbus tcp连接不支持502以外的端口。也就是一个IP地址最多只能对应一个modbus,虽然可以靠Unit ID来进行区分,但是实际使用中也可能存在用不同端口区分设备的情况。
1[How LabVIEW Uses I/O Servers]( >传感器接上适当的电路之后,输出电压信号,接到采集卡的AI端口上。\x0d\你这采集卡也不写厂家,是NI公司的吧,需要安装DAQmx驱动。\x0d\采集卡是USB的,使用它的USB线连接到电脑后可以先在MAX里面进行AI采集,确保都弄好了。\x0d\之后在LabVIEW里面用DAQmx的vi编程,读取并显示数据。\x0d\范例查找器里面有很多现成的程序的。工具选板自动被你禁用了,如果禁用,就花肌羔可薏玖割雪公磨不会显示线圈了,只有自动时,才会在连线时出现线圈。在程序面板按着SHIFT键,再单击鼠标右键,就会d出工具选板了,然后将其中上方的LED布尔灯使能点亮(绿)即可自动 。
在使用labview过程中,数据库的使用也是最为常用的。下面就来说说labview数据库的使用方法。
从很多Labview的书籍中看到的数据库使用方法都是需要建立数据源,也就是需要进控制面板把在电脑上创建的aess数据库与数据源(ODBC)链接起来。这样做会有一个问题,就是应用程序做完导出后再别的电脑上使用的话也需要先去把aess数据库与数据源链接起来,显得很不方便。
其实还存在另外一种方法,不需要链接数据库与数据源,用SQL语言就能直接 *** 作到数据库,省去了在新电脑中首次使用都需要设置链接的麻烦。
下图就是SQL语言的数据库路径了,也就是(Provider=MicrosoftACEOLEDB120;DataSource=数据库所在的路径数据库名),这就是一个数据库的路径了,因为数据库需要多次读取与写入、查询、创建与删除表等,每次使用都去写这么一段函数就会很麻烦,直接设置一个数据库路径,每次要使用时都用“数据库路径”的局部变量。
下图就用了上图的数据库路径的局部变量,用作为连接代码连接到openconn的。用选择语句从表table1中ID号为1的行中DEEP数据读取出来了。
这样做就不需要在控制面板中设置数据库的链接,直接创建一个数据库就能使用了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)