PLC I/O

PLC I/O 用于控制主机设备的输入/输出 (I/O) 功能。

以下是主机对PLC I/O功能的支持:

主机

数字输入器

继电器

StampPLC

UiFlow2 应用示例

数字输入控制继电器

在 UiFlow2 中打开 stamplc_plcio_example.m5f2 项目。

此示例演示如何使用数字输入控制继电器。

UiFlow2 代码块:

stamplc_plcio_example.png

示例输出:

None

MicroPython 应用示例

数字输入控制继电器

此示例演示如何使用数字输入控制继电器。

MicroPython 代码块:

  1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
  2#
  3# SPDX-License-Identifier: MIT
  4
  5import os, sys, io
  6import M5
  7from M5 import *
  8from hardware import DigitalInput
  9from hardware import Relay
 10
 11
 12label0 = None
 13digitalinput_0 = None
 14digitalinput_1 = None
 15digitalinput_2 = None
 16digitalinput_3 = None
 17relay_0 = None
 18relay_1 = None
 19relay_2 = None
 20relay_3 = None
 21
 22
 23def digitalinput_0_falling_event(args):
 24    global \
 25        label0, \
 26        digitalinput_0, \
 27        digitalinput_1, \
 28        digitalinput_2, \
 29        digitalinput_3, \
 30        relay_0, \
 31        relay_1, \
 32        relay_2, \
 33        relay_3
 34    relay_0.on()
 35
 36
 37def digitalinput_0_rising_event(args):
 38    global \
 39        label0, \
 40        digitalinput_0, \
 41        digitalinput_1, \
 42        digitalinput_2, \
 43        digitalinput_3, \
 44        relay_0, \
 45        relay_1, \
 46        relay_2, \
 47        relay_3
 48    relay_0.off()
 49
 50
 51def digitalinput_1_falling_event(args):
 52    global \
 53        label0, \
 54        digitalinput_0, \
 55        digitalinput_1, \
 56        digitalinput_2, \
 57        digitalinput_3, \
 58        relay_0, \
 59        relay_1, \
 60        relay_2, \
 61        relay_3
 62    relay_1.on()
 63
 64
 65def digitalinput_1_rising_event(args):
 66    global \
 67        label0, \
 68        digitalinput_0, \
 69        digitalinput_1, \
 70        digitalinput_2, \
 71        digitalinput_3, \
 72        relay_0, \
 73        relay_1, \
 74        relay_2, \
 75        relay_3
 76    relay_1.off()
 77
 78
 79def digitalinput_2_falling_event(args):
 80    global \
 81        label0, \
 82        digitalinput_0, \
 83        digitalinput_1, \
 84        digitalinput_2, \
 85        digitalinput_3, \
 86        relay_0, \
 87        relay_1, \
 88        relay_2, \
 89        relay_3
 90    relay_2.on()
 91
 92
 93def digitalinput_2_rising_event(args):
 94    global \
 95        label0, \
 96        digitalinput_0, \
 97        digitalinput_1, \
 98        digitalinput_2, \
 99        digitalinput_3, \
100        relay_0, \
101        relay_1, \
102        relay_2, \
103        relay_3
104    relay_2.off()
105
106
107def digitalinput_3_falling_event(args):
108    global \
109        label0, \
110        digitalinput_0, \
111        digitalinput_1, \
112        digitalinput_2, \
113        digitalinput_3, \
114        relay_0, \
115        relay_1, \
116        relay_2, \
117        relay_3
118    relay_3.on()
119
120
121def digitalinput_3_rising_event(args):
122    global \
123        label0, \
124        digitalinput_0, \
125        digitalinput_1, \
126        digitalinput_2, \
127        digitalinput_3, \
128        relay_0, \
129        relay_1, \
130        relay_2, \
131        relay_3
132    relay_3.off()
133
134
135def setup():
136    global \
137        label0, \
138        digitalinput_0, \
139        digitalinput_1, \
140        digitalinput_2, \
141        digitalinput_3, \
142        relay_0, \
143        relay_1, \
144        relay_2, \
145        relay_3
146
147    M5.begin()
148    label0 = Widgets.Label("label0", 20, 2, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
149
150    digitalinput_0 = DigitalInput(1)
151    digitalinput_0.irq(digitalinput_0_falling_event, digitalinput_0.IRQ_FALLING)
152    digitalinput_0.irq(digitalinput_0_rising_event, digitalinput_0.IRQ_RISING)
153    digitalinput_1 = DigitalInput(2)
154    digitalinput_1.irq(digitalinput_1_falling_event, digitalinput_1.IRQ_FALLING)
155    digitalinput_1.irq(digitalinput_1_rising_event, digitalinput_1.IRQ_RISING)
156    digitalinput_2 = DigitalInput(3)
157    digitalinput_2.irq(digitalinput_2_falling_event, digitalinput_2.IRQ_FALLING)
158    digitalinput_2.irq(digitalinput_2_rising_event, digitalinput_2.IRQ_RISING)
159    digitalinput_3 = DigitalInput(4)
160    digitalinput_3.irq(digitalinput_3_falling_event, digitalinput_3.IRQ_FALLING)
161    digitalinput_3.irq(digitalinput_3_rising_event, digitalinput_3.IRQ_RISING)
162    relay_0 = Relay(1)
163    relay_1 = Relay(2)
164    relay_2 = Relay(3)
165    relay_3 = Relay(4)
166
167
168def loop():
169    global \
170        label0, \
171        digitalinput_0, \
172        digitalinput_1, \
173        digitalinput_2, \
174        digitalinput_3, \
175        relay_0, \
176        relay_1, \
177        relay_2, \
178        relay_3
179    M5.update()
180
181
182if __name__ == "__main__":
183    try:
184        setup()
185        while True:
186            loop()
187    except (Exception, KeyboardInterrupt) as e:
188        try:
189            from utility import print_error_msg
190
191            print_error_msg(e)
192        except ImportError:
193            print("please update to latest firmware")

示例输出:

None

API参考