问题标签 [rs485]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - `ModbusSerialClient` 的性能不佳,与超时一样快
对于一个项目,我在 RS485 串行线路上连接了 4 个 modbus 设备。这些设备工作正常,现在我正在编写一个控制器,我对pymodbus
.
我找到了这个线程Python modbus 库,在我看来,那里可能有更好的 python modbus 库。pymodbus
易于使用,如果可能的话,我宁愿继续使用它。
但是我发现任何读/写例程返回的时间都等于超时。这对我来说似乎不对,所以我写了一个快速测试:
这是我得到的输出
我用不同的 RS845<->USB 转换器对其进行了测试,我总是得到类似的结果。
其他人可以证实这一点吗?或者我是否遗漏了一些未记录的论点,这些论点会提高ModbusSerialClient
's 的性能?
python - 端口开放问题 Python、PySerial、PyQt
我正在编写一个应用程序,允许我通过选定的串行端口(使用 RS485)连接到我的设备。一切都很好,除了一件事。当单击按钮时,我的应用程序会调用该功能并打开连接,但是一旦此功能执行所有操作,它应该立即关闭端口连接。因此,当我稍后想使用此连接时,我收到“未定义序列”的错误。
我希望我的连接打开,因为当我关闭程序时单击按钮,以便我可以同时使用 lineEdit(按 Enter 后触发其他功能)向设备发送一些命令。你们能帮帮我吗?
编辑:好的,我使用 QThreads 解决了这个问题。但是我仍然不知道为什么如果我的程序的某个部分正在使用串行端口,另一个则不能在不为自己打开端口的情况下执行它(这是不可能的,因为只有一个“东西”可以连接到串行端口一次)。
vb.net - vb.net 应用 RS485 ascii 通讯
我已经构建了一个使用 RS232 在 PC 上运行并与串行设备通信的 vb.net 应用程序。该应用程序运行良好。该应用程序已迁移到使用带有 RS485 端口的工业 PC,该端口将自动将我的 RS232 转换为 RS485。我的问题是我正在使用的设备的默认 RS485 地址为 7。我不确定该地址如何与 ascii RS485 一起使用。我知道寻址如何与 485 以上的 modbus 一起工作,但不适用于 ascii 通信(具体的通信类型是SCPI Standard Commands for Programmable Instruments)。
我正在使用标准的 .net System.IO.Ports.SerialPort类,不确定这个 RS485 地址如何适合这种通信方案。
任何想法都会很棒。
serial-port - Delphi TcomPort 和 RS485 的问题
我正在尝试通过 Delphi 7-TComPort 库与 SMC LEC6 伺服电机控制器通信。我已阅读相关问题TComPort 和 Modbus。我的问题是如果我想发送一个包含 8 个字节的消息,我该如何指定停止位/开始位值?我需要将每个字节作为数据包和停止位分别发送还是由库自动完成?
arduino - 通过转换器连接 PC 到 Arduino RS-485
我正在尝试在 PC(Windows)和 Arduino 之间建立 modbus RS-485 连接。
在 PC 端,我使用像这样的 USB-to-RS485 转换器http://ru.aliexpress.com/item/USB-to-485-RS485-converter-Adapter-Support-Windows-7-8-for-Arduino /1577970568.html
在 Arduino 方面,我使用 TTL-to-RS-485,例如http://ru.aliexpress.com/item/5pcs-lot-MAX485-Module-RS-485-TTL-to-RS485-Module-for- Arduino/32262338107.html
问题 1: 当我从 PC 向 Arduino 发送字节时。没发生什么事。Arduino 没有收到任何东西。在这种情况下,我将此代码上传到 Arduino:
并在 Arduino IDE 中打开串行监视器以显示接收到的数据。然后我打开 Arduino IDE 的新实例,选择正确的 USB-to-RS485 COM 端口并打开它的串行监视器以发送一些数据。
所以在 Arduino 端串行监视器中,我只看到“--”行。即使我试图在 PC 端串行监视器中发送一些东西。
另一个问题是:
反之亦然。当我从 Arduino 向 PC 发送一些字节时,我收到一些奇怪的符号而不是发送字节。
本例中的 Arduino 代码为:
在 PC 端(在 Arduino IDE 串行监视器中)我收到奇数符号而不是“3”符号。
=======
RS485 转换器用双绞线 A 到 A 和 B 到 B 连接。RS485 到 TTL 转换器正确连接到 Arduino。(两个arduinos之间的通信工作正常)。
请帮忙。
python - 使用 PySerial 进行通信时,设备将无法识别命令或响应
我正在尝试使用 PySerial 模块与 Omega CNi16D 温度控制器通信。使用厂商提供的基本通讯软件,我可以将一些设置写入控制器,确保我正确地进行了硬件配置和设置。但是,当我尝试在 Python 3.4 中使用 PySerial 执行此操作时遇到问题。我怀疑我没有以适当的形式发送字节码。这是我尝试过的:
我从 得到 True 返回isOpen()
,但该命令没有任何反应。*01W01A003E8
是手册中给出的示例命令之一,其中*
是识别字符,01
是我在控制器端设置的从地址(我使用的是 RS485),W01A003E8
是一个十六进制 ASCII 命令,用于将设定点设置为 -100。
以下是我尝试过但没有成功的其他一些事情:尝试过给一些睡眠时间ser.write()
;尝试了应该从控制器返回读取值的不同命令,但我总是得到一个空字节对象(ser.read()
在任何命令返回之后b''
。);尝试切换到 RS232 模式,该模式不需要命令中的从地址;试过ser.write('*01W01A003E8'.encode('ascii'))
了,也用'utf-8'
.
我感觉我向控制器发送了错误的字节对象。在手册(http://www.omega.com/Manuals/manualpdf/M3397.pdf
第 5 部分)中,听起来我可以只发送指定格式的 ASCII 码来完成这项工作。
android - Android Studio Modbus rs485 串口连接 MacosX
我在android中尝试了rs485连接。我使用了模式库 jamod , android4j ...
但一切都不起作用。
我尝试代码:
第一次尝试 :
不工作
第二次尝试
多尝试...
一切都不起作用:(
我在哪里可以犯错误?RXTX dalvikvm 在 logcat 中加载库错误 原因:java.lang.UnsatisfiedLinkError:无法加载 rxtxSerial:findLibrary 返回 null
我不明白...我需要使用 Eclipse 吗?
平台:Android Studio Java:1.7.0_79-b15
应用清单:INTERNET ACCESS_WIFI_STATE ACCESS_NETWORK_STATE WRITE_SETTINGS
minSdkVersion="8" targetSdkVersion="18 我得到同样的错误:
modbus - 无法读取选择电能表 MFM 384 C
尝试在终端软件(Docklight)中使用 modbus RTU 协议读取 selec mfm384 c 电表,我得到一些以 3F 开头的不相关响应......它需要在其第一个字节中使用从地址响应,CRC 是怎样的也失败了,你能帮我解释一下 selec mfm 384 中的命令和响应格式吗
embedded-linux - 嵌入式 Linux 设备在启动期间阻塞 RS485 总线
我正在使用一台工业 Linux 计算机来实现通过 RS485 总线与多个连接的设备进行通信时遇到问题。我遇到的是 RS485 USART 驱动程序使用的 IO 引脚在启动时设置为不同的电平,而不是进入 RS485 空闲/三态。结果,总线上的其他设备在设备启动时被阻塞超过 30 秒,引发各种外部问题。事件过程可以在附图中查看,我在启动期间用示波器测量了输出电压。
我的猜测是,实际驱动器在电压水平达到其三态水平之前不会启动(例如,此设备约为 2.2V)。之后,一切都按预期工作。
我试图找到任何配置文件来设置引导时引脚的默认 IO 级别(认为这可能由引导加载程序设置)无济于事。
此外,我尝试应用启动脚本来“足够早地”运行以将 DATA- 设置为高,但据我所知,有问题的设备没有提供任何接口来控制这些引脚作为常规 GPIO。
任何帮助、提示或见解将不胜感激!
编辑:我不是经验丰富的 Linux 开发人员,所以如果我遗漏了任何重要的细节,请强调。
一些规格:
- ARM920T 版本 0 (v41) CPU
- Linux 2.6 的专有发行版
- 使用 Busybox
- 爱特梅尔 USART 驱动程序
从引导日志中提取:
Linux 版本 2.6.28.10 (root@) (gcc 版本 4.1.2) #94 PREEMPT Tue Oct 29 10:22:19 CET 2013
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0003177
/...
.. ./
端口 /dev/ttyS3 的 RS485 模式已启用
/...
...(我猜这里大约需要 30 秒)
.../
atmel_usart.3: MMIO 0xfffcc000 (irq = 9) 处的 ttyS3 是 ATMEL_SERIAL
atmel_serial.3:将 RS485 RTS 引脚向下放置
/...
...
.../
完整启动日志: https ://drive.google.com/file/d/0B2XYl1mNCa8jNUZ5V0Nic1hkU0U/view
类似问题:
此处可能讨论了一个类似的问题:UART 初始化:防止 UART 拉高 RTS
但我不确定如何继续使用建议的解决方案。
python - 从 Python 发送串行终端击键
我正在尝试模拟从 python 脚本到串行终端的击键。显然输入字符“a”和发送按键事件是两件不同的事情。
我尝试采用本指南,但似乎没有用: https ://learn.adafruit.com/introducing-bluefruit-ez-key-diy-bluetooth-hid-keyboard/sending-keys-via-serial
此外,我尝试直接读取串行端口,似乎按键“a”发出“O\x00”,这让我认为如果我只是发送“\x4F\x00”这将起作用。也许我遇到了时间问题......
这些尝试似乎都没有奏效。键['A'] = \x04。Keys2['a'] = \x4F
对我来说最令人惊讶的是,我找不到任何人已经这样做了。似乎从脚本自动击键/命令将非常有用。
我会错过什么?