优化的解决方案:树莓派工控机定时自动采集数据方案

优采云 发布时间: 2020-10-24 10:04

  Raspberry Pi工业计算机的定时自动采集数据计划

  概述:

  Raspberry Pi(xxxxx,以下称为工业计算机)上的采集数据,将其传输到本地sqlserver数据库,并使用Python编写数据采集脚本。

  这涉及几个问题:当发生网络中断,电源故障,工业计算机重新启动和其他异常时,为了确保这些异常情况发生,仍然可以自动采集数据,并且需要以下两种解决方案

  在启动时自动启动;当脚本未运行时,它将自动运行。

  首选第二个选项,因为python程序崩溃或网络异常并且程序被中断。需要一种机制来使其自动运行。

  参考网址:

  常用命令:

  自动运行脚本:vim / etc / crontab

  查看过程:ps -ef | grep tcpclient.py

  自动运行脚本

  启动TCP服务器监视功能:

  

  输入vim / etc / crontab,然后输入* * * * * root python3 /home/pi/tcpclient.py

  

  tcpclient.py代码:

  import socket

import time

import random

def main():

# 1 创建tcp套接字

while 1:

tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2 创建连接

tcp_socket.connect(('192.168.1.35', 6666))

# 3 发送数据

tcp_input = str(random.randint(2,15))

tcp_socket.send(tcp_input.encode('gbk')) # utf-8 中文会乱码

time.sleep(5)

# 4.关闭套接字

tcp_socket.close()

if __name__ == '__main__':

main()

  输入ps -ef | grep tcpclient.py,您可以看到还有更多的进程(带有问号的进程),tcpclient.py有while循环,不会自动退出,因此,tcpclient.py每分钟都会自动运行。

  

  优化计划

  当然不可能以无线方式增加编程过程,因此这里有两个选项可供选择:

  每次执行tcpclient.py时,它将自动关闭,程序将结束,而没有while循环;编写另一个程序test1.py,脚本每分钟运行一次test1.py,test1.py确定tcpclient.py进程是否存在,如果不存在,则运行它;如果存在,它将无法运行。

  这次采用第二个选项,这可以防止tcp每次都断开连接并重新连接(除非像本例中那样在while循环中关闭套接字)。

  测试1.py代码:

  import time

import os

import re

# execute command, and return the infomation. 执行命令并返回命令输出信息

def execCmd(cmd):

r = os.popen(cmd)

text = r.read()

r.close()

return text

def doSomething():

os.system('python3 /home/pi/tcpclient.py')

time.sleep(10)

if __name__ == '__main__':

#ps -ef是linux查看进程信息指令,|是管道符号导向到grep去查找特定的进程,最后一个|是导向grep过滤掉grep进程:因为grep查看程序名也是进程,会混到查询信息里

programIsRunningCmd="ps -ef|grep tcpclient.py"

programIsRunningCmdAns = execCmd(programIsRunningCmd) #调用函数执行指令,并返回指令查询出的信息

print(programIsRunningCmdAns)

ansLine = programIsRunningCmdAns.split('\n') #将查出的信息用换行符‘\b’分开

print(len(ansLine))

#判断如果返回行数>3则说明python脚本程序已经在运行,打印提示信息结束程序,否则运行脚本代码doSomething()

if len(ansLine) > 3:

print("programName have been Running")

else:

doSomething()

  结果

  可以看出,test1.py和tcpclient.py进程在任何时候都是相同的,并且不会无限期地增加。重新启动工业计算机后,该过程保持不变,表明已达到预期的效果。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线