Skip to content

Commit b61dee0

Browse files
committed
add write/read memory bank
update type hints
1 parent ae86add commit b61dee0

4 files changed

Lines changed: 160 additions & 74 deletions

File tree

example/example.py

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from time import sleep
77

88
from smsd.client import SmsdTcpClient, SmsdUsbClient
9-
from smsd.protocol import MODE, SMSD_LAN_CONFIG_TYPE
9+
from smsd.protocol import COMMAND, MEMORY_BANK, MODE, SMSD_LAN_CONFIG_TYPE
1010

1111
logging.basicConfig(level=logging.INFO)
1212

@@ -15,6 +15,8 @@
1515
client = SmsdTcpClient(address="192.168.1.2:5000", timeout=1.0)
1616
# client = SmsdUsbClient(address="COM7", timeout=1.0)
1717

18+
print(f"protocol version: {client._version}")
19+
1820
# sleep(2) # Без паузы при работе через USB при первом включении возвращается ошибка ERROR_ACCESS_TIMEOUT
1921

2022
print(f"authorization: {client.authorization()}")
@@ -65,17 +67,17 @@
6567
print(f"set_max_speed: {client.set_max_speed(200)}")
6668
print(f"get_max_speed: {client.get_max_speed()}")
6769

68-
print(f"set_min_speed: {client.set_min_speed(100)}")
70+
print(f"set_min_speed: {client.set_min_speed(70)}")
6971
print(f"get_min_speed: {client.get_min_speed()}")
7072

71-
print(f"set_acc: {client.set_acc(50)}")
72-
print(f"set_dec: {client.set_dec(50)}")
73+
print(f"set_acc: {client.set_acc(20)}")
74+
print(f"set_dec: {client.set_dec(20)}")
7375

7476
mode = MODE()
7577
mode.CURRENT_OR_VOLTAGE = 1
7678
mode.MOTOR_TYPE = 30
7779
mode.MICROSTEPPING = 4
78-
mode.WORK_CURRENT = 15
80+
mode.WORK_CURRENT = 10
7981
mode.STOP_CURRENT = 0
8082
mode.PROGRAM_N = 0
8183
print(f"set_mode: {client.set_mode(mode)}")
@@ -94,6 +96,16 @@
9496
# print(f"run_f: {client.run_r(500)}")
9597
# sleep(5)
9698

99+
print(f"status_powerstep01: {client.status_powerstep01}") # Обновляется после каждого вызова команды CMD_PowerSTEP01_xxx
100+
print(f" HIZ: {client.status_powerstep01.HIZ}")
101+
print(f" BUSY: {client.status_powerstep01.BUSY}")
102+
print(f" SW_F: {client.status_powerstep01.SW_F}")
103+
print(f" SW_EVN: {client.status_powerstep01.SW_EVN}")
104+
print(f" DIR: {client.status_powerstep01.DIR}")
105+
print(f" MOT_STATUS: {client.status_powerstep01.MOT_STATUS}")
106+
print(f" CMD_ERROR: {client.status_powerstep01.CMD_ERROR}")
107+
print(f" RESERVE: {client.status_powerstep01.RESERVE}")
108+
97109
print(f"move_f: {client.move_f(5000)}")
98110
sleep(5)
99111
print(f"move_r: {client.move_r(5000)}")
@@ -180,6 +192,25 @@
180192
print(f"clr_rele: {client.clr_rele()}")
181193
print(f"get_rele: {client.get_rele()}")
182194

195+
# memory0 = client.read_memory0()
196+
# print(f"read_memory0: {memory0.data[0].COMMAND}, {memory0.data[0].DATA}")
197+
# print(f"read_memory0: {memory0.data[1].COMMAND}, {memory0.data[1].DATA}")
198+
199+
# print(f"read_memory1: {client.read_memory1()}")
200+
# print(f"read_memory2: {client.read_memory2()}")
201+
# print(f"read_memory3: {client.read_memory3()}")
202+
203+
# memory1 = MEMORY_BANK()
204+
# memory1.data[0].COMMAND = COMMAND.CMD_POWERSTEP01_SET_MIN_SPEED
205+
# memory1.data[0].DATA = 300
206+
# memory1.data[1].COMMAND = COMMAND.CMD_POWERSTEP01_SET_MAX_SPEED
207+
# memory1.data[1].DATA = 800
208+
# print(f"write_memory1: {client.write_memory1(memory1)}")
209+
210+
# print(f"write_memory0: {client.write_memory0(memory1)}")
211+
# print(f"write_memory2: {client.write_memory2(memory1)}")
212+
# print(f"write_memory3: {client.write_memory3(memory1)}")
213+
183214
# print(f"start_program_mem0: {client.start_program_mem0()}")
184215
# print(f"start_program_mem1: {client.start_program_mem1()}")
185216
# print(f"start_program_mem2: {client.start_program_mem2()}")

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from setuptools import setup
44

55
setup(name="python-smsd-lan",
6-
version="0.0.6",
6+
version="0.0.7",
77
description="SMSD LAN-series controller library",
88
url="https://github.com/RAA80/python-smsd-lan",
99
author="Alexey Ryadno",

smsd/protocol.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
"""Протокол обмена данными с SMSD-LAN."""
44

5-
from ctypes import LittleEndianStructure, Structure, Union, c_ubyte, c_uint, c_ushort
5+
from ctypes import LittleEndianStructure, Union, c_ubyte, c_uint, c_ushort
66
from enum import IntEnum
77

88

@@ -123,7 +123,7 @@ class COMMAND(IntEnum):
123123
CMD_POWERSTEP01_SCAN_MARK2_R = 0x3E # поиск метки положения в обратном направлении
124124

125125

126-
class LAN_COMMAND_TYPE(Structure):
126+
class LAN_COMMAND_TYPE(LittleEndianStructure):
127127
"""Структура информационного пакета передачи данных."""
128128

129129
_pack_ = 1
@@ -137,7 +137,7 @@ class LAN_COMMAND_TYPE(Structure):
137137
]
138138

139139

140-
class LAN_ERROR_STATISTICS(Structure):
140+
class LAN_ERROR_STATISTICS(LittleEndianStructure):
141141
"""Структура счётчиков событий."""
142142

143143
_pack_ = 1
@@ -177,7 +177,7 @@ class POWERSTEP_STATUS_TYPEDEF(LittleEndianStructure):
177177
]
178178

179179

180-
class COMMANDS_RETURN_DATA_TYPE(Structure):
180+
class COMMANDS_RETURN_DATA_TYPE(LittleEndianStructure):
181181
"""Ответ на команды CODE_CMD_RESPONSE или CODE_CMD_POWERSTEP01."""
182182

183183
_anonymous_ = ("STATUS_POWERSTEP01",)
@@ -200,7 +200,7 @@ class SMSD_CMD_TYPE(LittleEndianStructure):
200200
]
201201

202202

203-
class SMSD_LAN_CONFIG_TYPE(Structure):
203+
class SMSD_LAN_CONFIG_TYPE(LittleEndianStructure):
204204
"""Структура сетевых настроек контроллера."""
205205

206206
_pack_ = 1
@@ -282,3 +282,12 @@ class MODE(Union):
282282
("bits", MODE_BITS),
283283
("as_byte", c_uint),
284284
]
285+
286+
287+
class MEMORY_BANK(LittleEndianStructure):
288+
"""Структура для чтения/записи исполнительных программ банка памяти контроллера."""
289+
290+
_pack_ = 1
291+
_fields_ = [
292+
("data", SMSD_CMD_TYPE * 255),
293+
]

0 commit comments

Comments
 (0)