mirror of
https://github.com/uhi22/pyPLC.git
synced 2024-11-20 01:13:58 +00:00
Merge pull request #11 from jsphuebner/chademo_back
Added timeout for CHAdeMO current request
This commit is contained in:
commit
e4d8a0c921
1 changed files with 17 additions and 7 deletions
|
@ -8,10 +8,13 @@
|
||||||
|
|
||||||
import serial # the pyserial
|
import serial # the pyserial
|
||||||
from serial.tools.list_ports import comports
|
from serial.tools.list_ports import comports
|
||||||
from time import sleep
|
from time import sleep, time
|
||||||
from configmodule import getConfigValue, getConfigValueBool
|
from configmodule import getConfigValue, getConfigValueBool
|
||||||
import sys # For exit_on_session_end hack
|
import sys # For exit_on_session_end hack
|
||||||
|
|
||||||
|
PinCp = "P8_18"
|
||||||
|
PinPowerRelay = "P8_16"
|
||||||
|
|
||||||
if (getConfigValue("digital_output_device")=="beaglebone"):
|
if (getConfigValue("digital_output_device")=="beaglebone"):
|
||||||
# In case we run on beaglebone, we want to use GPIO ports.
|
# In case we run on beaglebone, we want to use GPIO ports.
|
||||||
import Adafruit_BBIO.GPIO as GPIO
|
import Adafruit_BBIO.GPIO as GPIO
|
||||||
|
@ -85,7 +88,7 @@ class hardwareInterface():
|
||||||
def setStateB(self):
|
def setStateB(self):
|
||||||
self.addToTrace("Setting CP line into state B.")
|
self.addToTrace("Setting CP line into state B.")
|
||||||
if (getConfigValue("digital_output_device")=="beaglebone"):
|
if (getConfigValue("digital_output_device")=="beaglebone"):
|
||||||
GPIO.output("P8_18", GPIO.LOW)
|
GPIO.output(PinCp, GPIO.LOW)
|
||||||
if (getConfigValue("digital_output_device")=="celeron55device"):
|
if (getConfigValue("digital_output_device")=="celeron55device"):
|
||||||
self.ser.write(bytes("cp=0\n", "utf-8"))
|
self.ser.write(bytes("cp=0\n", "utf-8"))
|
||||||
self.outvalue &= ~1
|
self.outvalue &= ~1
|
||||||
|
@ -93,7 +96,7 @@ class hardwareInterface():
|
||||||
def setStateC(self):
|
def setStateC(self):
|
||||||
self.addToTrace("Setting CP line into state C.")
|
self.addToTrace("Setting CP line into state C.")
|
||||||
if (getConfigValue("digital_output_device")=="beaglebone"):
|
if (getConfigValue("digital_output_device")=="beaglebone"):
|
||||||
GPIO.output("P8_18", GPIO.HIGH)
|
GPIO.output(PinCp, GPIO.HIGH)
|
||||||
if (getConfigValue("digital_output_device")=="celeron55device"):
|
if (getConfigValue("digital_output_device")=="celeron55device"):
|
||||||
self.ser.write(bytes("cp=1\n", "utf-8"))
|
self.ser.write(bytes("cp=1\n", "utf-8"))
|
||||||
self.outvalue |= 1
|
self.outvalue |= 1
|
||||||
|
@ -101,7 +104,7 @@ class hardwareInterface():
|
||||||
def setPowerRelayOn(self):
|
def setPowerRelayOn(self):
|
||||||
self.addToTrace("Switching PowerRelay ON.")
|
self.addToTrace("Switching PowerRelay ON.")
|
||||||
if (getConfigValue("digital_output_device")=="beaglebone"):
|
if (getConfigValue("digital_output_device")=="beaglebone"):
|
||||||
GPIO.output("P8_16", GPIO.HIGH)
|
GPIO.output(PinPowerRelay, GPIO.HIGH)
|
||||||
if (getConfigValue("digital_output_device")=="celeron55device"):
|
if (getConfigValue("digital_output_device")=="celeron55device"):
|
||||||
self.ser.write(bytes("contactor=1\n", "utf-8"))
|
self.ser.write(bytes("contactor=1\n", "utf-8"))
|
||||||
self.outvalue |= 2
|
self.outvalue |= 2
|
||||||
|
@ -109,7 +112,7 @@ class hardwareInterface():
|
||||||
def setPowerRelayOff(self):
|
def setPowerRelayOff(self):
|
||||||
self.addToTrace("Switching PowerRelay OFF.")
|
self.addToTrace("Switching PowerRelay OFF.")
|
||||||
if (getConfigValue("digital_output_device")=="beaglebone"):
|
if (getConfigValue("digital_output_device")=="beaglebone"):
|
||||||
GPIO.output("P8_16", GPIO.LOW)
|
GPIO.output(PinPowerRelay, GPIO.LOW)
|
||||||
if (getConfigValue("digital_output_device")=="celeron55device"):
|
if (getConfigValue("digital_output_device")=="celeron55device"):
|
||||||
self.ser.write(bytes("contactor=0\n", "utf-8"))
|
self.ser.write(bytes("contactor=0\n", "utf-8"))
|
||||||
self.outvalue &= ~2
|
self.outvalue &= ~2
|
||||||
|
@ -218,8 +221,8 @@ class hardwareInterface():
|
||||||
|
|
||||||
if (getConfigValue("digital_output_device") == "beaglebone"):
|
if (getConfigValue("digital_output_device") == "beaglebone"):
|
||||||
# Port configuration according to https://github.com/jsphuebner/pyPLC/commit/475f7fe9f3a67da3d4bd9e6e16dfb668d0ddb1d6
|
# Port configuration according to https://github.com/jsphuebner/pyPLC/commit/475f7fe9f3a67da3d4bd9e6e16dfb668d0ddb1d6
|
||||||
GPIO.setup("P8_16", GPIO.OUT) #output for port relays
|
GPIO.setup(PinPowerRelay, GPIO.OUT) #output for port relays
|
||||||
GPIO.setup("P8_18", GPIO.OUT) #output for CP
|
GPIO.setup(PinCp, GPIO.OUT) #output for CP
|
||||||
|
|
||||||
def __init__(self, callbackAddToTrace=None, callbackShowStatus=None):
|
def __init__(self, callbackAddToTrace=None, callbackShowStatus=None):
|
||||||
self.callbackAddToTrace = callbackAddToTrace
|
self.callbackAddToTrace = callbackAddToTrace
|
||||||
|
@ -239,6 +242,7 @@ class hardwareInterface():
|
||||||
self.accuMaxCurrent = 0.0
|
self.accuMaxCurrent = 0.0
|
||||||
self.contactor_confirmed = False # Confirmation from hardware
|
self.contactor_confirmed = False # Confirmation from hardware
|
||||||
self.plugged_in = None # None means "not known yet"
|
self.plugged_in = None # None means "not known yet"
|
||||||
|
self.lastReceptionTime = 0
|
||||||
|
|
||||||
self.maxChargerVoltage = 0
|
self.maxChargerVoltage = 0
|
||||||
self.maxChargerCurrent = 10
|
self.maxChargerCurrent = 10
|
||||||
|
@ -442,12 +446,18 @@ class hardwareInterface():
|
||||||
if self.accuMaxCurrent != message.data[3]:
|
if self.accuMaxCurrent != message.data[3]:
|
||||||
self.addToTrace("CHAdeMO: Set current request to %d A" % message.data[3])
|
self.addToTrace("CHAdeMO: Set current request to %d A" % message.data[3])
|
||||||
self.accuMaxCurrent = message.data[3]
|
self.accuMaxCurrent = message.data[3]
|
||||||
|
self.lastReceptionTime = time()
|
||||||
|
|
||||||
if self.capacity > 0:
|
if self.capacity > 0:
|
||||||
soc = message.data[6] / self.capacity * 100
|
soc = message.data[6] / self.capacity * 100
|
||||||
if self.simulatedSoc != soc:
|
if self.simulatedSoc != soc:
|
||||||
self.addToTrace("CHAdeMO: Set SoC to %d %%" % soc)
|
self.addToTrace("CHAdeMO: Set SoC to %d %%" % soc)
|
||||||
self.simulatedSoc = soc
|
self.simulatedSoc = soc
|
||||||
|
#if nothing was received for over a second, time out
|
||||||
|
if self.lastReceptionTime < (time() - 1):
|
||||||
|
if self.accuMaxCurrent != 0:
|
||||||
|
self.addToTrace("CHAdeMO: No current limit update for over 1s, setting current to 0")
|
||||||
|
self.accuMaxCurrent = 0
|
||||||
|
|
||||||
def myPrintfunction(s):
|
def myPrintfunction(s):
|
||||||
print("myprint " + s)
|
print("myprint " + s)
|
||||||
|
|
Loading…
Reference in a new issue