Beispiel #1
0
        public Tuple <ErrorCode, byte[]> getCoilsState(PLCInfo.CoilType coilType, int nCoilNumber, int nReadNumber)
        {
            string strType       = coilType.ToString();
            string strReadNumber = nReadNumber.ToString("D2");
            string strCoilNumber = nCoilNumber.ToString("D4");
            string strCmd        = strReadNumber + strType + strCoilNumber;

            byte[] baPLCAsciiRes = SendPLC(PLCInfo.FunctionID.ReadStatePoint, strCmd);

            if (baPLCAsciiRes.Length > 0)
            {
                string strUsefulRes = Encoding.ASCII.GetString(baPLCAsciiRes);
                // Suppose M0=1, M1=0, M2=1, M3=1, strUsefulRes= 01011
                // Note: The first 0 is error code. and the rest bits are for M0~M3

                byte[] baUsefulRes = decStringToDecByteArray(strUsefulRes);
                byte[] baResult    = (baUsefulRes[0] == 0) ? baUsefulRes.Skip(1).Take(baUsefulRes.GetLength(0) - 1).ToArray <byte>() : new byte[0];

                return(Tuple.Create(myErrorCode(baUsefulRes[0]), baResult));        // first one is error code, the second rest are useful info.
            }
            else
            {
                return(Tuple.Create(ErrorCode.PLCSocketErr, new byte[0]));
            }
        }
Beispiel #2
0
        public Tuple <byte, byte> getCoilState(PLCInfo.CoilType coilType, int nCoilNumber)
        {
            var  result     = getCoilsState(coilType, nCoilNumber, 1);
            byte nErrorCode = result.Item1;
            byte nCoilState = result.Item2[0];

            return(Tuple.Create(nErrorCode, nCoilState));        // first one is error code, the second rest are useful info.
        }
Beispiel #3
0
 public void getCoilsStateAsync(Action <ErrorCode, byte[]> callbackFunc, PLCInfo.CoilType coilType, int nCoilNumber, int nReadNumber)
 {
     var t1 = Task.Factory.StartNew(() =>
     {
         var result          = getCoilsState(coilType, nCoilNumber, nReadNumber);
         ErrorCode errorCode = result.Item1;
         byte[] baCoilState  = result.Item2;
         callbackFunc(errorCode, baCoilState);
     });
 }
Beispiel #4
0
        public Tuple <ErrorCode, byte> getCoilState(PLCInfo.CoilType coilType, int nCoilNumber)
        {
            var       result    = getCoilsState(coilType, nCoilNumber, 1);
            ErrorCode errorCode = result.Item1;
            byte      nCoilState;

            if ((int)errorCode == 0)
            {
                nCoilState = result.Item2[0];
            }
            else
            {
                nCoilState = 0;
            }

            return(Tuple.Create(errorCode, nCoilState));        // first one is error code, the second rest are useful info.
        }
Beispiel #5
0
        public Tuple <byte, byte[]> getCoilsState(PLCInfo.CoilType coilType, int nCoilNumber, int nReadNumber)
        {
            string strType       = coilType.ToString();
            string strReadNumber = nReadNumber.ToString("D2");
            string strCoilNumber = nCoilNumber.ToString("D4");
            string strCmd        = strReadNumber + strType + strCoilNumber;

            byte[] baPLCAsciiRes = SendPLC(PLCInfo.FunctionID.ReadStatePoint, strCmd);
            string strUsefulRes  = Encoding.ASCII.GetString(baPLCAsciiRes);

            Console.WriteLine("strUsefulRes: {0}, {1}", strUsefulRes, strUsefulRes.Length);

            byte[] baUsefulRes = decStringToDecByteArray(strUsefulRes);

            byte[] baResult = (baUsefulRes[0] == 0) ? baUsefulRes.Skip(1).Take(baUsefulRes.GetLength(0) - 1).ToArray <byte>() : new byte[0];

            return(Tuple.Create(baUsefulRes[0], baResult));        // first one is error code, the second rest are useful info.
        }