标签: serial-communication

Java:使用RxTx Libararies

我是Java的新手,并且正在尝试编写串行通信应用程序.

我使用的是Windows 7(32位)

D:\Glaswegian\Java\RXTX\Test>java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) Client VM (build 23.7-b01, mixed mode, sharing)

D:\Glaswegian\Java\RXTX\Test>



D:\Glaswegian\Java\RXTX\Test>javac -version
javac 1.7.0_07

D:\Glaswegian\Java\RXTX\Test>PATH
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32
\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C
:\Program Files\MATLAB\R2009a\bin;C:\Program Files\MATLAB\R2009a\bin\win32;C:\Pr
ogram Files\Java\jdk1.7.0_07\bin;C:\Program Files\Java\jre7\bin;C:\Program Files
\Java\jre7\lib\ext

D:\Glaswegian\Java\RXTX\Test>
Run Code Online (Sandbox Code Playgroud)

我下载了RxTx

http://henrypoon.wordpress.com/2010/12/25/installing-rxtx-for-serial-communication-with-java/ http://rxtx.qbang.org/wiki/index.php/Using_RXTX

如上面链接所述,解压缩rxtx-2.1-7-bins-r2.将rxtxSerial.dll复制到C:\ Program Files\Java\jre7\bin将RXTXcomm.jar复制到C:\ Program Files\Java\jre7\lib\ext

我只是想运行这段代码:

import gnu.io.*;

public class RxTxComm{
    public static void main(String[] args)
    {}

    }
Run Code Online (Sandbox Code Playgroud)

我低于错误.

D:\Glaswegian\Java\RXTX\Test>dir
 Volume in drive D has no label.
 Volume Serial Number is C643-EE74

 Directory of …
Run Code Online (Sandbox Code Playgroud)

java rxtx serial-communication

6
推荐指数
1
解决办法
1万
查看次数

从arduino到处理的多个串行值?

我有一个小问题.

我从arduino附加的3轴加速度计+ 3轴磁力计+罗盘标题传递信息.这些缩放到midi范围(0-127).

ARDUINO:这是通过串行打印传递的,格式为76a45b120c23d12e23f34g

  Serial.print(shiftAx);
  Serial.print("a");
  Serial.print(shiftAy);
  Serial.print("b");
  Serial.print(shiftAz);
  Serial.print("c");
  Serial.print(shiftMx);
  Serial.print("d");
  Serial.print(shiftMy);
  Serial.print("e");
  Serial.print(shiftMz);
  Serial.print("f");
  Serial.print(shiftHead);
  Serial.print("g");
Run Code Online (Sandbox Code Playgroud)

我可以看到这使用我的串行监视器.(但我不确定是否以"g"打印为println.)

处理2:

我缓冲到我的void设置中的g()

port = new Serial(this, "/dev/tty.usbmodem411", 9600);
port.bufferUntil('g'); 
Run Code Online (Sandbox Code Playgroud)

我有这个功能

    void serialEvent (Serial port)
{

  data = port.readStringUntil('g');

  AxVal = data.substring(0, data.indexOf('a'));

  AyVal = data.substring(data.indexOf("a") + 1, data.indexOf("b"));  

  AzVal = data.substring(data.indexOf("b") + 1, data.indexOf("c"));

  MxVal = data.substring(data.indexOf("c") + 1, data.indexOf("d"));

  MyVal = data.substring(data.indexOf("d") + 1, data.indexOf("e"));

  MzVal = data.substring(data.indexOf("e") + 1, data.indexOf("f"));

  HeadVal = data.substring(data.indexOf("f") + 1, data.indexOf("g"));

}
Run Code Online (Sandbox Code Playgroud)

问题所以这不起作用.没有显示文字.(它只是一个简单的fill(),text())

我不明白为什么.问题是我的协议(如果我可以称之为),我是如何解压缩字符串的?或者其他一些问题. …

processing serial-port communication arduino serial-communication

6
推荐指数
1
解决办法
7120
查看次数

如何正确地与3D打印机通信

我必须编写一个java程序,通过网络接收G-Code命令,并通过串行通信将它们发送到3D打印机.原则上一切似乎都没问题,只要打印机需要超过300毫秒来执行命令.如果执行时间短于此时间,则打印机接收下一个命令需要花费太多时间,并且导致命令执行之间的延迟(打印机喷嘴静止约100-200ms).这可能会成为3d打印中的问题所以我必须消除这种延迟.

