|
|
|
using Godot;
|
|
|
|
using static Godot.GD;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using EGFramework;
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
using System;
|
|
|
|
using System.Net;
|
|
|
|
|
|
|
|
namespace EGFramework.Examples{
|
|
|
|
public partial class EGTest : Node,IEGFramework
|
|
|
|
{
|
|
|
|
public Label label { set; get; }
|
|
|
|
|
|
|
|
public override void _Ready()
|
|
|
|
{
|
|
|
|
this.EGEnabledProtocolTools();
|
|
|
|
|
|
|
|
this.EGMqtt().ConnectMQTTServer("192.168.1.220");
|
|
|
|
|
|
|
|
//this.EGUDP().UDPDevices[5555].Connect(IPAddress.Parse("224.0.0.251"),5353);
|
|
|
|
//byte[] sendData = { 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x5F, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x07, 0x5F, 0x64, 0x6E, 0x73, 0x2D, 0x73, 0x64, 0x04, 0x5F, 0x75, 0x64, 0x70, 0x05, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x00, 0x00, 0x0C, 0x00, 0x01 };
|
|
|
|
//this.EGUDP().UDPDevices[5555].Send(sendData);
|
|
|
|
// this.EGRegisterMessageEvent<PrintResponse>((e,sender,protocol)=>{
|
|
|
|
// Print(sender);
|
|
|
|
// });
|
|
|
|
// this.EGOnMessage<PrintResponse>();
|
|
|
|
// this.EGReadFromFile("SaveData/MySeg2.seg2");
|
|
|
|
//TestTCPClient();
|
|
|
|
//TestSerialPort();
|
|
|
|
//TestTCPServer();
|
|
|
|
//this.EGUDP();
|
|
|
|
//this.EGUDPListen(11000);
|
|
|
|
//this.EGSendMessage(new MessageStruct(1,"xxx"),"192.168.1.192:9002",ProtocolType.UDP);
|
|
|
|
//this.EGHttpClient();
|
|
|
|
//this.EGHttpServer().Listen("http://+:6555/index/");
|
|
|
|
}
|
|
|
|
public override void _Process(double delta)
|
|
|
|
{
|
|
|
|
//Print(this.EGMqtt().MqttDevices["192.168.1.220"].IsConnected);
|
|
|
|
}
|
|
|
|
public override void _ExitTree()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public void OnButton1Click(){
|
|
|
|
this.EGMqtt().SubScribeTheme("192.168.1.220","test");
|
|
|
|
byte[] testData = {0x3A,0x55};
|
|
|
|
this.EGMqtt().PublishTheme("192.168.1.220","test",testData);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void RefreshMsg(bool coil){
|
|
|
|
label.Text += coil+" ";
|
|
|
|
}
|
|
|
|
public void OnTimer(){
|
|
|
|
//this.EGSendMessage(new MessageStruct(1,"山东博裕1"),"COM4",ProtocolType.SerialPort);
|
|
|
|
//this.EGSendMessage(new MessageStruct(1,"山东博裕1"),"192.168.1.244:6060",ProtocolType.TCPClient);
|
|
|
|
//this.EGSendMessage(new ModbusTCP_WriteMultiCoil(1,0,sendData),"192.168.1.200:3000",ProtocolType.TCPClient);
|
|
|
|
//TestSingleCoil();
|
|
|
|
//TestMultiCoil();
|
|
|
|
//TestSingleHoldingRegister();
|
|
|
|
//TestMultiHoldingRegister();
|
|
|
|
}
|
|
|
|
public void TestModbus(){
|
|
|
|
label = this.GetNode<Label>("Label");
|
|
|
|
label.Text = "[Modbus]";
|
|
|
|
this.EGRegisterMessageEvent<MessageResponse>((e,sender,type)=>{
|
|
|
|
Print("[Got Response]"+"[sender = "+sender+"]"+"["+type+"]"+ e.MessageId+"||"+e.Author);
|
|
|
|
});
|
|
|
|
this.EGOnMessage<MessageResponse>();
|
|
|
|
this.EGRegisterMessageEvent<ModbusTCP_Response>((e,sender,type)=>{
|
|
|
|
if(type == ProtocolType.TCPClient && e.FunctionType == ModbusFunctionType.ReadCoil){
|
|
|
|
int registerId = 0;
|
|
|
|
foreach(bool coil in e.Coil){
|
|
|
|
Print(registerId + "Status:" + coil);
|
|
|
|
registerId++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(type == ProtocolType.TCPClient && e.FunctionType == ModbusFunctionType.ReadDiscreteInput){
|
|
|
|
int registerId = 0;
|
|
|
|
foreach(bool discreteInput in e.DiscreteInput){
|
|
|
|
Print(registerId + "Status:" + discreteInput);
|
|
|
|
registerId++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(type == ProtocolType.TCPClient && e.FunctionType == ModbusFunctionType.ReadHoldingRegisters){
|
|
|
|
int registerId = 0;
|
|
|
|
foreach(ushort holdingRegister in e.HoldingRegister){
|
|
|
|
Print(registerId + "Status:" + holdingRegister);
|
|
|
|
registerId++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(type == ProtocolType.TCPClient && e.FunctionType == ModbusFunctionType.ReadInputRegisters){
|
|
|
|
int registerId = 0;
|
|
|
|
foreach(ushort inputRegister in e.InputRegister){
|
|
|
|
Print(registerId + "Status:" + inputRegister);
|
|
|
|
label.Text+=registerId + "Status:" + inputRegister;
|
|
|
|
registerId++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//this.EGOffMessage<ModbusTCP_Response>();
|
|
|
|
});
|
|
|
|
|
|
|
|
this.EGRegisterMessageEvent<ModbusRTU_Response>((e,sender,type)=>{
|
|
|
|
if(type == ProtocolType.SerialPort && e.FunctionType == ModbusFunctionType.ReadCoil){
|
|
|
|
int registerId = 0;
|
|
|
|
foreach(bool coil in e.Coil){
|
|
|
|
Print(registerId + "Status:" + coil);
|
|
|
|
registerId++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(type == ProtocolType.SerialPort && e.FunctionType == ModbusFunctionType.ReadDiscreteInput){
|
|
|
|
int registerId = 0;
|
|
|
|
foreach(bool discreteInput in e.DiscreteInput){
|
|
|
|
Print(registerId + "Status:" + discreteInput);
|
|
|
|
registerId++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(type == ProtocolType.SerialPort && e.FunctionType == ModbusFunctionType.ReadHoldingRegisters){
|
|
|
|
int registerId = 0;
|
|
|
|
foreach(ushort holdingRegister in e.HoldingRegister){
|
|
|
|
Print(registerId + "Status:" + holdingRegister);
|
|
|
|
registerId++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(type == ProtocolType.SerialPort && e.FunctionType == ModbusFunctionType.ReadInputRegisters){
|
|
|
|
int registerId = 0;
|
|
|
|
foreach(ushort inputRegister in e.InputRegister){
|
|
|
|
Print(registerId + "Status:" + inputRegister);
|
|
|
|
label.Text+=registerId + "Status:" + inputRegister;
|
|
|
|
registerId++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//this.EGOffMessage<ModbusRTU_Response>();
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public void TestTCPServer(){
|
|
|
|
this.EGTCPServer().OnClientConnect.Register(e=>{
|
|
|
|
Print(e +" is connected");
|
|
|
|
this.EGSendMessage(new MessageStruct(1,"Hello"),e,ProtocolType.TCPServer);
|
|
|
|
});
|
|
|
|
this.EGTCPServer().OnClientDisconnect.Register(e=>{
|
|
|
|
Print(e +" is disconnect");
|
|
|
|
});
|
|
|
|
this.EGTCPServerListen(9999);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void TestSqlite(){
|
|
|
|
this.EGSqlite().SaveData(new TestBoxMessage());
|
|
|
|
List<TestBoxMessage> result = this.EGSqlite().GetDataSet<TestBoxMessage>();
|
|
|
|
if(result == null){
|
|
|
|
PrintErr(this.EGSqlite().ExceptionMsg);
|
|
|
|
}
|
|
|
|
Print("Result = " + result[0].TestDouble + result[0].TestFloat);
|
|
|
|
}
|
|
|
|
public void TestSerialPort(){
|
|
|
|
this.EGSerialPort().SetBaudRate(9600);
|
|
|
|
this.EGSendMessage(new ModbusRTU_ReadInputRegisters(1,0,2),"COM4",ProtocolType.SerialPort);
|
|
|
|
this.EGSendMessage(new ModbusRTU_ReadCoils(1,0,8),"COM4",ProtocolType.SerialPort);
|
|
|
|
this.EGOnMessage<ModbusRTU_Response>();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void TestTCPClient(){
|
|
|
|
this.EGTCPClient();
|
|
|
|
this.EGSendMessage(new ModbusTCP_ReadDiscreteInput(1,0,8),"192.168.1.196:6000",ProtocolType.TCPClient);
|
|
|
|
this.EGSendMessage(new ModbusTCP_ReadInputRegisters(1,0,2),"192.168.1.196:6000",ProtocolType.TCPClient);
|
|
|
|
this.EGOnMessage<ModbusTCP_Response>();
|
|
|
|
}
|
|
|
|
|
|
|
|
private bool IsOpen = false;
|
|
|
|
public void TestSingleCoil(){
|
|
|
|
if(IsOpen){
|
|
|
|
//this.EGSendMessage(new ModbusRTU_WriteSingleCoil(1,0,false),"COM4",ProtocolType.SerialPort);
|
|
|
|
this.EGSendMessage(new ModbusTCP_WriteSingleCoil(1,0,false),"192.168.1.196:6000",ProtocolType.TCPClient);
|
|
|
|
IsOpen = false;
|
|
|
|
}else{
|
|
|
|
//this.EGSendMessage(new ModbusRTU_WriteSingleCoil(1,0,true),"COM4",ProtocolType.SerialPort);
|
|
|
|
this.EGSendMessage(new ModbusTCP_WriteSingleCoil(1,0,true),"192.168.1.196:6000",ProtocolType.TCPClient);
|
|
|
|
IsOpen = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public void TestMultiCoil(){
|
|
|
|
byte[] OpenCode = {0xFF};
|
|
|
|
byte[] CloseCode = {0x00};
|
|
|
|
if(IsOpen){
|
|
|
|
this.EGSendMessage(new ModbusRTU_WriteMultiCoil(1,0,CloseCode.ToBoolArray()),"COM4",ProtocolType.SerialPort);
|
|
|
|
IsOpen = false;
|
|
|
|
}else{
|
|
|
|
this.EGSendMessage(new ModbusRTU_WriteMultiCoil(1,0,OpenCode.ToBoolArray()),"COM4",ProtocolType.SerialPort);
|
|
|
|
IsOpen = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public void TestSingleHoldingRegister(){
|
|
|
|
if(IsOpen){
|
|
|
|
this.EGSendMessage(new ModbusRTU_WriteSingleHoldingRegister(1,0,0x00),"COM4",ProtocolType.SerialPort);
|
|
|
|
IsOpen = false;
|
|
|
|
}else{
|
|
|
|
this.EGSendMessage(new ModbusRTU_WriteSingleHoldingRegister(1,0,0x01),"COM4",ProtocolType.SerialPort);
|
|
|
|
IsOpen = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public void TestMultiHoldingRegister(){
|
|
|
|
ushort[] OpenCode = {1,1,1,1,1,1,1,1};
|
|
|
|
ushort[] CloseCode = {0,0,0,0,0,0,0,0};
|
|
|
|
if(IsOpen){
|
|
|
|
this.EGSendMessage(new ModbusRTU_WriteMultiHoldingRegister(1,0,CloseCode),"COM4",ProtocolType.SerialPort);
|
|
|
|
IsOpen = false;
|
|
|
|
}else{
|
|
|
|
this.EGSendMessage(new ModbusRTU_WriteMultiHoldingRegister(1,0,OpenCode),"COM4",ProtocolType.SerialPort);
|
|
|
|
IsOpen = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
public class TestBoxMessage {
|
|
|
|
public int Code = 0;
|
|
|
|
public float TestFloat = 0.1f;
|
|
|
|
public double TestDouble;
|
|
|
|
public bool IsHaveMessage;
|
|
|
|
public string MessageInfo;
|
|
|
|
public MessageType MsgType;
|
|
|
|
public MessageStruct MsgStruct;
|
|
|
|
public MessagePair MsgPair;
|
|
|
|
public TestBoxMessage(){
|
|
|
|
this.Code = 1;
|
|
|
|
this.TestFloat = 1.2f;
|
|
|
|
this.TestDouble = 2.52;
|
|
|
|
this.IsHaveMessage = true;
|
|
|
|
this.MessageInfo = "DefaultInfo";
|
|
|
|
MsgType = MessageType.TypeInt;
|
|
|
|
MsgPair = new MessagePair();
|
|
|
|
MsgStruct = new MessageStruct(5,"Ad");
|
|
|
|
}
|
|
|
|
public string ToProtocolData()
|
|
|
|
{
|
|
|
|
return JsonConvert.SerializeObject(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public class MessagePair{
|
|
|
|
public int MessageId;
|
|
|
|
public string Author;
|
|
|
|
public string MessageInfo;
|
|
|
|
public int TimeStamp;
|
|
|
|
public MessagePair(){
|
|
|
|
this.MessageId = 10001;
|
|
|
|
this.Author = "Admin";
|
|
|
|
this.MessageInfo = "Hello every one!";
|
|
|
|
this.TimeStamp = 1690188342;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public struct MessageStruct : IRequest,IEGFramework{
|
|
|
|
public string FunctionCode;
|
|
|
|
public int MessageId;
|
|
|
|
public string Author;
|
|
|
|
public MessageStruct(int messageId,string author){
|
|
|
|
FunctionCode = "Message";
|
|
|
|
MessageId = messageId;
|
|
|
|
Author = author;
|
|
|
|
}
|
|
|
|
public byte[] ToProtocolByteData()
|
|
|
|
{
|
|
|
|
return JsonConvert.SerializeObject(this).ToBytesByEncoding("GBK");
|
|
|
|
}
|
|
|
|
public string ToProtocolData()
|
|
|
|
{
|
|
|
|
return "";
|
|
|
|
//return JsonConvert.SerializeObject(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public struct MessageResponse : IResponse
|
|
|
|
{
|
|
|
|
public string FunctionCode { set; get; }
|
|
|
|
public int MessageId;
|
|
|
|
public string Author;
|
|
|
|
public bool TrySetData(string protocolData, byte[] protocolBytes)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
//GD.Print(protocolData);
|
|
|
|
MessageResponse res = JsonConvert.DeserializeObject<MessageResponse>(protocolData);
|
|
|
|
if(res.FunctionCode == "Message"){
|
|
|
|
this.FunctionCode = res.FunctionCode;
|
|
|
|
this.MessageId = res.MessageId;
|
|
|
|
this.Author = res.Author;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
catch (Exception)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public struct PrintResponse : IResponse
|
|
|
|
{
|
|
|
|
public bool TrySetData(string protocolData, byte[] protocolBytes)
|
|
|
|
{
|
|
|
|
//Print("Received String is " + protocolData);
|
|
|
|
Print("Received bytes is " + protocolBytes.ToStringByHex());
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public enum MessageType{
|
|
|
|
TypeString = 1,
|
|
|
|
TypeInt = 2,
|
|
|
|
TypeObject = 3,
|
|
|
|
TypeArray = 4
|
|
|
|
}
|
|
|
|
}
|