数据库数据转ModbusTCP访问

目标:编写一个程序将数据库里某个表的数据提取出来,转换成能供支持ModbusTCP协议设备读取的值

编写内容:数据库值获取、数据类型(进制)转换、MoubusTCP从机建立、数据存入从机保持寄存器(4xxxx)、多线程处理

一、各内容部分特点:

1、 数据库值获取

数据 库为远程SQLSERVER 数据库,尝试了两个Python库:pypyodbc和pymssql,只有pymssql能远程连接数据库,pypyodbc也是很不错的。因此采用pymssql 库。数据库里的数据内容如下:每个StationNum的值是唯一的,要求需要根据这个值计算存入寄存器的寄存器的地址段。

数据库数据转ModbusTCP访问

2、数据类型(进制)转换

从数据库里除了StationNum外,其他值都是实数,因为每个寄存器的长度是16位,需要存实数的话,需要将实数(32位)转化 成两个16位的数存到两个寄存器中,因此此处需要编写 这样的一个方法。

3、MoubusTCP从机建立

采用modbus_tk库,该库功能比较丰富,ModbusRTU等这些都可以采用该库

4、数据存入从机保持寄存器(4xxxx)

前面提到需要根据StationNum计算存入寄存器的寄存器的地址段,因此也需要编写这样一个计算寄存器地址的方法,同时以上的每个数经转化后需要两个寄存器来存储。

5、多线程处理 

由于寄存器里存储的是数据库里实时的数据,因此需要把数据库里实时的数据及时更新到寄存器里,此处采用生产消费者模型方式协调从数据库里读数、数据存入寄存器这样的一种方式,减少内存的负荷。

二、成果展示

用ModScan测试完全 正常.(ps:沟通交流)

数据库数据转ModbusTCP访问