Skip to content

Commit 282fdf2

Browse files
authored
fix a funcion name, add example usage (gijzelaerr#226)
1 parent c35eee0 commit 282fdf2

3 files changed

Lines changed: 56 additions & 3 deletions

File tree

example/write_multi.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import ctypes
2+
import snap7
3+
from snap7.types import S7WLByte, S7DataItem, S7WLWord, S7WLReal, S7WLTimer
4+
from snap7.types import areas, wordlen_to_ctypes
5+
from snap7.util import set_int, set_real, set_word, get_int, get_real, get_s5time
6+
7+
8+
client = snap7.client.Client()
9+
client.connect('192.168.100.100', 0, 2)
10+
11+
items = []
12+
13+
14+
def set_data_item(area, word_len, db_number: int, start: int, amount: int, data: bytearray) -> S7DataItem:
15+
item = S7DataItem()
16+
item.Area = ctypes.c_int32(area)
17+
item.WordLen = ctypes.c_int32(word_len)
18+
item.DBNumber = ctypes.c_int32(db_number)
19+
item.Start = ctypes.c_int32(start)
20+
item.Amount = ctypes.c_int32(amount)
21+
array_class = ctypes.c_uint8 * len(data)
22+
cdata = array_class.from_buffer_copy(data)
23+
item.pData = ctypes.cast(cdata, ctypes.POINTER(array_class)).contents
24+
return item
25+
26+
27+
int_values = [10, 20, 30, 40]
28+
ints = bytearray(len(int_values) * 2)
29+
for i, value in enumerate(int_values):
30+
set_int(ints, i * 2, value)
31+
32+
real = bytearray(4)
33+
set_real(real, 0, 42.5)
34+
35+
counters = 0x2999.to_bytes(2, 'big') + 0x1111.to_bytes(2, 'big')
36+
37+
item1 = set_data_item(area=areas.DB, word_len=S7WLWord, db_number=1, start=0, amount=4, data=ints)
38+
item2 = set_data_item(area=areas.DB, word_len=S7WLReal, db_number=1, start=8, amount=1, data=real)
39+
item3 = set_data_item(area=areas.TM, word_len=S7WLTimer, db_number=0, start=2, amount=2, data=counters)
40+
41+
items.append(item1)
42+
items.append(item2)
43+
items.append(item3)
44+
45+
client.write_multi_vars(items)
46+
47+
db_int = client.db_read(1, 0, 8)
48+
db_real = client.db_read(1, 8, 12)
49+
db_counters = client.ct_read(2, 2)
50+
51+
print(f'int values: {[get_int(db_int, i * 2) for i in range(4)]}')
52+
print(f'real value: {get_real(db_real, 0)}')
53+
print(f'counters: {get_s5time(counters, 0)}, {get_s5time(counters, 2)}')

snap7/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -909,7 +909,7 @@ def tm_write(self, start: int, amount: int, data: bytearray) -> int:
909909
check_error(result)
910910
return result
911911

912-
def writemultivars(self, items: List[S7DataItem]) -> int:
912+
def write_multi_vars(self, items: List[S7DataItem]) -> int:
913913
# Cli_WriteMultiVars
914914
items_count = c_int32(len(items))
915915
data = bytearray()

test/test_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,7 @@ def test_tmw_rite(self):
872872
self.assertRaises(Snap7Exception, self.client.tm_write, 0, 100, bytes(200))
873873
self.assertRaises(ValueError, self.client.tm_write, 0, 2, bytes(2))
874874

875-
def test_writemultivars(self):
875+
def test_write_multi_vars(self):
876876
# Cli_WriteMultiVars
877877
items_count = 3
878878
items = []
@@ -891,7 +891,7 @@ def test_writemultivars(self):
891891
item.pData = ctypes.cast(cdata, ctypes.POINTER(array_class)).contents
892892
items.append(item)
893893
expected_list.append(data)
894-
result = self.client.writemultivars(items)
894+
result = self.client.write_multi_vars(items)
895895
self.assertEqual(0, result)
896896
self.assertEqual(expected_list[0], self.client.db_read(db_number=1, start=0, size=4))
897897
self.assertEqual(expected_list[1], self.client.ct_read(0, 2))

0 commit comments

Comments
 (0)