Я новичок в программировании на Python; тем не менее, у меня более десяти лет опыта программирования ПЛК для больших систем управления.
Работая дома во время этого дерьма COVID, у меня нет доступа ко всем моим обычным настольным тестовым устройствам. Мне нужно было создать симулятор широтно-импульсной модуляции с моим Raspberry Pi 3B, чтобы я мог протестировать и воссоздать функциональность импульсного расходомера на моем PL C, чтобы проверить функциональность моего PL C.
Рабочий процесс:
- Точка ввода GPIO (12)
- Частота ввода (10 Гц)
- Рабочий цикл ввода (50%)
- Нажмите «Start Simulation»
- Нажмите «Stop Simulation»
- Повторно введите точку GPIO, частоту, рабочий цикл
- Нажмите «Start Simulation»
- Нажмите «Остановить симуляцию»
Шаги 1-6 работают без нареканий; однако, когда я пытаюсь выполнить шаг 7, параметры GPIO Point, Frequency и Duty Cycle снова не передаются в функцию. Вместо этого, ШИМ запускается и значения повсюду. Шаг 8 работает.
Это мой код:
import RPi.GPIO as GPIO
from guizero import App, Text, TextBox, PushButton
from time import sleep
def Start():
global PWM
global IOPoint
global Freq
global DutyCycle
IOPoint = int(IO_IN.value) #Pass I/O Point Value
Freq = int(FREQ_IN.value) #Pass Frequency Value
DutyCycle = int(DC_IN.value) #Pass Duty Cycle Value
GPIO.setwarnings(False) #Disable GPIO Warnings
GPIO.setmode(GPIO.BOARD) #Set Pin Numbering System
GPIO.setup(IOPoint,GPIO.OUT) #Set GPIO Settings
PWM = GPIO.PWM(IOPoint, Freq) #Create PWM Instance With Frequency (Hz)
PWM.start(DutyCycle) #Start PWM of Required Duty Cycle
def Stop():
IO_IN.value = "" #Clears IO_IN Value
FREQ_IN.value = "" #Clears FREQ_IN Value
DC_IN.value = "" #Clears DC_IN Value
PWM.stop()
GPIO.cleanup()
#Call GUI Window
APP = App(layout="grid", title="Pulse With Modulation Utility", height=180, width=380)
#IO Point Input
LABEL_0 = Text(APP, text="I/O Point", grid=[0,0], size=16, font="Ariel", color="Black", align="left")
IO_IN = TextBox(APP, grid=[1,0])
#Frequency Input
LABEL_1 = Text(APP, text="Enter Frequency (Hz)", grid=[0,1], size=16, font="Ariel", color="Black", align="left")
FREQ_IN = TextBox(APP, grid=[1,1])
#Duty Cycle Input
LABEL_2 = Text(APP, text="Enter Duty Cycle", grid=[0,2], size=16, font="Ariel", color="Black", align="left")
DC_IN = TextBox(APP, grid=[1,2])
#Run Start
START = PushButton(APP, command=Start, text="Start Simulation", grid=[1,3], align="top")
#Run Stop
STOP = PushButton(APP, command=Stop, text="Stop Simulation", grid=[1,4], align="top")
#Display Application
APP.display()
Вот снимок экрана работающей программы. Любая помощь будет принята с благодарностью, поэтому я могу убедиться, что мой код PL C работает должным образом, прежде чем внедрить его в новую систему управления.
Заранее спасибо за помощь.