2008-11-05 42 views
26

Tôi đã tìm kiếm một API Java có thể giao tiếp với các thiết bị nối tiếp trên Windows/Win32 nhưng nhiều API tôi đã kiểm tra là dành cho Linux, quá lỗi thời hoặc chỉ có lỗi các nhà phê bình.Giao tiếp nối tiếp Java trên Windows

Ai đó có thể giới thiệu cho tôi rằng họ đã thử hoặc biết về điều đó rất dễ triển khai trên Windows XP?

Trả lời

14

Tôi bắt đầu tìm kiếm điều tương tự vài tuần trước và tôi đã rất hài lòng với thư viện đa nền tảng RXTX cho đến nay. Làm việc với bất kỳ Windows, Linux và OS X. Có một API rất sạch sẽ, dễ hiểu.

chỉnh sửa: RXTX cũng là nguồn mở.

+0

Cảm ơn Murat, tôi sẽ xem xét nó. – Steve

+1

Chất lượng của mã RXTX khá kém. Hãy chuẩn bị để nhảy qua các vòng khác nhau nếu bạn đi xuống con đường này. – Gili

+0

nó không phải là xấu cho những điều đơn giản nhất.Tôi đang gặp sự cố trên cổng kết nối USB trong các trường hợp bất thường (ví dụ: USB được cắm vào/rút phích cắm khi chạy). –

7

Nếu không đặt trước, tôi khuyên bạn nên Java Serial Port từ serialio.com; Tôi có vấn đề ổn định đáng kể với gói nối tiếp Sun, IBM và RxTx. SerialPort đã được đá vững chắc trong sản xuất 24/7 trong hơn 5 năm.

Chúng hỗ trợ API nối tiếp Java chuẩn, cũng như API độc quyền thay thế của riêng chúng. Tôi sẽ gắn bó với các API tiêu chuẩn mặc dù, trừ khi bạn thực sự cần một cái gì đó của họ có rằng một trong những tiêu chuẩn không, chỉ để giữ cho các tùy chọn của bạn mở.

3

Java nổi tiếng với hỗ trợ I/O nối tiếp không ổn định của nó. Tại một công việc trước đó, chúng tôi đã thử cả RXTX và SerialIO cho một ứng dụng truyền dữ liệu ở tốc độ 56kbps từ bộ điều khiển servo Teknic, và tìm thấy chúng để tăng tốc CPU một chút. Có lẽ đối với các ứng dụng không yêu cầu truyền trực tiếp từ một cổng nối tiếp, cả hai thư viện này đều tốt, nhưng chúng tôi không cảm thấy rằng luồng I/O từ cổng nối tiếp nên ăn 15-30% CPU liên tục máy khi cần thiết cho các chủ đề khác trong JVM cần đáp ứng. Thay vào đó, chúng tôi tạo ra một máy chủ trong C++ mà sẽ đọc dòng dữ liệu từ cổng nối tiếp trên servo, chuyển đổi/đóng gói nó và gửi nó đến ứng dụng Java của chúng tôi trong XML qua kết nối socket. Tải CPU trên máy chủ I/O nối tiếp trong C++? Barely leo xuống 1% tại tồi tệ nhất của nó.

Có những điều nhất định Java làm tốt - nối tiếp I/O, theo ý kiến ​​của tôi, không phải là một trong số họ, tùy thuộc vào loại ứng dụng ...

Cuối cùng, bạn nên tham gia thậm chí những gì tôi nói với một hạt muối, và thử cả hai, RXTX và SerialIO (mà là rẻ tiền, như $ 50 hoặc hơn cho phiên bản java) và nếu họ đáp ứng nhu cầu của bạn, đi với nó. Cá nhân, tôi muốn gắn bó với SerialIO vì nó được hỗ trợ và tích cực làm việc. RXTX, không nhiều lắm.

+4

Tôi lo sợ bạn đã sai lầm ở đâu đó mã của bạn; Tôi đã viết một serial đa modem cho cầu nối TCP/IP trong Java và dễ dàng giữ 16 cổng streaming 56K mà không cần phá vỡ hai chữ số trong CPU trên một máy tính để bàn vào khoảng năm 2005 khiêm tốn (sử dụng bộ điều khiển nối tiếp RocketPort) và 4 cổng thoải mái tương tự phần cứng sử dụng cổng nối tiếp tích hợp. Tất cả đều có GUI đầy đủ hiển thị hoạt động thời gian thực trên các cổng. –

+1

Tôi đồng ý. SerialIO Serial Port là không tốn kém, nó hỗ trợ nhiều nền tảng và bạn nhận được mã nguồn. Hạn chế duy nhất tôi có thể nghĩ là Linux (và BSD) x64 vẫn không được hỗ trợ. –

1

Tôi đã viết một thư viện Java mã nguồn mở vì không có thư viện nào phù hợp với nhu cầu của tôi (lỗi thời, nguồn đóng, khó sửa đổi, không duy trì, ...).

Được gọi là JSerial, được cấp phép MIT và bạn có thể tìm hiểu thêm tại đây: https://github.com/thibautd/JSerial!

Hiện tại chỉ hỗ trợ Windows, nhưng tôi có kế hoạch hỗ trợ Linux. Bạn có thể dễ dàng sửa đổi phần gốc với Visual Studio mới nhất nếu bạn cần.

2

Tôi đã sử dụng PureJavaComm trong năm năm qua. Nó được duy trì tích cực, và là một thực thi Java thuần túy (thông qua JNA). RXTX đã làm tôi thất vọng vì thiếu bảo trì và nhiều vấn đề phức tạp.

+0

Thư viện này ngay lập tức đã giành được tôi vì không có thư viện gốc cụ thể cho nền tảng để kết hợp với ứng dụng được phân phối! – thirtythreeforty

Các vấn đề liên quan