예제 #1
0
        public void Parse(ushort[] src, int startIndex, int count)
        {
            //ClearRegs();

            if ((src == null) || (src.Length <= 0))
            {
                return;
            }

            ushort[] buf = ValueUtil.StructToBuff <ushort, common.devices.USM.MbUsmRegisters>(USM_Reg);

            int end = startIndex + count;

            for (int i = startIndex; i < end; i++)
            {
                if (i >= buf.Length)
                {
                    break;
                }
                if (i >= src.Length)
                {
                    break;
                }

                buf[i] = src[i];
            }

            USM_Reg = ValueUtil.BufToStruct <common.devices.USM.MbUsmRegisters, ushort>(buf);
        }
예제 #2
0
        bool ModbusUpdate()
        {
            try
            {
                lock (m_syncObject)
                {
                    //for (int i = 0; i < 1281; i += 125)
                    //{
                    ///*rdBuf*/ = m_mbMaster.ReadHoldingRegisters(m_slaveAddr, m_startAddr, m_count);
                    //for (int j = 0; j < 126; j++)
                    //{
                    //    if (i + j < 1281)
                    //    {
                    //        //MyClass.rxData[i + j] = rdBuf[j];
                    //    }

                    //}

                    int    count = RegistersCountMax;
                    ushort addr  = m_startAddr;
                    int    rdLen;
                    int    index = 0;
                    if (rdBuf == null)
                    {
                        rdBuf = new ushort[RegistersCountMax];
                    }

                    while (count > 0)
                    {
                        rdLen = count;
                        if (rdLen > IOCountMax)
                        {
                            rdLen = IOCountMax;
                        }

                        ushort[] tBuf = m_mbMaster.ReadHoldingRegisters(m_slaveAddr, (ushort)index, (ushort)rdLen);
                        //         ushort[] tBuf = m_mbMaster.ReadHoldingRegisters(1, 1, 5);
                        Array.Copy(tBuf, 0, rdBuf, index, rdLen);

                        index += rdLen;
                        addr  += (ushort)rdLen;
                        count -= rdLen;

                        // ushort[] buf = ValueUtil.StructToBuff<ushort, RegistersData.MbRegisters>(USM_Reg);



                        //GetVals(tBuf);
                    }
                    USM_Reg = ValueUtil.BufToStruct <common.devices.USM.MbUsmRegisters, ushort>(rdBuf);
                    //}



                    //rdBuf[280] = 1;
                }

                return(true);
            }
            catch (Exception ex)
            {
                m_lastError = ex.Message;
                return(false);
            }
        }