为了比较:像Repetier Host或Cura这样的软件可以通过seial发送相同的命令,命令执行之间没有任何延迟,所以它必须以某种方式.

我使用jSerialComm库进行串行通信.

这是将命令发送到打印机的线程:

@Override
public void run() {
if(printer == null) return;
    log("Printer Thread started!");
    //wait just in case
    Main.sleep(3000);

    long last = 0;
    while(true) {

        String cmd = printer.cmdQueue.poll();
        if (cmd != null && !cmd.equals("") && !cmd.equals("\n")) {
            log(cmd+" last: "+(System.currentTimeMillis()-last)+"ms");
            last = System.currentTimeMillis();
            send(cmd  + "\n", 0);
        }

    }
}

private void send(String cmd, int timeout) {
    printer.serialWrite(cmd);
    waitForBuffer(timeout);
}

private void waitForBuffer(int timeout) {
    if(!blockForOK(timeout))
        log("OK Timeout ("+timeout+"ms)");
}

public boolean blockForOK(int timeoutMillis) …
Run Code Online (Sandbox Code Playgroud)

java serial-port serial-communication 3d-printing

6
推荐指数
1
解决办法
508
查看次数

安卓和PC之间的USB通信

背景:我曾尝试在 stackoverflow、android 开发人员和网络上的各种其他资源方面寻求帮助。这是我最后的希望。我是通信新手,从 USB 的实现开始。以下是我的问题:

1) 当我将手机连接到 Windows PC 时,哪一个是主机?假设我想创建一个可以发送数据的应用程序,我是在做我的手机主机吗?

2) 对于这种情况(Windows PC 和 Android 手机),另一个是外围设备还是设备?他们一样吗?

3)从android开发者网站和关于USB的Windows论坛,我了解到需要遵循某些步骤,就像 - 创建USBManager的实例。- 创建获取设备列表 - 选择要从中建立连接的设备 - 创建接口 - 从该接口获取端点。- 创建 DeviceConnections 实例并调用 bulkTransfer 方法并发送数据。

但是当我尝试上述步骤时,我得到 device == null。我什至不知道我对上述通信方式的理解是否正确。

有人可以帮助我理解并建立 PC 和 android 手机之间的基本通信,并至少发送“hello world”。

非常感谢您阅读这么长的问题。

