【发布时间】:2017-02-10 13:11:30
【问题描述】:
我搜索并研究了我的问题,但这有点困难,因为我没有真正要搜索的错误(代码)。
我尝试在我的 RPI 和 PLC 之间进行通信,运行脚本后,我得到的 (python Temp_buiten.py) 响应如下所示,但脚本的输出是正确的,我将值作为浮点数输入我的 PLC就像我想要的,但我得到的每个循环都会在我的命令行中响应:
pi@raspberrypi:~/scripts $ python Temp_buiten.py
@▒
A▒
pi@raspberrypi:~/scripts $
我不是 python 程序员,所以我希望有人可以帮助我。我尝试运行的脚本:
#!python3
#---------------Basis-------------------------
import sys
import datetime
import time
import os
import subprocess
import urllib2
import json
import base64
#--------------PLC Snap7----------------------
import S71200
from time import sleep
import snap7
from snap7.util import *
import struct
#---------------Settings----------------------
domoticzserver="192.168.1.210:8080"
domoticzusername = "Secret"
domoticzpassword = "Secret"
device = "558"
log_to_file = False
plc = S71200.S71200("192.168.1.242")
#---------------Variabelen--------------------
temp1 = 0.0
temp_woonkamer = {}
hum = 0.0
hum_stat = 0 #0 t/m 4
sensorids = ["28-0000062723e6"]
#---------------Wachtwoordenzooi--------------
base64string = base64.encodestring('%s:%s' % (domoticzusername, domoticzpassword)).replace('\n', '')
domoticzurl = 'http://'+ domoticzserver +'/json.htm? type=devices&rid='+device
#---------------Logging-----------------------
def log(message):
print message
if log_to_file == True:
logfile = open(sys.argv[0] + '.log', "a")
logfile.write(message + "\n")
logfile.close()
#---------------Info ophalen------------------
def domoticzrequest (url):
request = urllib2.Request(url)
request.add_header("Authorization", "Basic %s" % base64string)
#print(request)
response = urllib2.urlopen(request)
return response.read()
#--------------Status-------------------------
json_object = json.loads(domoticzrequest(domoticzurl))
if json_object["status"] == "OK":
temp1 = json_object["result"][0]['Temp']
hum = json_object["result"][0]['Humidity']
plc.writeMem("FREAL204",temp1)
sleep(1)
else:
print(device + "NOT OK")
for sensor in range(len(sensorids)):
tfile = open("/sys/bus/w1/devices/"+ sensorids[sensor] +"/w1_slave")
# Lees alle dat uit het "bestand" in een variabele.
text = tfile.read()
# Sluit het "bestand" nadat we het gelezen hebben.
tfile.close()
# We gaan nu de tekst splitsen per nieuwe regel (\n)
# en we selecteren de 2e regel [1] (1e regel = [0])
secondline = text.split("\n")[1]
# Splits de regel in "woorden", er wordt gespleten op de spaties.
# We selecteren hier het 10 "woord" [9] (tellend vanaf 0)
temperaturedata = secondline.split(" ")[9]
# De eerste 2 karakters zijn "t=", deze moeten we weghalen.
# we maken meteen van de string een integer (nummer).
temperature = float(temperaturedata[2:])
# De temperatuurwaarde moeten we delen door 1000 voor de juiste waarde.
temp_woonkamer[sensor] = temperature / 1000
plc.writeMem("FREAL200",temp_woonkamer[sensor])
sleep(1)
【问题讨论】:
-
尝试通过添加几个打印语句来调试您的脚本:
print('1111')和print('2222')。通过使用二进制搜索方法在多次迭代后将这些语句正确放置在您的代码中,您将能够找到产生奇怪输出的行。 -
你好 Leon,我真的被困住了。我用打印命令做了你所说的找出问题所在,我确定它在这部分 plc.writeMem:: 因为当我打印结果时它们是数字 temp_woonkamer = 0.0 和 temp1 = 0.0 如果我不是处理plc.writemem() 中的值,但也打印出来,你会看到有一个干净的结果,所以 plc.writeMem 上的某些东西出了问题。我需要发布我的 S71200 对象吗?:
pi@raspberrypi:~/scripts $ python Temp_buiten.py@▒▒▒5.3A▒~▒21.062pi@raspberrypi:~/scripts $ -
很抱歉,我不是 PLC 或 RPI 方面的专家,无法进一步帮助您。
-
好的,Leon,谢谢。我希望有人路过,对此有所了解。