示例#1
0
文件: CMIO32.cs 项目: GJSoftware/Tool
        /// <summary>
        /// 设置新地址
        /// </summary>
        /// <param name="wAddr"></param>
        /// <param name="er"></param>
        /// <returns></returns>
        public bool SetNewAddr(int wAddr, out string er)
        {
            er = string.Empty;

            try
            {
                string wCmd  = string.Empty;
                string rData = string.Empty;
                string rVal  = string.Empty;
                wCmd = "00" + "00" + "00" + "05" + wAddr.ToString("X2");
                wCmd = SOI + wCmd + CalCheckSum(wCmd) + EOI;
                int rLen = 7;
                if (!com.send(wCmd, rLen, out rData, out er, _TimeOut))
                {
                    return(false);
                }
                if (!ToCheckSum(rData, ref rVal))
                {
                    er = "检验和错误:" + rData;
                    return(false);
                }
                return(true);
            }
            catch (Exception e)
            {
                er = e.ToString();
                return(false);
            }
        }
示例#2
0
        /// <summary>
        /// 控制Y1-Y6
        /// </summary>
        /// <param name="wAddr"></param>
        /// <param name="relayNo">iRly=0:所有Y点ON-OFF</param>
        /// <param name="OnOff"></param>
        /// <param name="er"></param>
        /// <returns></returns>
        public bool CtrlYRelay(int wAddr, int relayNo, int OnOff, out string er)
        {
            er = string.Empty;

            try
            {
                string wCmd = string.Empty;

                string rData = string.Empty;

                string rVal = string.Empty;

                wCmd = wAddr.ToString("X2") + "01" + "01" + "06" + relayNo.ToString("X2") + OnOff.ToString("X2");

                wCmd = SOI + wCmd + CalCheckSum(wCmd) + EOI;

                int rLen = 0;

                if (!com.send(wCmd, rLen, out rData, out er))
                {
                    return(false);
                }

                return(true);
            }
            catch (Exception ex)
            {
                er = ex.ToString();
                return(false);
            }
        }
