|
@@ -62,7 +62,7 @@ public class Iec104Session {
|
|
|
return;
|
|
|
|
|
|
try {
|
|
|
- acceptSeq++;
|
|
|
+
|
|
|
if (request.getTypeIdentifier() == null) {
|
|
|
//U帧或S帧处理
|
|
|
//TODO: 标准化处理,状态校验
|
|
@@ -78,6 +78,7 @@ public class Iec104Session {
|
|
|
break;
|
|
|
case 0x43: //测试命令
|
|
|
response = BasicInstruction104.createSysMessage(UControlEnum.TESTFR_YES);
|
|
|
+ break;
|
|
|
case 0x13: //停止命令
|
|
|
state = SessionState.STOP104;
|
|
|
//todo: 停止数据的发送
|
|
@@ -88,12 +89,13 @@ public class Iec104Session {
|
|
|
break;
|
|
|
}
|
|
|
if (response != null)
|
|
|
- sendMessage(response);
|
|
|
+ sendMessage2(response);
|
|
|
|
|
|
if (state == SessionState.START104)
|
|
|
this.start();
|
|
|
//channelHandlerContext.writeAndFlush(response);
|
|
|
} else {
|
|
|
+ acceptSeq++;
|
|
|
//acceptSeq = (short)(request.getSendSeq() + 1);
|
|
|
if (request.getTypeIdentifier() == TypeIdentifierEnum.generalCall) {
|
|
|
// 总召唤命令
|
|
@@ -278,7 +280,10 @@ public class Iec104Session {
|
|
|
private Iec104Message createNewMessage(boolean isContinous, String pointType) {
|
|
|
Iec104Message msg104 = new Iec104Message();
|
|
|
msg104.setAcceptSeq(acceptSeq);
|
|
|
- msg104.setTransferReason((short)20);
|
|
|
+ if (isContinous)
|
|
|
+ msg104.setTransferReason((short)20);
|
|
|
+ else
|
|
|
+ msg104.setTransferReason((short)3);
|
|
|
if ("AI".equals(pointType.toUpperCase())) {
|
|
|
msg104.setTypeIdentifier(TypeIdentifierEnum.M_ME_TF_1); //M_ME_TF_1
|
|
|
} else {
|
|
@@ -297,6 +302,13 @@ public class Iec104Session {
|
|
|
channelHandlerContext.writeAndFlush(msg);
|
|
|
}
|
|
|
|
|
|
+ private synchronized void sendMessage2(Iec104Message msg) {
|
|
|
+// msg.setSendSeq(sendSeq++);
|
|
|
+// log.info("send message:" + msg.getSendSeq() + ", address = " + msg.getMessageAddress()
|
|
|
+// + ",type= " + msg.getTypeIdentifier()) ;
|
|
|
+ channelHandlerContext.writeAndFlush(msg);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
private Thread getTest104Thread() {
|
|
|
return new Thread(new Runnable() {
|
|
@@ -307,8 +319,8 @@ public class Iec104Session {
|
|
|
while(isStarted) {
|
|
|
try {
|
|
|
//间隔发送104测试帧
|
|
|
- Iec104Message testMessage = BasicInstruction104.createSysMessage(UControlEnum.TESTFR_YES);
|
|
|
- sendMessage(testMessage);
|
|
|
+ Iec104Message testMessage = BasicInstruction104.createSysMessage(UControlEnum.TESTFR);
|
|
|
+ sendMessage2(testMessage);
|
|
|
Thread.sleep(iec104Config.getSendSysFrameInterval());
|
|
|
} catch (Exception e) {
|
|
|
log.error(e.getMessage());
|