Modbus2MQTT

Modbus协议广泛应用于工控和物联网领域,最常见的场景是上位机或PLC通过Modbus协议访问其他设备,上位机可以是工控机,也可以是树莓派这样的嵌入式系统,可以通过Modbus Poll这样的传统软件,也可以自己编程实现,不过这些都太重了,在评估了多款市售的嵌入式成品后,我们终于找到了理想的产品。

Modbus转MQTT的Python实现

下面是用Python实现的Modbus转MQTT的框架代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import paho.mqtt.client as paho       #MQTT Library
import modbus_tk.modbus_tcp as mt #Modus Library
ACCESS_TOKEN='xxxxxxxxxx' #Token of MQTT Broker
broker="xxxxxxxx" #host name
port=1883 #MQTT listening port
master = mt.TcpMaster("192.168.1.75", 502) #ModbusTCP Client
master.set_timeout(1.0)
client1= paho.Client("control1") #create client object
client1.username_pw_set(ACCESS_TOKEN) #access token from thingsboard device

while True:
data_sam = master.execute(slave=1, function_code=3, starting_address=50, quantity_of_x=16,output_value=0) #Read modbus TCP
list_data = list(data_sam)
payload="JSON of Modbus data" #基于Modbus数据组装JSON格式MQTT消息
ret= client1.publish("v1/devices/me/telemetry",payload) #topic- v1/devices/me/telemetry

以上是最基本的框架,工程中要采用完备的try catch机制来处理可能出现的各种异常。


阅读全文
DTR/DSR

串口通讯是ICT从业人员的传统手艺,绝大多数嵌入式系统使用古老的RS232与外部进行通讯,通讯协议五花八门,CTS/DSR是上古时代的产物,很多串口通讯软件已经取消了这两个选项,因为一个奇怪的故障,我们一起来考古串口通讯中的DTR/DSR。

数显量表的串口通讯协议

桂林广陆的数显千分表,国内使用广泛,RS232接口,ASCII主动上报,通讯协议如下:

传输协议
波特率:4800 1位起始位,8个数据位,1位停止位,无效验
数据以ASCII吗(及文本格式)发送,每个测量数据后以回车符结束,不断主动地发送。
在“字符串输入框:”输入6个大写的“Z”字母,再敲回车键,便可以完成清零。

看起来没什么复杂的,奇怪的是用SSCOM可以顺利接收数据,其他的串口通讯软件不可以。


阅读全文