Skip to content

Commit

Permalink
fix bug: C_CS_NA_1 encode wrong
Browse files Browse the repository at this point in the history
  • Loading branch information
timercrack committed Jan 17, 2016
1 parent f9d9529 commit 0757f90
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
1 change: 1 addition & 0 deletions pydatacoll/protocols/iec104/device.py
Expand Up @@ -131,6 +131,7 @@ async def receive(self):
try:
self.receive_handler = None
data = await self.reader.readexactly(2)
logger.debug('device[%s] recv frame head: %s', data.hex())
head = iec_head.parse(data)
data += await self.reader.readexactly(head.length)
recv_time = datetime.datetime.now()
Expand Down
2 changes: 1 addition & 1 deletion pydatacoll/protocols/iec104/frame.py
Expand Up @@ -701,7 +701,7 @@ def _decode_cp24time2a(obj, _):
# 103 时钟同步命令
ASDU_C_CS_NA_1 = Struct(
"ASDU_C_CS_NA_1",
Padding(24),
Padding(3),
cp56time2a,
)

Expand Down
35 changes: 35 additions & 0 deletions test/device_test.py
@@ -0,0 +1,35 @@
import aiohttp
import json
import asyncio
import argparse

async def device_call(address, port=8080, method='call', device_id=0, term_id=0, item_id=0, value=None):
try:
call_dict = {'device_id': device_id, 'term_id': term_id, 'item_id': item_id, 'value': value}
uri = 'http://{}:{}/api/v1/device_{}'.format(address, port, method)
print('send %s to %s' % (call_dict, uri))
async with aiohttp.post(uri, data=json.dumps(call_dict)) as r:
if r.status == 200:
rst = await r.json()
print('SUCCESS!')
print('result =', rst)
else:
rst = await r.text()
print('ERROR! code =', r.status)
print('err_msg =', rst)
except Exception as e:
print('ERROR: %s', repr(e))

if __name__ == '__main__':
parser = argparse.ArgumentParser(description='PyDataColl接口调试程序')
parser.add_argument('-a', type=str, default='127.0.0.1', help='采集程序IP地址,默认127.0.0.1')
parser.add_argument('-p', type=int, default=8080, help='采集程序监听端口,默认8080')
parser.add_argument('-m', type=str, default='call', help='调用接口, 设备招测: -m=call,设备控制: -m=ctrl')
parser.add_argument('-d', type=str, default='0', help='device_id, -d=1')
parser.add_argument('-t', type=str, default='0', help='term_id, -t=1')
parser.add_argument('-i', type=str, default='0', help='item_id, -d=1')
parser.add_argument('-v', type=float, default=0, help='value, -v=123.4')
args = parser.parse_args()
asyncio.get_event_loop().run_until_complete(device_call(
address=args.a, port=args.p, method=args.m, device_id=args.d, term_id=args.t, item_id=args.i, value=args.v
))

0 comments on commit 0757f90

Please sign in to comment.