From 0d67ae317d432d9ea6731ea7c41e27ed9f6e67d2 Mon Sep 17 00:00:00 2001 From: "wusheng.tws" Date: Fri, 29 Apr 2022 14:06:17 +0800 Subject: [PATCH] provide zzio606 module for driver and document Signed-off-by: wusheng.tws --- .../python/libraries/zzio606/README.md | 128 ++++++++++++++++++ .../python/libraries/zzio606/zzio606.py | 26 ++++ 2 files changed, 154 insertions(+) create mode 100644 haas_lib_bundles/python/libraries/zzio606/README.md create mode 100644 haas_lib_bundles/python/libraries/zzio606/zzio606.py diff --git a/haas_lib_bundles/python/libraries/zzio606/README.md b/haas_lib_bundles/python/libraries/zzio606/README.md new file mode 100644 index 0000000000..7602d0a871 --- /dev/null +++ b/haas_lib_bundles/python/libraries/zzio606/README.md @@ -0,0 +1,128 @@ +# 郎汉德6路继电器 - ZZIO606 + +## 一、产品简介 + +   +郎汉德6路继电器支持Modbus-RTU协议,是工农业场景选用最多的传感器之一。详细参数如下: +
+ +
+
+ +## 二、技术参数 +
+ +
+
+ +## 三、软件接口 + +### ZZIO606(...) - 创建 ZZIO606 驱动对象 +* 函数原型: +> zzioObj = ZZIO606(mbObj, mbAddr) + +* 参数说明: + +|参数|类型|必选参数?|说明| +|-----|----|:---:|----| +|mbObj|modbus|是|调用此函数前需确保 modbus 对象已初始化| +|mbAddr|int|是|默认值是1| + +* 返回值: +成功返回ZZIO606对象,失败抛出 Exception + +* 示例代码: + +```python +import modbus as mb +import zzio606 + +mb.init('modbus_485_4800') +zzioObj = zzio606.ZZIO606(mb, 1) +``` + +### openChannel() - 关闭指定通道 + +* 函数原型: +> zzioObj.openChannel(channelID) + +* 参数说明: + +|参数|类型|必选参数?|说明| +|-----|----|:---:|----| +|channelID|int|是|通道id| + + +* 返回值: +打开指定通道,失败抛出异常,参考[modbus错误码表](https://haas.iot.aliyun.com/haasapi/index.html?spm=a2cpu.b16145223.0.0.595660b1KQYjx1#/Python/docs/zh-CN/haas_extended_api/modbus) + + +### closeChannel() - 关闭指定通道 + +* 函数原型: +> zzioObj.closeChannel(channelID) + +* 参数说明: + +|参数|类型|必选参数?|说明| +|-----|----|:---:|----| +|channelID|int|是|通道id| + +* 返回值: +关闭指定通道,失败抛出异常,参考[modbus错误码表](https://haas.iot.aliyun.com/haasapi/index.html?spm=a2cpu.b16145223.0.0.595660b1KQYjx1#/Python/docs/zh-CN/haas_extended_api/modbus) + + +* 参考代码 +```python +import modbus as mb +import zzio606 + +mb.init('modbus_485_4800') +zzioObj = zzio606.ZZIO606(mb, 1) + +zzio606.openChannel(1) +zzio606.closeChannel(1) + +``` + + +## 四、接口案例 +控制第一个通道开闭 + +* 代码: +```python +# board.json配置: +{ + "name": "board-name", + "version": "1.0.0", + "io": { + "modbus_485_4800": { + "type": "MODBUS", + "mode": 0, + "port": 2, + "baudrate": 4800, + "priority": 0, + "timeout": 200 + }, + }, + "debugLevel": "ERROR", + "repl": "disable" +} + +``` +```python +import modbus as mb +import zzio606 + +mb.init('modbus_485_4800') +zzioObj = zzio606.ZZIO606(mb, 1) + +zzio606.openChannel(1) +zzio606.closeChannel(1) + +``` + +## 参考文献及购买链接 +[1] [郎汉德官网](https://www.lonhand.com/index/io/22.html?hmsr=tb) + +[3] [商品链接](https://item.taobao.com/item.htm?spm=a230r.1.14.12.68c03096UXtt9a&id=566347546505&ns=1&abbucket=18#detail) diff --git a/haas_lib_bundles/python/libraries/zzio606/zzio606.py b/haas_lib_bundles/python/libraries/zzio606/zzio606.py new file mode 100644 index 0000000000..0ba3ba149d --- /dev/null +++ b/haas_lib_bundles/python/libraries/zzio606/zzio606.py @@ -0,0 +1,26 @@ +class ZZIO606(object): + + def __init__(self, mbObj, devAddr): + self.mbObj = mbObj + self.devAddr = devAddr + + def openChannel(self, chid): + if self.mbObj is None: + raise ValueError("invalid modbus object.") + ret = self.mbObj.writeCoil(self.devAddr, chid, 0xff00, 200) + return ret[0] + + def closeChannel(self, chid): + if self.mbObj is None: + raise ValueError("invalid modbus object.") + ret = self.mbObj.writeCoil(self.devAddr, chid, 0, 200) + return ret[0] + + def getChannelStatus(self): + if self.mbObj is None: + raise ValueError("invalid modbus object.") + status = bytearray(1) + ret = self.mbObj.readCoils(self.devAddr, 0, 6, status, 200) + if ret[0] < 0: + raise ValueError("modbus readCoils failed, errno:", ret[0]) + return status -- GitLab