Пример #1
0
        /// <summary>
        /// PLCからのデータ取得
        /// 大量のReadが発生しないように、上位概念において連続AddressをMergeして高速化を図ることにしているので、これ以外のReadMethosは現状未使用となっている
        /// </summary>
        /// <param name="unitAdr"></param>
        /// <param name="acMem"></param>
        /// <param name="readOffset"></param>
        /// <param name="length"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public CLK_ReturnCode Read(EventMemory memoryType, UInt32 readOffset, out UInt16[] data, UInt32 wordLength = 1)
        {
            CLK_ReturnCode result = CLK_ReturnCode.CLK_SUCCESS;

            if (memoryType == EventMemory.DM && readOffset > ClkLibConstants.DataLinkEndAddressDM)
            {
                // DM で、DataLink対象外のMemoryは、FinsCommandで取得する。→送信&受信待ちとなるので、取得時間が遅くなるけどね・・
                var wordLengthWithHeader = wordLength + ClkLibConstants.FinsReceiveHeaderSizeAsWord;
                data   = new UInt16[wordLengthWithHeader];
                result = (CLK_ReturnCode)ClkLib_ReadAsUInt16ByFinsAtDM(UnitAdr, readOffset, data, wordLength, ClkLibConstants.FinsReceiveCommandWaitTime);
                data   = data.Skip(ClkLibConstants.FinsReceiveHeaderSizeAsWord).ToArray();
                SwapX2(data);
                return(result);
            }
            else
            {
                data   = new UInt16[wordLength];
                result = (CLK_ReturnCode)ClkLib_ReadAsUInt16(UnitAdr, memoryType, readOffset, data, wordLength);
                // DWORD 時、ここにSwapX2(data)いるかも。未検証。データが結局なかったので
            }
            if (result != CLK_ReturnCode.CLK_SUCCESS)
            {
                var sb = new StringBuilder("Read error ");
                sb.Append(result).Append(":");
                sb.Append(memoryType).Append(",");
                sb.Append(readOffset).Append(",");
                sb.Append(wordLength).Append(",");
                data.ToList().ForEach(f => sb.Append(f));
                Log.Error(sb.ToString());
            }
            return(result);
        }