这是我所做的代码示例。这里 devicelist 返回 null。

 public class MainActivity extends AppCompatActivity {

    android.widget.Button usbButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final CustomUSBManager cmanager = new CustomUSBManager();

//1)        //Create instance of USB Manager using getSystemService
        final UsbManager manager = …
Run Code Online (Sandbox Code Playgroud)

usb android serial-communication

6
推荐指数
1
解决办法
8195
查看次数

使用什么串行文件传输协议?

我正在寻找一些关于巫婆文件传输协议的输入,以便在串行线路上使用.我希望能够在两个方向上通过串行线路(RS232)传输最大200 Mb大小的文件,但只有一台机器需要能够启动get/put(想想主从).

该协议还需要:

  • 易于/易于实现,因为我需要自己编写客户端和服务器(有限的嵌入式硬件)
  • 相当强大,故障检查/恢复等
  • 至少有些标准化,以防我需要第三方在其他硬件上实现它

克米特?TFTP?最简单的家酿?你怎么看?

ftp serial-port serial-communication

5
推荐指数
1
解决办法
5020
查看次数

CAN总线协议实现

我想学习并实现CAN BUS协议.我在软件中使用MSP430 Launchpad实现了UART,SPI,I2C和单线总线协议.现在我想了解CAN总线协议.我有mBed LPC 1768 Cortex M3开发板.mBed有Can Bus Library,但我想编写自己的库,以便我可以详细了解它,即我对其他通信协议的方式.

我无法找到合适的资源开始,这些材料似乎散布在网上.任何人都可以指导如何使用我提供的开发板编写和实现CAN总线协议.

谢谢

can-bus serial-communication lpc

5
推荐指数
1
解决办法
9948
查看次数

字节流中数据包的识别

我在与加速度计传感器的通信方面遇到了一些问题。传感器连续输出约 8000 个读数/秒。传感器通过适配器插入 USB 端口并显示为 com4。我的问题是我似乎无法从字节流中挑选出传感器读取数据包。数据包大小为 5 个字节,格式如下:

            High nibble                     Low nibble

Byte 1      checksum, id for packet start   X high
Byte 2      X mid                           X low
Byte 3      Y high                          Y mid
Byte 4      Y low                           Z high
Byte 5      Y mid                           Y low
Run Code Online (Sandbox Code Playgroud)

X, y, z 是加速度。

在传感器的文档中,它指出第一个字节中的高半字节是校验和(计算的 Xhigh+Xlow+Yhigh+Ylow+Zhigh+Zlow),也是数据包开始的标识。我对针对外部设备进行编程还很陌生,无法真正掌握如何将校验和用作包开始的标识符(校验和不会一直更改吗?)。这是识别数据包开始的常用方法吗?有谁知道如何解决这个问题?

任何帮助将不胜感激。

checksum serial-port serial-communication packet

5
推荐指数
1
解决办法
2544
查看次数

右对齐 I2S 模式相对于左对齐 I2S 模式和基本 I2S 模式的优缺点是什么?

I2S 规范提供了不同的操作模式。我试图寻找一种模式相对于另一种模式的优势,但找不到任何好的文献。任何人都可以提供或解释一种模式相对于另一种模式的优势吗?

hardware audio serial-communication

5
推荐指数
1
解决办法
2661
查看次数

串口通讯初始化

当时我们正在尝试为串行通信创建一个接口,以便能够与微处理器进行通信。

实际上 - 一切正常。几乎!为了能够与我们的控制器通信,我们需要与它同步。为此,我们编写一个字符串:"?0{SY}13!",然后控制器应回复"!0{SY}F5?"以接受同步请求。为此,我们使用一个writeData函数(有效 - 我们知道使用echo),然后我们使用 areadData来阅读答案。问题是,由于某种原因,它不会读取任何内容。虽然它返回1成功,但它读取的字符是恒定的" "(没有)。

现在是奇怪的部分 - 如果我们使用外部终端程序来初始化端口(如 putty),然后关闭程序,那么一切正常。它接受同步请求、回答(我们可以阅读它),然后我们可以做我们想做的一切。但是除非我们使用外部程序来初始化端口,否则它不起作用。

初始化接口的构造函数如下所示:

SerialIF::SerialIF(int baud, int byteSize, int stopBits, char* parity, int debug)
{
    string coutport = getPort();    
    wstring wideport;               
    debug_ = debug;                 //Debuglevel

    sync = false;                   //sync starts with false

    error = false;                  //Error false as beginnging

    //this is just for converting to the right type
    for (int i = 0; i < coutport.length(); i++) …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi serial-communication readfile

5
推荐指数
1
解决办法
2642
查看次数

在 C# 中以编程方式更改串口配置

2的设备类型具有不同的协议并与单个串行端口连接。通过协议,我的意思是串口配置不同。

我有一个协议 ID p_id,我可以通过它检查当前正在读取哪个设备。下面是我的代码

下面是我的主函数,它调用一个名为的类 CombinedEngine

 static class Program
 {
   private static CombinedEngine _eng;
   static async Task Main(string[] args)
    {
      try
      {
         _eng = new CombinedEngine();
      }
      catch (Exception ex)
      {
            Debug.WriteLine(ex.Message.ToString());
                //_log.Error(ex, ex.Message);
      }
    }
     while(true);
 }
Run Code Online (Sandbox Code Playgroud)

组合发动机类

class CombinedEngine
{
   SerialPort port = new SerialPort();
   public CombinedEngine()
    {          

        try
        {
            
            var p = mdc.mdc_protocol.ToList();
            
            if(p.Count > 0)
            {
                foreach(var pr in p)
                {
                    var p_id = pr.protocol_id;

                    if(p_id=="01")//modbus
                    {
                        if (port.IsOpen)
                            port.Close();

                        port = new …
Run Code Online (Sandbox Code Playgroud)

c# serial-port modbus serial-communication

5
推荐指数
1
解决办法
393
查看次数