• R/O
  • SSH
  • HTTPS

f-11: 提交


Commit MetaInfo

修訂572 (tree)
時間2016-07-26 15:23:18
作者frdm

Log Message

PlcCommunicaterのsendBufferをフィールド共有から、毎回allocateするように変更
特に必要ないためByteBufferのdirectAllocateを全てallocateに変更

Change Summary

差異

--- F-11/trunk/src/resources/version.txt (revision 571)
+++ F-11/trunk/src/resources/version.txt (revision 572)
@@ -1,4 +1,4 @@
1-version=2.1.33
1+version=2.1.34
22 license1=<html>\
33 <body style="font\:Serif">\
44 <p style="font-size\:1.3em">F-11</p><br>
--- F-11/trunk/src/org/F11/scada/server/communicater/TcpReplyWaiterTest.java (revision 571)
+++ F-11/trunk/src/org/F11/scada/server/communicater/TcpReplyWaiterTest.java (revision 572)
@@ -79,7 +79,7 @@
7979 sendData = ByteBuffer.wrap(WifeUtilities.toByteArray("c0000209080706050403020110ff"));
8080 waiter.syncSendRecv(sendData, recvData);
8181 assertEquals(0, recvData.remaining());
82-
82+
8383 // クローズ
8484 waiter.close();
8585 }
@@ -152,7 +152,7 @@
152152 sendData = ByteBuffer.wrap(WifeUtilities.toByteArray("c0000209080706050403020110ff"));
153153 waiter.syncSendRecv(sendData, recvData);
154154 assertEquals(0, recvData.remaining());
155-
155+
156156 // クローズ
157157 waiter.close();
158158 }
@@ -306,7 +306,7 @@
306306 private ServerSocketChannel serverSocketChannel;
307307 private final int port;
308308
309- private ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
309+ private ByteBuffer buffer = ByteBuffer.allocate(1024);
310310
311311 public TcpServer(int port) throws Exception {
312312 this.port = port;
--- F-11/trunk/src/org/F11/scada/server/communicater/TcpPortChannel.java (revision 571)
+++ F-11/trunk/src/org/F11/scada/server/communicater/TcpPortChannel.java (revision 572)
@@ -60,7 +60,7 @@
6060 private SendData sendData;
6161
6262 /** 受信バッファ */
63- private final ByteBuffer recvBuffer = ByteBuffer.allocateDirect(2048);
63+ private final ByteBuffer recvBuffer = ByteBuffer.allocate(2048);
6464
6565 /** リスナーのマップ */
6666 private final Map<String, RecvListener> id2listenerMap = Collections
--- F-11/trunk/src/org/F11/scada/server/communicater/TcpPortChannelTest.java (revision 571)
+++ F-11/trunk/src/org/F11/scada/server/communicater/TcpPortChannelTest.java (revision 572)
@@ -78,7 +78,7 @@
7878 }
7979
8080 /*
81- * IDKey生成テスト
81+ * IDKey生成テスト
8282 */
8383 public void testMakeIDKey() throws Exception {
8484 TcpPortChannel port =
@@ -281,7 +281,7 @@
281281 private ServerSocketChannel serverSocketChannel;
282282 private final int port;
283283
284- private ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
284+ private ByteBuffer buffer = ByteBuffer.allocate(1024);
285285
286286 public TcpServer(int port) throws Exception {
287287 this.port = port;
--- F-11/trunk/src/org/F11/scada/server/communicater/PlcCommunicaterTest.java (revision 571)
+++ F-11/trunk/src/org/F11/scada/server/communicater/PlcCommunicaterTest.java (revision 572)
@@ -40,6 +40,7 @@
4040 import org.F11.scada.WifeUtilities;
4141 import org.F11.scada.server.converter.Converter;
4242 import org.F11.scada.server.converter.FINS;
43+import org.F11.scada.server.converter.FINSTCP;
4344 import org.F11.scada.server.event.WifeCommand;
4445
4546 /**
@@ -166,7 +167,7 @@
166167 return 5001;
167168 }
168169 public String getPlcCommKind() {
169- return "FINS";
170+ return "FINSTCP";
170171 }
171172 public int getPlcNetNo() {
172173 return 1;
@@ -202,7 +203,7 @@
202203 return 5;
203204 }
204205 };
205- commTcp = new PlcCommunicater(device, converter);
206+ commTcp = new PlcCommunicater(device, new FINSTCP());
206207 System.out.println("setUp end");
207208 }
208209
@@ -426,16 +427,19 @@
426427 private final int port;
427428 private Map<String, byte[]> resMap = new HashMap<String, byte[]>();
428429
429- private ByteBuffer recvBuffer = ByteBuffer.allocateDirect(1024);
430+ private ByteBuffer recvBuffer = ByteBuffer.allocate(2048);
430431 private ByteBuffer sendBuffer = ByteBuffer.allocate(2048);
431432
432433 public TcpServer(int port) throws Exception {
433- resMap.put("01028200000000011234",
434+ resMap.put("46494e530000000c000000000000000000000005", WifeUtilities.toByteArray("00000000000000000005"));
435+ resMap.put("46494e530000001c00000002000000008000020102030405000101028200000000011234",
434436 WifeUtilities.toByteArray("01020000"));
435- resMap.put("0101820000000001",
437+ resMap.put("46494e530000001a0000000200000000800002010203040500010101820000000001",
436438 WifeUtilities.toByteArray("010100001234"));
437- resMap.put("0101820000000004",
439+ resMap.put("46494e530000001a0000000200000000800002010203040500020101820000000004",
438440 WifeUtilities.toByteArray("010100001234567887654321"));
441+ resMap.put("46494e530000001a0000000200000000800002010203040500010101820000000004",
442+ WifeUtilities.toByteArray("010100001234567887654321"));
439443
440444 this.port = port;
441445 selector = SelectorProvider.provider().openSelector();
@@ -480,21 +484,32 @@
480484
481485 Thread.yield();
482486
483- byte[] recvData = new byte[recvBuffer.remaining() - 10];
484- recvBuffer.position(10);
487+ byte[] recvData = new byte[recvBuffer.remaining()];
488+ recvBuffer.position(0);
485489 recvBuffer.get(recvData);
490+// System.out.println("recvData=" + WifeUtilities.toString(recvData));
491+ recvBuffer.flip();
486492 byte[] sendData = resMap.get(WifeUtilities.toString(recvData));
493+// System.out.println("sendData=" + sendData);
487494 if (sendData != null) {
488- sendBuffer.clear();
489- sendBuffer.put(WifeUtilities.toByteArray("c00002"));
490- sendBuffer.put(recvBuffer.get(6));
491- sendBuffer.put(recvBuffer.get(7));
492- sendBuffer.put(recvBuffer.get(8));
493- sendBuffer.put(recvBuffer.get(3));
494- sendBuffer.put(recvBuffer.get(4));
495- sendBuffer.put(recvBuffer.get(5));
496- sendBuffer.put(recvBuffer.get(9));
497- sendBuffer.put(sendData).flip();
495+ if ("00000000000000000005".equals(WifeUtilities.toString(sendData))) {
496+ sendBuffer.clear();
497+ sendBuffer.put(WifeUtilities.toByteArray("46494e530000001c0000000200000000"));
498+ sendBuffer.put(WifeUtilities.toByteArray("c00002"));
499+ sendBuffer.put(sendData).flip();
500+ } else {
501+ sendBuffer.clear();
502+ sendBuffer.put(WifeUtilities.toByteArray("46494e530000001c0000000200000000"));
503+ sendBuffer.put(WifeUtilities.toByteArray("c00002"));
504+ sendBuffer.put(recvBuffer.get(22));
505+ sendBuffer.put(recvBuffer.get(23));
506+ sendBuffer.put(recvBuffer.get(24));
507+ sendBuffer.put(recvBuffer.get(19));
508+ sendBuffer.put(recvBuffer.get(20));
509+ sendBuffer.put(recvBuffer.get(21));
510+ sendBuffer.put(recvBuffer.get(25));
511+ sendBuffer.put(sendData).flip();
512+ }
498513 System.out.println("server:"
499514 + WifeUtilities.toString(sendBuffer));
500515 } else {
--- F-11/trunk/src/org/F11/scada/server/communicater/PlcCommunicater.java (revision 571)
+++ F-11/trunk/src/org/F11/scada/server/communicater/PlcCommunicater.java (revision 572)
@@ -45,11 +45,11 @@
4545 private volatile LinkageCommand linkageCommand;
4646
4747 /** 送信バッファ */
48- private ByteBuffer sendBuffer = ByteBuffer.allocateDirect(2048);
48+// private ByteBuffer sendBuffer = ByteBuffer.allocate(2048);
4949 /** 受信バッファ */
50- private ByteBuffer recvBuffer = ByteBuffer.allocateDirect(2048);
50+ private ByteBuffer recvBuffer = ByteBuffer.allocate(2048);
5151 /** 読込みデータバッファ */
52- private ByteBuffer recvData = ByteBuffer.allocateDirect(2048);
52+ private ByteBuffer recvData = ByteBuffer.allocate(2048);
5353 /** FINS/TCPプロトコル通信の有無 */
5454 private boolean isFinsTcp;
5555
@@ -191,12 +191,13 @@
191191 InterruptedException {
192192 recvData.clear();
193193 while (converter.hasCommand()) {
194+ ByteBuffer sendBuffer = ByteBuffer.allocate(2048);
194195 sendBuffer.clear();
195196 converter.nextCommand(sendBuffer);
196197 sendBuffer.flip();
197198 // 送信後受信待ち
198199 waiter.syncSendRecv(sendBuffer, recvBuffer);
199- WifeException ex = checkError();
200+ WifeException ex = checkError(sendBuffer);
200201 // エラー発生なら試行を繰り返す
201202 for (int i = 0; i < device.getPlcRetryCount() && ex != null; i++) {
202203 if (ex != null) {
@@ -209,7 +210,7 @@
209210 sendBuffer.flip();
210211 // 送信後受信待ち
211212 waiter.syncSendRecv(sendBuffer, recvBuffer);
212- ex = checkError();
213+ ex = checkError(sendBuffer);
213214 }
214215 // エラー発生ならば、二重化PLCと通信
215216 if (ex != null && device.getPlcIpAddress2() != null
@@ -224,7 +225,7 @@
224225 sendBuffer.flip();
225226 // 送信後受信待ち
226227 waiter.syncSendRecv(sendBuffer, recvBuffer);
227- ex = checkError();
228+ ex = checkError(sendBuffer);
228229 // エラー発生なら試行を繰り返す
229230 for (int i = 0; i < device.getPlcRetryCount() && ex != null; i++) {
230231 if (ex != null) {
@@ -237,7 +238,7 @@
237238 sendBuffer.flip();
238239 // 送信後受信待ち
239240 waiter.syncSendRecv(sendBuffer, recvBuffer);
240- ex = checkError();
241+ ex = checkError(sendBuffer);
241242 }
242243 }
243244 // FINS/TCPでエラー発生ならばポートを再オープン
@@ -251,7 +252,7 @@
251252 sendBuffer.flip();
252253 // 送信後受信待ち
253254 waiter.syncSendRecv(sendBuffer, recvBuffer);
254- ex = checkError();
255+ ex = checkError(sendBuffer);
255256 // エラー発生なら試行を繰り返す
256257 for (int i = 0; i < device.getPlcRetryCount() && ex != null; i++) {
257258 if (ex != null) {
@@ -264,7 +265,7 @@
264265 sendBuffer.flip();
265266 // 送信後受信待ち
266267 waiter.syncSendRecv(sendBuffer, recvBuffer);
267- ex = checkError();
268+ ex = checkError(sendBuffer);
268269 }
269270 }
270271
@@ -279,7 +280,7 @@
279280 recvData.flip();
280281 }
281282
282- private WifeException checkError() throws WifeException,
283+ private WifeException checkError(ByteBuffer sendBuffer) throws WifeException,
283284 InterruptedException {
284285 WifeException ex = null;
285286 if (recvBuffer.remaining() <= 0) {
--- F-11/trunk/src/org/F11/scada/server/communicater/PortSelectorTest.java (revision 571)
+++ F-11/trunk/src/org/F11/scada/server/communicater/PortSelectorTest.java (revision 572)
@@ -348,7 +348,7 @@
348348 private ServerSocketChannel serverSocketChannel;
349349 private final int port;
350350
351- private ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
351+ private ByteBuffer buffer = ByteBuffer.allocate(1024);
352352
353353 public TcpServer(int port) throws Exception {
354354 this.port = port;
--- F-11/trunk/src/org/F11/scada/server/communicater/UdpPortChannel.java (revision 571)
+++ F-11/trunk/src/org/F11/scada/server/communicater/UdpPortChannel.java (revision 572)
@@ -56,7 +56,7 @@
5656 private SendData sendData;
5757
5858 /** 受信バッファ */
59- private final ByteBuffer recvBuffer = ByteBuffer.allocateDirect(2048);
59+ private final ByteBuffer recvBuffer = ByteBuffer.allocate(2048);
6060
6161 /** リスナーのマップ */
6262 private final Map<String, RecvListener> id2listenerMap =
Show on old repository browser