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可以顺利接收数据,其他的串口通讯软件不可以。


阅读全文
FolderWatch

FloderWatch是来也UiBot Creator的一款插件,指定文件类型,监测指定文件夹,当指定文件夹出现新增指定类型的文件时,返回新增文件的文件名。

看到UiBot论坛里有人问”如何定时在下载目录中判断有没有新增文件?”,一种思路是定时获取文件列表,然后获取一下数组的最大下标,2进行比较,变多了就说明文件新增了,然后去找新增文件。

这种轮询的方式不够优雅,实际上.net有一个FileSystemWatcher类,可以在文件发生变化的时候发送通知,这种Push的方式才是正解。

正好之前用Powershell调用FileSystemWatcher类实现了类似功能,有一个小缺点是Powershell无法知道RPA的运行状态,UiBot为Python调用提供了IsStop()函数,可以判断RPA已停止,于是用Python重写了一个新增文件监测FolderWatch插件。

插件名称:新增文件监测FolderWatch

功能:指定文件类型,监测指定文件夹,当指定文件夹出现新增指定类型的文件时,返回新增文件的文件名。

适用场景:获取扫描图片、下载、FTP等文件夹的新增文件,以便进行下一步自动化操作。

使用方法:

  1. 将ZIP解压到extend\python目录下,包括FolderWatch.lib文件夹和FolderWatch.py

  2. UB调用代码

Import FolderWatch
Dim sNewFile
sNewFile=FolderWatch.Watch(“d:\desktop”,”*.jpg”)
Traceprint(sNewFile)
3. d:\deskop文件夹如创建了新的jpg文件,函数将返回该文件的路径。

  1. FolderWatch.Watch(参数1,参数2),参数1为要监测的文件夹,注意转义,参数2为要监测的文件类型,例如”.txt”,”.*”等

阅读全文
TextScreen

TextScreen屏幕文字是华为WeAutomate Studio的一款插件, 用一种优雅、非阻塞(Non-Blocking)的方式在屏幕上显示文字。

缘 起

给客户做PoC,把脚本运行的过程录屏发给客户,客户之前没有接触过RPA,表示看不懂,只看到鼠标键盘进行了一系列的操作,于是给视频加上了字幕,对每个步骤进行了讲解,客户一下就看懂了。

电脑面前没人的时候,正在运行RPA脚本的电脑看起来怪怪的,明明没人电脑却操作的行云流水,如果有一个提示就好了。

WeAutomate在运行时可以通过消息框或实时日志给予用户提示,消息框文字很小,需要用户点击关闭或延时消失,用户可能会忽略,而日志基本上是给技术人员准备的,信息太多,滚动太快,有么有更好的方式?

如果你有上面的痒点,那么华为WeAutomate的这款插件-屏幕文字可能适合你。

屏幕文字可以在屏幕上显示一行文字,这行文字没有窗体,永远位于顶层,背景透明,就像这样:

以优雅、非阻塞(Non-Blocking)的方式在屏幕上直接显示提示信息。

类似的功能UiBot也有,称为写屏,不得不说这个功能很好用。

UiBot的RPA运行时典型界面是这样的:屏幕上像字幕一样显示:”机器人正在运行,期间请勿操作鼠标键盘”,”正在处理数据文件xxx.xlsx”,”调用OCR识别发票文件xxxx,当前处理到13/137”,”登录XXX系统失败,尝试再次登录2/3”……

前段时间成都因为疫情静默了15天,闲着也是闲着,开发了WeAutomate的插件-TextScreen 屏幕文字,自家买菜用,也希望能帮到你。

WeAutomate插件-屏幕文字

功能:在屏幕上显示一行文字,在机器人运行期间给用户最直观的提示。

  • 文字水平自动居中,可选大小、颜色、垂直靠上、居中、向下。

  • 文字无窗体,背景透明,永远位于顶层不会被遮挡。

  • 文字将持续显示,直到被新的文字替换或关闭。

  • 非阻塞运行(Non-Blocking)


阅读全文