示例#3
0
        /// <summary>
        /// 读取X1-X8
        /// </summary>
        /// <param name="wAddr"></param>
        /// <param name="X">X1-X8</param>
        /// <param name="er"></param>
        /// <returns></returns>
        public bool ReadInSingal(int wAddr, out List <EX> X, out string er)
        {
            X = new List <EX>();

            er = string.Empty;

            try
            {
                string wCmd = string.Empty;

                string rData = string.Empty;

                string rVal = string.Empty;

                wCmd = wAddr.ToString("X2") + "00" + "05" + "04";

                wCmd = SOI + wCmd + CalCheckSum(wCmd) + EOI;

                int rLen = 8;

                if (!com.send(wCmd, rLen, out rData, out er))
                {
                    return(false);
                }

                if (!ToCheckSum(rData, ref rVal))
                {
                    er = CLanguage.Lan("检验和错误:") + rData;
                    return(false);
                }

                int inputSgn = System.Convert.ToInt32(rVal, 16);

                for (int i = 0; i < 8; i++)
                {
                    if ((inputSgn & (1 << i)) == (1 << i))
                    {
                        X.Add(EX.XOFF);
                    }
                    else
                    {
                        X.Add(EX.XON);
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                er = ex.ToString();
                return(false);
            }
        }
示例#4
0
        /// <summary>
        /// 读线圈
        /// 从机地址(1Byte)+功能码(1Byte)+寄存器地址(2Byte)+地址数量(2Byte)+CRC检验(2Byte)
        /// </summary>
        /// <param name="devType">地址类型</param>
        /// <param name="regAddr">开始地址</param>
        /// <param name="N">地址长度</param>
        /// <param name="rData">16进制字符:数据值高位在前,低位在后</param>
        /// <param name="er"></param>
        /// <returns></returns>
        public bool Read(int devAddr, int regAddr, int N, out string rData, out string er)
        {
            rData = string.Empty;

            er = string.Empty;

            try
            {
                int rLen = N * 2;

                string wCmd = devAddr.ToString("X2");

                wCmd += "03";                   //寄存器功能码为03

                wCmd += regAddr.ToString("X4"); //开始地址

                wCmd += N.ToString("X4");       //读地址长度---1Byte

                wCmd += CCRC.Crc16(wCmd);       //CRC16 低位前,高位后

                if (!com.send(wCmd, 5 + rLen, out rData, out er))
                {
                    return(false);
                }

                if (!checkCRC(rData))
                {
                    er = CLanguage.Lan("crc16检验和错误") + ":" + rData;
                    return(false);
                }

                string temp = rData.Substring(6, rLen * 2);

                rData = temp; //2个字节为寄存器值,高在前,低位在后,寄存器小排最前面;

                //转换为寄存器小排最后

                rData = string.Empty;

                for (int i = 0; i < temp.Length / 4; i++)
                {
                    rData = temp.Substring(i * 4, 4) + rData;
                }

                return(true);
            }
            catch (Exception e)
            {
                er = e.ToString();
                return(false);
            }
        }
示例#5
0
        /// <summary>
        /// 发串口信息
        /// </summary>
        /// <param name="wData"></param>
        /// <param name="rLen"></param>
        /// <param name="rData"></param>
        /// <param name="er"></param>
        /// <param name="wTimeOut"></param>
        /// <returns></returns>
        private bool SendCmdToDDLoad(string wData, int rLen, out string rData, out string er, int wTimeOut = 200)
        {
            rData = string.Empty;

            er = string.Empty;

            try
            {
                string recvData = string.Empty;
                if (!com.send(wData, rLen, out recvData, out er, wTimeOut))
                {
                    return(false);
                }
                if (rLen > 0)
                {
                    if (!DD_CheckSum(recvData, ref er))
                    {
                        return(false);
                    }
                    rData = recvData.Substring(10, recvData.Length - 16);
                }
                return(true);
            }
            catch (Exception ex)
            {
                er = ex.ToString();
                return(false);
            }
        }
示例#6
0
        /// <summary>
        /// 发送和接收数据
        /// </summary>
        /// <param name="wAddr"></param>
        /// <param name="wData"></param>
        /// <param name="rLen"></param>
        /// <param name="rData"></param>
        /// <param name="er"></param>
        /// <param name="wTimeOut"></param>
        /// <returns></returns>
        private bool sendCmdToHP(string wData, out string rData, out string er, string rEOI = "\r\n", int wTimeOut = 1000)
        {
            rData = string.Empty;

            er = string.Empty;

            try
            {
                string recvData = string.Empty;
                wData += "\r\n";
                //wData += "\n";
                if (!com.send(wData, rEOI, out rData, out er, wTimeOut))
                {
                    return(false);
                }
                rData = rData.Replace("\r", "");
                rData = rData.Replace("\n", "");
                return(true);
            }
            catch (Exception ex)
            {
                er = ex.ToString();
                return(false);
            }
        }
示例#7
0
        /// <summary>
        /// 发送和接收数据
        /// </summary>
        /// <param name="wAddr"></param>
        /// <param name="wData"></param>
        /// <param name="rLen"></param>
        /// <param name="rData"></param>
        /// <param name="er"></param>
        /// <param name="wTimeOut"></param>
        /// <returns></returns>
        private bool SendCmdToELoad(string wData, int rLen, out string rData, out string er, int wTimeOut = 300)
        {
            rData = string.Empty;

            er = string.Empty;
            string rVal = string.Empty;

            try
            {
                string recvData = string.Empty;

                if (!com.send(wData, rLen, out recvData, out er, wTimeOut))
                {
                    return(false);
                }
                //if (rLen > 0)
                //{
                //    if (!ReturnResult(recvData, out rVal, out er))
                //        return false;
                //    rData = rVal;
                //}
                rData = recvData;
                return(true);
            }
            catch (Exception ex)
            {
                er = ex.ToString();
                return(false);
            }
        }
示例#8
0
        /// <summary>
        /// 发串口数据并接收数据
        /// </summary>
        /// <param name="wCmd"></param>
        /// <param name="rLen"></param>
        /// <param name="rData"></param>
        /// <param name="er"></param>
        /// <param name="wTimeOut"></param>
        /// <returns></returns>
        private bool SendCmdToCOM(string wCmd, int rLen, out string rData, out string er, int wTimeOut = 200)
        {
            rData = string.Empty;

            er = string.Empty;

            try
            {
                string recvData = string.Empty;

                if (!com.send(wCmd, rLen, out recvData, out er, wTimeOut))
                {
                    return(false);
                }

                rData = recvData;

                return(true);
            }
            catch (Exception ex)
            {
                er = ex.ToString();
                return(false);
            }
        }
示例#9
0
        /// <summary>
        /// 发送和接收数据
        /// </summary>
        /// <param name="wAddr"></param>
        /// <param name="wData"></param>
        /// <param name="rLen"></param>
        /// <param name="rData"></param>
        /// <param name="er"></param>
        /// <param name="wTimeOut"></param>
        /// <returns></returns>
        private bool SendCmdToHP(string wData, out string rData, out string er, string rEOI = "\n", int wTimeOut = 1000)
        {
            rData = string.Empty;

            er = string.Empty;

            try
            {
                string recvData = string.Empty;
                wData += "\n";
                if (!com.send(wData, rEOI, out rData, out er, wTimeOut))
                {
                    return(false);
                }
                rData = rData.Replace("\r", "");
                rData = rData.Replace("\n", "");
                if (rData == Encoding.ASCII.GetString(new Byte[1] {
                    0x15
                }))
                {
                    er = "传输指令字符串错误:" + wData.Replace("\n", "");
                    return(false);
                }
                return(true);
            }
            catch (Exception ex)
            {
                er = ex.ToString();
                return(false);
            }
        }
示例#10
0
        /// <summary>
        /// 发送和接收数据
        /// </summary>
        /// <param name="wAddr"></param>
        /// <param name="wData"></param>
        /// <param name="rLen"></param>
        /// <param name="rData"></param>
        /// <param name="er"></param>
        /// <param name="wTimeOut"></param>
        /// <returns></returns>
        private bool sendCmdToHP(string wData, out string rData, out string er, string rEOI = "\r\n", int wTimeOut = 2000)
        {
            rData = string.Empty;

            er = string.Empty;

            try
            {
                Thread.Sleep(30);

                string recvData = string.Empty;

                wData = "{" + wData + "}";

                if (!com.send(wData, rEOI, out rData, out er, wTimeOut))
                {
                    return(false);
                }

                return(true);
            }
            catch (Exception ex)
            {
                er = ex.ToString();
                return(false);
            }
        }
示例#11
0
        private bool SendDeltaCommand(int plcAddr, string wCommandType, ERegType wDataType, int wStartAddr, int wWordCount, int wReadWhite, string wWriteContent,
                                      out string rData, out string er)
        {
            rData = string.Empty;

            er = string.Empty;

            try
            {
                string strCommand = string.Empty;

                strCommand += plcAddr.ToString("X2");
                strCommand += getFunctioncode(wDataType, wReadWhite);
                strCommand += checkAddrs(wDataType, wStartAddr);
                strCommand += wWriteContent;
                strCommand += codeLRC(strCommand);
                strCommand += Chr(13);
                strCommand += Chr(10);
                strCommand  = wCommandType + strCommand;
                int rLen       = 0;
                int lngWordLen = 4;
                if (wReadWhite == 1)
                {
                    rLen = 17;
                }
                else
                {
                    rLen = 11 + lngWordLen * wWordCount;
                }

                if (!com.send(strCommand, rLen, out rData, out er))
                {
                    return(false);
                }

                if (!verifyReceive(rData, ref er))
                {
                    er = er + rData;
                    return(false);
                }
                if (wReadWhite == 1)    //write
                {
                    rData = "OK";
                }
                else                                  //read
                {
                    rData = rData.Substring(7, lngWordLen * wWordCount);
                }

                return(true);
            }
            catch (Exception e)
            {
                er = e.ToString();
                return(false);
            }
        }
示例#12
0
        /// <summary>
        /// 启动机组
        /// </summary>
        /// <param name="devAddr"></param>
        /// <param name="er"></param>
        /// <returns></returns>
        public bool Start(int devAddr, out string er)
        {
            er = string.Empty;

            try
            {
                string wCmd = devAddr.ToString("X2");

                string rData = string.Empty;

                int regAddr = 0;

                int rLen = 8;

                wCmd += "05";                    //寄存器功能码为05

                wCmd += regAddr.ToString("X4");  //开机命令0000

                wCmd += "FF00";                  //有效命令FF00 无效命令0000

                wCmd += CCRC.Crc16(wCmd);        //CRC16 低位前,高位后

                if (!com.send(wCmd, rLen, out rData, out er))
                {
                    return(false);
                }

                if (!checkCRC(rData))
                {
                    er = "crc16检验和错误:" + rData;
                    return(false);
                }

                return(true);
            }
            catch (Exception ex)
            {
                er = ex.ToString();
                return(false);
            }
        }
示例#13
0
        /// <summary>
        /// 发送和接收数据
        /// </summary>
        /// <param name="wAddr"></param>
        /// <param name="wData"></param>
        /// <param name="rLen"></param>
        /// <param name="rData"></param>
        /// <param name="er"></param>
        /// <param name="wTimeOut"></param>
        /// <returns></returns>
        private bool sendCmdToHP(string wData, out string rData, out string er, string rEOI = "\r\n", int wTimeOut = 1000)
        {
            string recvData = string.Empty;

            wData += "\r\n";
            if (!com.send(wData, rEOI, out rData, out er, wTimeOut))
            {
                return(false);
            }
            rData = rData.Replace("\r\n", "");
            return(true);
        }
示例#14
0
        /// <summary>
        /// 设置新地址
        /// </summary>
        /// <param name="wAddr"></param>
        /// <param name="er"></param>
        /// <returns></returns>
        public bool SetNewAddr(int wAddr, out string er)
        {
            er = string.Empty;

            try
            {
                string Cmd = "01";

                string Info = wAddr.ToString("X4");

                string rData = string.Empty;

                string rVal = string.Empty;

                string wCmd = CalSendCmdFormat(0, Cmd, Info);

                int rLen = 6 + 2 * 1;

                if (!com.send(wCmd, rLen, out rData, out er, _TimeOut))
                {
                    return(false);
                }

                if (!CalRtnData(rData, out rVal, out er))
                {
                    return(false);
                }

                return(true);
            }
            catch (Exception e)
            {
                er = e.ToString();
                return(false);
            }
        }
示例#15
0
文件: CAPF.cs 项目: GJSoftware/Tool
        /// <summary>
        /// 读线圈
        /// 从机地址(1Byte)+功能码(1Byte)+寄存器地址(2Byte)+地址数量(2Byte)+CRC检验(2Byte)
        /// </summary>
        /// <param name="devType">地址类型</param>
        /// <param name="regAddr">开始地址</param>
        /// <param name="N">地址长度</param>
        /// <param name="rData">16进制字符:数据值高位在前,低位在后</param>
        /// <param name="er"></param>
        /// <returns></returns>
        public bool Read(int devAddr, ERegType regType, int regAddr, int N, out string rData, out string er)
        {
            rData = string.Empty;

            er = string.Empty;

            try
            {
                string wCmd = devAddr.ToString("X2");
                int    rLen = 0;

                if (regType != ERegType.D)
                {
                    wCmd += "01";        //线圈功能码为01
                    rLen  = (N + 7) / 8; //8个线圈为1Byte:前8个线圈存第1字节,最小线圈存最低位
                }
                else
                {
                    wCmd += "03";   //寄存器功能码为03
                    rLen  = N * 2;
                }
                wCmd += regAddr.ToString("X4"); //开始地址
                wCmd += N.ToString("X2");       //读地址长度---1Byte

                wCmd += CCRC.Crc16(wCmd);       //CRC16 低位前,高位后

                if (!com.send(wCmd, 5 + rLen, out rData, out er))
                {
                    return(false);
                }

                if (!checkCRC(rData))
                {
                    er = CLanguage.Lan("crc16检验和错误") + ":" + rData;
                    return(false);
                }
                string temp = rData.Substring(6, rLen * 2);

                if (regType != ERegType.D)
                {
                    //转化线圈数据为 Mn,Mn-1..M1,M0(高位在前,低位在后)
                    string coil_HL = string.Empty;
                    int    coilLen = temp.Length / 2;
                    for (int i = 0; i < coilLen; i++)
                    {
                        coil_HL += temp.Substring(temp.Length - (i + 1) * 2, 2);
                    }
                    rData = coil_HL;
                }
                else
                {
                    rData = temp;  //2个字节为寄存器值,高在前,低位在后,寄存器小排最前面;
                    //转换为寄存器小排最后
                    rData = string.Empty;
                    for (int i = 0; i < temp.Length / 4; i++)
                    {
                        rData = temp.Substring(i * 4, 4) + rData;
                    }
                }
                return(true);
            }
            catch (Exception e)
            {
                er = e.ToString();
                return(false);
            }
        }
示例#16
0
        private bool SendOmronCommand(int plcAddr, string wCommandType, ERegType wRegType, int wStartAddr, int wStartBit, int wWordCount, string wWriteContent,
                                      out string rData, out string er)
        {
            rData = string.Empty;

            er = string.Empty;

            try
            {
                if (wWriteContent != string.Empty)
                {
                    for (int i = 0; i < wWordCount; i++)
                    {
                        wWriteContent = "0000" + wWriteContent;
                    }
                    wWriteContent = wWriteContent.Substring(wWriteContent.Length - wWordCount * 4, wWordCount * 4);
                }
                string strCommand;
                strCommand  = c_SOI + plcAddr.ToString("X2") + "FA000000000";
                strCommand += wCommandType;
                strCommand += getRegAddr(wRegType);
                strCommand += wStartAddr.ToString("X4") + wStartBit.ToString("X2");
                strCommand += wWordCount.ToString("X4");
                if (wRegType == ERegType.WB)
                {
                    strCommand += wWriteContent.Substring(wWriteContent.Length - 2, 2);
                }
                else
                {
                    strCommand += wWriteContent;
                }
                strCommand += codeFcs(strCommand);
                strCommand += c_EOI;
                int lngWordLen = 0;
                if (wWriteContent == string.Empty)
                {
                    lngWordLen = 4;
                }
                int rLen = 27 + lngWordLen * wWordCount;
                if (!com.send(strCommand, rLen, out rData, out er))
                {
                    return(false);
                }
                if (!verifyReceive(plcAddr, rData, wCommandType))
                {
                    er = CLanguage.Lan("接收数据错误") + "[checkSum]:" + rData;
                    return(false);
                }
                if (wWriteContent != string.Empty)  //write
                {
                    rData = "OK";
                }
                else                                //read
                {
                    rData = rData.Substring(23, lngWordLen * wWordCount);
                }
                return(true);
            }
            catch (Exception e)
            {
                er = e.ToString();
                return(false);
            }
        }