📄 portcontrol.java
字号:
package collector.communication;
import java.io.*;
import java.net.*;
/**
* <p>Title: MoxaAspp.PortControl</p>
* <p>Description: Java implementation of Moxa CN2500 Aspp library.
* Use a object of this class to set Moxa CN2500
* port configuration before transport data via it.</p>
* <p>Copyright: Nari Pbs2000j (c) 2004</p>
* <p>Company: Nari</p>
* @author Weili
* @version 1.0
*/
public class PortControl {
//Attributes of Moxa server.
/** addr of MoxaCN2500 Server.*/
public String IPofMoxa;
/**(1-16)Port number of Moxa CN2500 Async Server.*/
public short PortofMoxa;
//Command port socket for specified physical port.
/** Command port number of specified port. */
public short CmdPortofMoxa;
/** Socket of command port number for specified port. */
public Socket CmdSocketToMoxa;
public InputStream CmdPortReader;
public OutputStream CmdPortWriter;
//Data port socket for the same physical port.
public short DataPortofMoxa;
public Socket DataSocketToMoxa;
public InputStream DataPortReader;
public OutputStream DataPortWriter;
public PortControl(String IP, short Port) {
IPofMoxa = IP;
PortofMoxa = Port;
CmdPortofMoxa = 0;
DataPortofMoxa = 0;
Socket CmdSocketToMoxa = null;
BufferedReader CmdPortReader = null;
PrintWriter CmdPortWriter = null;
Socket DataSocketToMoxa = null;
BufferedReader DataPortReader = null;
PrintWriter DataPortWriter = null;
}
/**
* Create a socket for command port and prepare for io operation.
* Note: command port is used for control purpose,
* e.g. set async port baud rate, read its line status...
*
* @param IP IP address of Moxa CN2500 Async Server.
* @param Port Port number from 1 to maximum ports of a Moxa CN2500 Async
* server.
*
* @return Socket object if connection to comamnd port established successfully,
* otherwise null.
*/
public Socket OpenCmdPort(String IP, short Port) {
if (Port < 1 || Port > PortControlOptions.CN2000_MAXPORT) {
//System.out.println("Invalid port number.");
//System.out.println("Port number between 1 and 16 required.");
return null;
}
//System.out.println();
//System.out.println("Open command port " + IPofMoxa + ":" + PortofMoxa + " ... ...");
Socket SocketMoxa = null;
CmdPortofMoxa = (short) (PortControlOptions.D_START_CMDPORT + Port - 1);
try {
SocketMoxa = new Socket(IP, CmdPortofMoxa);
}
catch (UnknownHostException uhe) {
System.out.println("Moxa port control - Open command port error: " +
"unknown host \"" + IP + "\".");
System.out.println(uhe.getMessage());
}
catch (IOException ioe) {
System.out.println("Moxa port control - Open command port error: " +
"io error occured.");
System.out.println(ioe.getMessage());
}
if (SocketMoxa != null) {
CmdSocketToMoxa = SocketMoxa;
IPofMoxa = IP;
PortofMoxa = Port;
try {
CmdPortReader = CmdSocketToMoxa.getInputStream();
CmdPortWriter = CmdSocketToMoxa.getOutputStream();
}
catch (IOException ioe) {
System.out.println(
"Moxa port control - IO preparation for command socket error: " +
"io error occured.");
System.out.println(ioe.getMessage());
}
if (CmdPortReader != null && CmdPortWriter != null) {
return CmdSocketToMoxa;
}
else {
CmdPortReader = null;
CmdPortWriter = null;
ClosePort(CmdSocketToMoxa);
return null;
}
}
return CmdSocketToMoxa;
} //End of OpenCmdPort.
/**
* Create a socket for data port and prepare for io operation.
* Note: data port is used for data transfer purpose,
* e.g. writing and reading data from this port.
*
* @param IP IP address of Moxa CN2500 Async Server.
* @param Port Port number from 1 to maximum ports of a Moxa CN2500 Async
* server.
*
* @return Socket object if connection to data port established successfully,
* otherwise null.
*/
public Socket OpenDataPort(String IP, short Port) {
if (Port < 1 || Port > PortControlOptions.CN2000_MAXPORT) {
//System.out.println("Invalid port number.");
//System.out.println("Port number between 1 and 16 required.");
return null;
}
//System.out.println();
//System.out.println("Open data port " + IPofMoxa + ":" + PortofMoxa + " ... ...");
Socket SocketMoxa = null;
DataPortofMoxa = (short) (PortControlOptions.D_START_DATAPORT + Port - 1);
try {
SocketMoxa = new Socket(IP, DataPortofMoxa);
}
catch (UnknownHostException uhe) {
System.out.println("Moxa port control - Open data port error: " +
"unknown host \"" + IP + "\".");
System.out.println(uhe.getMessage());
}
catch (IOException ioe) {
System.out.println("Moxa port control - Open data port error: " +
"io error occured.");
System.out.println(ioe.getMessage());
}
if (SocketMoxa != null) {
DataSocketToMoxa = SocketMoxa;
IPofMoxa = IP;
PortofMoxa = Port;
try {
DataPortReader = DataSocketToMoxa.getInputStream();
DataPortWriter = DataSocketToMoxa.getOutputStream();
}
catch (IOException ioe) {
System.out.println(
"Moxa port control - IO preparation for data socket error: " +
"io error occured.");
System.out.println(ioe.getMessage());
}
if (DataPortReader != null && DataPortWriter != null) {
return DataSocketToMoxa;
}
else {
DataPortReader = null;
DataPortWriter = null;
ClosePort(DataSocketToMoxa);
return null;
}
}
return DataSocketToMoxa;
} //End of OpenDataPort.
/**
* Close a socket connected to a port of Moxa CN2500 Async Server.
*
* @param SocketMoxa The socket needed to be closed.
*/
public void ClosePort(Socket SocketMoxa) {
//System.out.println();
//System.out.println("Close port " + IPofMoxa + ":" + PortofMoxa + " ... ...");
try {
SocketMoxa.close();
}
catch (IOException ioe) {
System.out.println("Moxa port control - Close port error: " +
"io error occured.");
System.out.println(ioe.getMessage());
}
if (CmdSocketToMoxa != null) {
CmdSocketToMoxa = null;
}
}
/**
* Reset a port represented by class member "CmdSocketToMoxa".
*
* @return 0 if successful ,otherwise -1.
*/
public short ResetPort() {
//System.out.println();
//System.out.println("Reset port " + IPofMoxa + ":" + PortofMoxa + " ... ...");
byte[] CmdContent = new byte[8];
CmdContent[0] = PortControlOptions.D_COMMAND_PORT_RESET;
CmdContent[1] = 3;
CmdContent[2] = 0x31; //1
CmdContent[3] = 0x36; //6
CmdContent[4] = 0x61; //a
try {
CmdPortWriter.write(CmdContent, 0, 5);
}
catch (IOException ioe) {
System.out.println("Moxa port control - Reset port error: " +
"io error occured.");
System.out.println(ioe.toString());
}
return WaitCmdResult(PortControlOptions.D_COMMAND_PORT_RESET);
}
/**
* Set Async port baud rate and character mode.
*
* @param baud baud rate defined in class PortCOntrolOptions.
* @param mode character mode such as stop bits, data bits, parity mode defined
* in class PortControlOptions.
*
* @return 0 if successful ,otherwise -1.
*/
public short ioctl(byte baud, byte mode) {
//System.out.println();
//System.out.println("Set ioctrl of port " + IPofMoxa + ":" + PortofMoxa +
//" with baud " + baud + " and mode " + mode + " ... ...");
byte[] CmdContent = new byte[8];
CmdContent[0] = PortControlOptions.D_COMMAND_IOCTL;
CmdContent[1] = 2;
CmdContent[2] = baud; //baud rate
CmdContent[3] = mode; //character mode
try {
CmdPortWriter.write(CmdContent, 0, 4);
}
catch (IOException ioe) {
System.out.println("Moxa port control - ioctrl error: " +
"io error occured.");
System.out.println(ioe.toString());
}
return WaitCmdResult(PortControlOptions.D_COMMAND_IOCTL);
}
/**
* Set Async Port flow control.
*
* @param CTSmode do CTS H/W flow control or not.
* @param RTSmode do RTS H/W flow control or not.
* @param TxXon do Tx XON/XOFF S/W flow control or not.
* @param RxXon do Rx XON/XOFF S/W flow control or not.
*
* @return 0 if successful ,otherwise -1.
*/
public short flowctrl(byte CTSmode, byte RTSmode, byte TxXon,
byte RxXon) {
/*
System.out.println();
System.out.println("Set flow control for port " + IPofMoxa + ":" +
PortofMoxa +
" with CTS " + CTSmode + ", RTS " + RTSmode +
", TxXon " + TxXon + ", RxXon " + RxXon + " ... ...");
*/
byte[] CmdContent = new byte[8];
CmdContent[0] = PortControlOptions.D_COMMAND_FLOWCTRL;
CmdContent[1] = 4;
CmdContent[2] = CTSmode;
CmdContent[3] = RTSmode;
CmdContent[4] = TxXon;
CmdContent[5] = RxXon;
try {
CmdPortWriter.write(CmdContent, 0, 6);
}
catch (IOException ioe) {
System.out.println("Moxa port control - flowctrl error: " +
"io error occured.");
System.out.println(ioe.toString());
}
return WaitCmdResult(PortControlOptions.D_COMMAND_FLOWCTRL);
}
/**
* Set Async Port line control.
* @param DTRon set DTR on or not.
* @param RTSon set RTS on or not.
* @return 0 if successful ,otherwise -1.
*/
public short lctrl(byte DTRon, byte RTSon) {
//System.out.println();
//System.out.println("Set line control of port " + IPofMoxa + ":" + PortofMoxa +
// " with DTR " + DTRon + ", RTS " + RTSon + " ... ...");
byte[] CmdContent = new byte[8];
CmdContent[0] = PortControlOptions.D_COMMAND_LINECTRL;
CmdContent[1] = 2;
CmdContent[2] = DTRon;
CmdContent[3] = RTSon;
try {
CmdPortWriter.write(CmdContent, 0, 4);
}
catch (IOException ioe) {
System.out.println("Moxa port control - linectrl error: " +
"io error occured.");
System.out.println(ioe.toString());
}
return WaitCmdResult(PortControlOptions.D_COMMAND_LINECTRL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -