From e706b848e0a32628e869b312bb5d1557d0030dcc Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 10 七月 2024 18:07:31 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV
---
pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java | 241 +++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 216 insertions(+), 25 deletions(-)
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
index eee927c..0f58f3e 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
@@ -1,46 +1,237 @@
package com.dy.testClient.tcpClient;
+import com.dy.common.mw.protocol.p206V1_0_0.CommonV1_0_1;
+import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0;
+import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate;
import com.dy.common.threadPool.ThreadPool;
-import com.dy.testClient.httpCl.*;
-
-import java.util.Base64;
+import com.dy.common.util.ByteUtil;
+import com.dy.testClient.ServerProperties;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.mina.core.session.IoSession;
public class MyThreadJob implements ThreadPool.Job {
+ private static final Logger log = LogManager.getLogger(MyThreadJob.class) ;
+
public String rtuAddr;
+ public String serverIp;
+ public Integer serverPort;
+
+ public IoSession session ;
+ public boolean exceptionOnConnect = false ;
+
+ public static final int connectTimeout = 3000 ;
+
+ public int sendTimes = 1 ;//鍙戦�佹暟鎹鏁�
+ public int heartbeatTimes = 1 ;//涓婃姤蹇冭烦娆℃暟
+
+ public long overStart = 0L;
+ public boolean isOver = false ;
public MyThreadJob(){
}
- public MyThreadJob(String rtuAddr){
+ public MyThreadJob(String rtuAddr, String serverIp, Integer serverPort){
this.rtuAddr = rtuAddr ;
+ this.serverIp = serverIp ;
+ this.serverPort = serverPort ;
}
@Override
public void execute() throws Exception {
- testP206V1_0_0() ;
- }
-
- private void testP206V1_0_0(){
- try{
- RtuData4MeterV1_0 rd = new RtuData4MeterV1_0() ;
- byte[] bs = rd.create(rtuAddr) ;
- bs = Base64.getEncoder().encode(bs) ;
-
- UpDataPayloadVo payloadVo = new UpDataPayloadVo() ;
- payloadVo.APPdata = new String(bs, "UTF-8") ;
-
- UpDataVo vo = new UpDataVo(rtuAddr, "8086" + rtuAddr) ;
- vo.payload = payloadVo ;
- String json = vo.toJson() ;
- byte[] bytes = json.getBytes() ;
- HttpPost.post(bytes);
- }catch(Exception e){
- e.printStackTrace();
- }finally{
- HttpClUnit.clientOver() ;
+ if(!this.isOver){
+ if(session != null){
+ if(sendTimes <= ServerProperties.sendTimes){
+ log.info("RTU" + rtuAddr + "寮�濮嬩换鍔�");
+ log.info("RTU" + rtuAddr + "灏嗚鎵ц" + ServerProperties.sendTimes + "杞浠诲姟锛屽綋鍓嶈疆娆℃槸" + sendTimes);
+ sendDataOfP206V1_0_0() ;
+ }else{
+ if(ServerProperties.sendOverThenCloseConnect == 1){
+ log.info("RTU" + rtuAddr + "绛夊緟涓�浼氾紝浠ユ帴鏀堕�氫俊涓棿浠朵笅琛屾暟鎹�");
+ if(overStart == 0){
+ overStart = System.currentTimeMillis() ;
+ }else{
+ long now = System.currentTimeMillis() ;
+ if(now - overStart >= 30 * 1000){
+ this.jobOver() ;
+ }
+ }
+ }else{
+ this.jobOver() ;
+ }
+ }
+ }
}
}
+ private void sendDataOfP206V1_0_0(){
+ try{
+ if(heartbeatTimes > ServerProperties.heartbeatTimes){
+ heartbeatTimes = 1 ;
+ this.sendReportData() ;
+ TcpClUnit.clientSendData();
+ sendTimes++ ;
+ }else{
+ this.sendHeartbeat() ;
+ TcpClUnit.clientSendData();
+ heartbeatTimes++ ;
+ }
+ }catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+ private void sendHeartbeat(){
+ try{
+ byte[] bs = this.createHeartbeat() ;
+ this.session.write(bs) ;
+ log.info("RTU" + rtuAddr + "鍙戦�佷簡蹇冭烦鏁版嵁锛�" + ByteUtil.bytes2Hex(bs, false));
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ private void sendReportData(){
+ try{
+ byte[] bs = this.createReport() ;
+ this.session.write(bs) ;
+ log.info("RTU" + rtuAddr + "鍙戦�佷簡涓婃姤鏁版嵁锛�" + ByteUtil.bytes2Hex(bs, false));
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ private void jobOver(){
+ if(ServerProperties.sendOverThenCloseConnect == 1){
+ session.closeOnFlush() ;
+ }
+ this.isOver = true ;
+ TcpClUnit.clientOver() ;
+ }
+
+ /**
+ * 鏋勯�犲績璺虫暟鎹�
+ * @return 瀛楄妭鏁扮粍
+ * @throws Exception 寮傚父
+ */
+ public byte[] createHeartbeat( ) throws Exception {
+ CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+ byte[] bytes ;
+ byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+ byte index = 0 ;
+ bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+ index++ ;
+ bsHead[index] = 0 ;//甯ч暱搴�
+
+ index++ ;
+ bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+ index++ ;
+ bsHead[index] = commonV1_0_1.createCtrl((byte)0x80, (byte)0) ;//鎺у埗鍩熷姛鑳界爜锛氱‘璁� 璁ゅ彲
+
+ index++ ;
+ GlCreate.createRtuAddr(this.rtuAddr, bsHead, index);
+ index += 5 ;
+
+ ByteUtil.hex2Bytes("02", bsHead, index) ;
+
+ byte[] bs = new byte[1] ;
+ bs[0] = (byte)0xF2 ;//鏁版嵁鍩燂細 1 涓瓧鑺傦紝F0 鐧诲綍锛� F1 閫�鍑虹櫥褰曪紝F2 鍦ㄧ嚎淇濇寔銆�
+
+ bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+
+ GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+ byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+ bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+ return bytes ;
+ }
+
+ /**
+ * 鏋勯�犱笂鎶ユ暟鎹�
+ * @return 瀛楄妭鏁扮粍
+ * @throws Exception 寮傚父
+ */
+ public byte[] createReport( ) throws Exception {
+ CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+ byte[] bytes ;
+ byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+ byte index = 0 ;
+ bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+ index++ ;
+ bsHead[index] = 0 ;//甯ч暱搴�
+
+ index++ ;
+ bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+ index++ ;
+ bsHead[index] = commonV1_0_1.createCtrl((byte)0x80, (byte)3) ;//鎺у埗鍩熷姛鑳界爜3锛氳嚜鎶ュ抚锛屾祦閲忥紙姘撮噺锛夊弬鏁�
+
+ index++ ;
+ GlCreate.createRtuAddr(this.rtuAddr, bsHead, index);
+ index += 5 ;
+
+ ByteUtil.hex2Bytes("C0", bsHead, index) ;
+
+ byte[] bs = new byte[2] ;
+ bs[0] = (byte)0x04 ;//鏈夋祦閲忔暟鎹�
+ bs[1] = (byte)0xE0 ;//鏈夋按鍘嬨�佺數姹犵數鍘嬨�佷俊鍙峰己搴�
+
+ bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+
+ bs = new byte[5] ;//鐬椂娴侀噺
+ bs[0] = ByteUtil.int2BCD_LE (21)[0] ;
+ bs[1] = ByteUtil.int2BCD_LE (43)[0] ;
+ bs[2] = ByteUtil.int2BCD_LE (65)[0] ;
+ bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+ bs = new byte[5] ;//绱娴侀噺
+ bs[0] = ByteUtil.int2BCD_LE (21)[0] ;
+ bs[1] = ByteUtil.int2BCD_LE (43)[0] ;
+ bs[2] = ByteUtil.int2BCD_LE (65)[0] ;
+ bs[3] = ByteUtil.int2BCD_LE (87)[0] ;
+ bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+ bs = new byte[5] ;//鎹熷け娴侀噺
+ bs[0] = ByteUtil.int2BCD_LE (10)[0] ;
+ bs[1] = ByteUtil.int2BCD_LE (32)[0] ;
+ bs[2] = ByteUtil.int2BCD_LE (54)[0] ;
+ bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+ bs = new byte[4] ;//姘村帇
+ bs[0] = ByteUtil.int2BCD_LE (10)[0] ;
+ bs[1] = ByteUtil.int2BCD_LE (32)[0] ;
+ bs[2] = ByteUtil.int2BCD_LE (4)[0] ;
+ bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+ bs = new byte[4] ;//鐢垫睜鐢靛帇
+ bs[0] = ByteUtil.int2BCD_LE (10)[0] ;
+ bs[1] = ByteUtil.int2BCD_LE (32)[0] ;
+ bs[2] = ByteUtil.int2BCD_LE (10)[0] ;
+ bs[3] = ByteUtil.int2BCD_LE (32)[0] ;
+ bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+ bs = new byte[1] ;//淇″彿寮哄害
+ bs[0] = ByteUtil.int2BCD_LE (21)[0] ;
+ bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+ bs = new byte[6] ;//鏃堕挓
+ GlCreate.createTp(bs, 0);
+ bytes = ByteUtil.bytesMerge(bytes, bs) ;
+
+ GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+ byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+ bytes = ByteUtil.bytesMerge(bytes, bsTail) ;
+
+ return bytes ;
+ }
+
+
@Override
public void destroy() {
--
Gitblit v1.8.0