规约工作记录

这里仅做记录,以免忘记。

1.短信编解码

  CodingHelper 和 At指令 

At 指令
 1    ///   <summary>
 2       ///  SIM300dAT命令集合
 3       ///   </summary>
 4       public   enum  AtCmdTextEnum
 5      {
 6          [Description( " ATI\r\n " )]
 7          芯片版本,
 8 
 9          [Description( " AT+CSQ\r\n " )]
10          网络状态,
11 
12          [Description( " AT+CMGF?\r\n " )]
13          查询短信编码格式,
14 
15          [Description( " AT+CMGF=0\r\n " )]
16          设置短信编码格式PDU,
17 
18          [Description( " AT+CPMS?\r\n " )]
19          查询存储模式,
20 
21          [Description( " AT+CSCA?\r\n " )]
22          查询短信中心号码,
23 
24          [Description( " AT+COPS?\r\n " )]
25          查询网络营运商,
26 
27          [Description( " AT+CSQ\r\n " )]
28          查询网络信号,
29 
30          [Description( " AT+CNMI?\r\n " )]
31          查询短信输出模式,
32 
33          [Description( " AT+CNMI=2,2\r\n " )]
34          设置短信输出模式22,
35 
36          [Description( " AT+CMGL=4\r\n " )]
37          枚举短信信息4,
38 
39          [Description( " AT&W\r\n " )]
40          写入存储器,
41      };

2. Modbus规约

   Modbus是问答式规约,在铁芯接地项目中将串口接收的Modbus报文转成CDT规约通过网口发给其它厂家

  Modbus的数据帧和串口、网口的接收处理代码 Modbus

校验和算法
 1     private   void  GetCRC( byte [] message,  ref   byte [] CRC)
 2          {
 3               // Function expects a modbus message of any length as well as a 2 byte CRC array in which to 
 4               // return the CRC values:
 5 
 6               ushort  CRCFull  =   0xFFFF ;
 7               byte  CRCHigh  =   0xFF , CRCLow  =   0xFF ;
 8               char  CRCLSB;
 9 
10               for  ( int  i  =   0 ; i  <  (message.Length)  -   2 ; i ++ )
11              {
12                  CRCFull  =  ( ushort )(CRCFull  ^  message[i]);
13 
14                   for  ( int  j  =   0 ; j  <   8 ; j ++ )
15                  {
16                      CRCLSB  =  ( char )(CRCFull  &   0x0001 );
17                      CRCFull  =  ( ushort )((CRCFull  >>   1 &   0x7FFF );
18 
19                       if  (CRCLSB  ==   1 )
20                          CRCFull  =  ( ushort )(CRCFull  ^   0xA001 );
21                  }
22              }
23              CRC[ 1 =  CRCHigh  =  ( byte )((CRCFull  >>   8 &   0xFF );
24              CRC[ 0 =  CRCLow  =  ( byte )(CRCFull  &   0xFF );
25          }

3.CDT规约

  通过网络接收开关的报文进行处理。也是问答式,只有召唤才回复数据。下面这是从Modbus到CDT转换项目中的代码

  CDT

 

4.仿IEC101规约

  

在IEC101规约里地址域是两个字节我们项目需要使用了6个字节,同时扩展了数据域

 

P101 字段
 1     #region  字段
 2 
 3           private   string  m_DataStart  =   " 68 " ; // 帧起始符
 4           private   string  m_Addr  =   " 140900000002 " ; // 地址域
 5           private   string  m_FrameStart  =   " 68 " ; // 帧起始符
 6           private   string  m_DataControl  =   " 01 " ; // 控制码
 7           private   string  m_DataLeng  =   " 000C " ; // 数据域长度
 8           private   string  m_ClientType  =   " 0006 " ; // 从属设备类型
 9           private   string  m_ClientAddr  =   " 0000 " ; // 从属设备地址
10           private   string  m_PID  =   " 0001 " ; // PID
11           private   string  m_PackageCount  =   " 0001 " ; // 总包数
12           private   string  m_PackageNum  =   " 0001 " ; // 本包编号
13           private   string  m_Data  =   " 0000 " ; // 数据     
14           private   string  m_CheckDigit  =   " 0B " ; // 校验码
15           private   string  m_DataEnd  =   " 16 " ; // 结束符
16 
17           #endregion

 

5.104规约

完整104规约

 

帧结构
    #region  帧结构
        
///   <summary>
        
///  启动符
        
///   </summary>       
         public   byte  BeginFlag  =   0x68 ;

        
private   byte  dataLength;
        
///   <summary>
        
///  数据长度
        
///   </summary>
         public   byte  DataLength
        {
            
get
            {
                
return  dataLength;
            }
            
private   set
            {
                dataLength 
=  value;
            }

        }


        
private   ushort  sendNo  =   0x0 ;
        
///   <summary>
        
///  发送序列号,默认值 0x0
        
///   </summary>
         public   ushort  SendNo
        {
            
get
            {
                
return  sendNo;
            }
            
set
            {
                sendNo 
=  value;
            }
        }

        
private   ushort  receiveNo  =   0x0 ;
        
///   <summary>
        
///  接收序列号,默认值 0x0
        
///   </summary>
         public   ushort  ReceiveNo
        {
            
get
            {
                
return  receiveNo;
            }
            
set
            {
                receiveNo 
=  value;
            }
        }

        
private   byte  flag  =   0x0 ;
        
///   <summary>
        
///  类型标识,默认值 0x0
        
///   </summary>
         public   byte  Flag
        {
            
get
            {
                
return  flag;
            }
            
set
            {
                flag 
=  value;
            }

        }

        
private   byte  determiner  =   0x00 ;

        
///   <summary>
        
///  可变结构限定词,默认值 0x0
        
///   </summary>
         public   byte  Determiner
        {
            
get
            {
                
return  determiner;
            }
            
set
            {
                determiner 
=  value;
            }

        }

        
private   ushort  sendReason  =   0x0 ;

        
///   <summary>
        
///  传输原因,默认值 0x0
        
///   </summary>
         public   ushort  SendReason
        {
            
get
            {
                
return  sendReason;
            }
            
set
            {
                sendReason 
=  value;
            }

        }

        
private   ushort  publicAddress  =   0x0 ;
        
///   <summary>
        
///  公共地址,默认值 0x0
        
///   </summary>
         public   ushort  PublicAddress
        {
            
get
            {
                
return  publicAddress;
            }
            
set
            {
                publicAddress 
=  value;
            }
        }

        
private   int  messageAddress  =   0x0 ;
        
///   <summary>
        
///  信息对象地址 3Byte,默认值 0x0
        
///   </summary>
         public   int  MessageAddress
        {
            
get
            {
                
return  messageAddress;
            }
            
set
            {
                messageAddress 
=  value;
            }
        }

        
private   byte [] data  =   new   byte [] {  0x00  };
        
///   <summary>
        
///  数据,默认值 0x0
        
///   </summary>
         public   byte [] Data
        {
            
get
            {
                
return  data;
            }
            
set
            {
                data 
=  value;
            }
        }

        
#endregion

 

104帧结果和枚举

 

我在电力行业的公司中做软件开发,这些是工作中用到的规约和部分代码,希望对做电力软件的朋友有点借鉴意义,代码都不完整还请见谅。

 

工作将近4年,感觉到不学习新技术会被公司炒掉,不积累行业背景和经验会被社会炒掉,所以建了一个QQ群 19060470 来讨论行业解决方案,还请各行各业的软件同行们能够加入。

 

 

你可能感兴趣的:(工作)