HART中的Burst-Mode(突发模式)

突发模式是高速的数据传输模式,其模式通常有几个数据源。在数据总线中,突发模式通常变为专为满足一个设备的通道。

辅助材料1:

Burst-Mode is optional for a HART products but is strongly recommended.

HART Burst-Mode supports the publishing of cyclical process data using "Burst" messaging. In this mode, a device is instructed to publish the response to a command continuously without any further Master or Host action.

If a Field Device supports Burst-Mode then all of Commands 103-105 and Commands 107-109 must be implemented. Furthermore, devices implementing Burst-Mode must support at least 3 Burst Messages. Existing, legacy Field Devices updated from HART 5 are allowed to support only one Burst Message.

辅助材料2:(https://www.crifan.com/comparation_among_hart5_hart6_hart7/)

HART7相对于HART5(和HART6)的功能上,主要增加了:

(1)Enhanced Burst Mode

增强的突发传送模式

更适用于高速的无线(wireless)传输,因为其速度是250Kbit/s,而相对有线的(wired)传输速度是1.2kbit/s。

所以,对于有线的,双线回路(two-wired loop)来说,因其必须工作在小于4mA的环境下,更推荐使用HART5的查询(Polling)模式用于诊断信息(diagnositics)。

而对于4-20mA的设备来说,HART5,也已经够用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是DS1302读写操作的函数代码及主程序验证代码: ```python import RPi.GPIO as GPIO import time class DS1302: def __init__(self, ce_pin, io_pin, sclk_pin): self.ce_pin = ce_pin self.io_pin = io_pin self.sclk_pin = sclk_pin self._init_gpio() def _init_gpio(self): GPIO.setmode(GPIO.BCM) GPIO.setup(self.ce_pin, GPIO.OUT) GPIO.setup(self.io_pin, GPIO.OUT) GPIO.setup(self.sclk_pin, GPIO.OUT) def _send_byte(self, data): for i in range(8): GPIO.output(self.io_pin, data & 0x01) data >>= 1 GPIO.output(self.sclk_pin, GPIO.HIGH) time.sleep(0.0001) GPIO.output(self.sclk_pin, GPIO.LOW) time.sleep(0.0001) def _receive_byte(self): data = 0 for i in range(8): data |= GPIO.input(self.io_pin) << i GPIO.output(self.sclk_pin, GPIO.HIGH) time.sleep(0.0001) GPIO.output(self.sclk_pin, GPIO.LOW) time.sleep(0.0001) return data def _start(self): GPIO.output(self.ce_pin, GPIO.HIGH) GPIO.output(self.sclk_pin, GPIO.LOW) time.sleep(0.0001) def _stop(self): GPIO.output(self.ce_pin, GPIO.LOW) GPIO.output(self.sclk_pin, GPIO.LOW) time.sleep(0.0001) def write_byte(self, addr, data): self._start() self._send_byte(addr << 1) self._send_byte(data) self._stop() def read_byte(self, addr): self._start() self._send_byte(addr << 1 | 0x01) data = self._receive_byte() self._stop() return data def write_burst(self, data): self._start() self._send_byte(0xBE) for i in range(8): self._send_byte(data[i]) self._stop() def read_burst(self): self._start() self._send_byte(0xBF) data = [] for i in range(8): data.append(self._receive_byte()) self._stop() return data ds1302 = DS1302(17, 27, 22) def set_ds1302_datetime(year, month, day, weekday, hour, minute, second): ds1302.write_byte(0x8E, 0x00) #禁止写保护 ds1302.write_byte(0x80, second) ds1302.write_byte(0x82, minute) ds1302.write_byte(0x84, hour) ds1302.write_byte(0x86, weekday) ds1302.write_byte(0x88, day) ds1302.write_byte(0x8C, year % 100) #年份只能用两位数表示 ds1302.write_byte(0x8E, 0x80) #使能写保护 def get_ds1302_datetime(): data = ds1302.read_burst() year = 2000 + data[6] month = data[4] day = data[3] weekday = data[5] hour = data[2] minute = data[1] second = data[0] return (year, month, day, weekday, hour, minute, second) def display_datetime(datetime): year, month, day, weekday, hour, minute, second = datetime print("%04d-%02d-%02d %02d:%02d:%02d" % (year, month, day, hour, minute, second)) def main(): set_ds1302_datetime(2023, 5, 22, 1, 18, 30, 0) while True: datetime = get_ds1302_datetime() display_datetime(datetime) time.sleep(1) if __name__ == '__main__': main() ``` 上述代码,`DS1302`类封装了DS1302的读写操作,包括单字节写、单字节读、写入burst模式和读取burst模式。`set_ds1302_datetime`函数用于设置DS1302的日期时间,`get_ds1302_datetime`函数用于读取DS1302的日期时间,`display_datetime`函数用于在控制台上显示日期时间。主程序首先设置DS1302的日期时间为2023年5月22号星期一18点30分00秒,然后循环读取并显示DS1302的日期时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingLife99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值