123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- #include "mbs.h"
- static fmodbus_t* MB[MAX_MBS];
- /* ----------------------- Defines ------------------------------------------*/
- /* ctn modbus tcp slave*/
- #define REG_HOLDING_START_ZH 0x0000
- #define REG_HOLDING_NREGS_ZH 0x8000
- #define REG_INPUT_START_ZH 0x0000
- #define REG_INPUT_REG_ZH 0x8000
- static USHORT MBS_BUF[MAX_MBS][REG_INPUT_REG_ZH - REG_INPUT_START_ZH] = { 0 };
- // static USHORT usRegInputReg_ZH[REG_INPUT_REG_ZH] = { 0 };
- // static USHORT usRegHoldingBuf_ZH[REG_HOLDING_NREGS_ZH] = { 0 };
- static enum ThreadState { STOPPED,RUNNING,SHUTDOWN } ePollThreadState;
- static pthread_mutex_t xLock = PTHREAD_MUTEX_INITIALIZER;
- // static BOOL bDoExit;
- void* pvPollingThread(void* pvParameter)
- {
- fmodbus_t* ctx = (fmodbus_t*)pvParameter;
- syslog(LOG_INFO,"%s, ++, mbsidx:%d started",__func__,ctx->mbsidx);
- if(eMBEnable(ctx) == MB_ENOERR)
- {
- do
- {
- if(eMBPoll(ctx) != MB_ENOERR) break;
- } while(TRUE);
- }
- (void)eMBDisable(ctx);
- syslog(LOG_INFO,"%s, --, mbsidx:%d exit",__func__,ctx->mbsidx);
- return NULL;
- }
- static void onReadInputBuf_ZH(fmodbus_t* ctx,USHORT* buf)
- {
- struct tm tm;
- buf[1 - REG_INPUT_START_ZH] = (unsigned short)(APPL.Tick);
- buf[2 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].com_ap*10) >> 16;
- buf[3 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].com_ap*10) & 0xFFFF;
- buf[4 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].pos_ae*10) >> 16;
- buf[5 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].pos_ae*10) & 0xFFFF;
- buf[6 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].neg_ae*10) >> 16;
- buf[7 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].neg_ae*10) & 0xFFFF;
- buf[8 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].pf*10) >> 16;
- buf[9 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].pf*10) & 0xFFFF;
- buf[10 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].pos_active_dem*10) >> 16;
- buf[11 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].pos_active_dem*10) & 0xFFFF;
- buf[12 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].neg_active_dem*10)>> 16;
- buf[13 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].neg_active_dem*10) & 0xFFFF;
- buf[14 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].ua*10) >> 16;
- buf[15 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].ua*10) & 0xFFFF;
- buf[16 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].ub*10) >> 16;
- buf[17 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].ub*10) & 0xFFFF;
- buf[18 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].uc*10) >> 16;
- buf[19 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].uc*10) & 0xFFFF;
- buf[20 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].ia*10) >> 16;
- buf[21 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].ia*10) & 0xFFFF;
- buf[22 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].ib*10) >> 16;
- buf[23 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].ib*10) & 0xFFFF;
- buf[24 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].ic*10) >> 16;
- buf[25 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].ic*10) & 0xFFFF;
- buf[26 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].freq*10) >> 16;
- buf[27 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].freq*10) & 0xFFFF;
- buf[28 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].PT*10) >> 16;
- buf[29 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].PT*10) & 0xFFFF;
- buf[30 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].CT*10) >> 16;
- buf[31 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[2].CT*10) & 0xFFFF;
- buf[101 - REG_INPUT_START_ZH] = (short)APPL.Dtsd1352[2].CommState;
- memset(&tm,0,sizeof(struct tm));
- if(strptime(APPL.Dtsd1352[2].szLastUpdate,"%Y-%m-%d %H:%M:%S",&tm) == NULL)
- {
- // syslog(LOG_INFO,"Date conversion for Dtsd1352[2] failed\n");
- }
- else
- {
- buf[102 - REG_INPUT_START_ZH] = (short)(tm.tm_year + 1900);
- buf[103 - REG_INPUT_START_ZH] = (short)(tm.tm_mon + 1);
- buf[104 - REG_INPUT_START_ZH] = (short)(tm.tm_mday);
- buf[105 - REG_INPUT_START_ZH] = (short)(tm.tm_hour);
- buf[106 - REG_INPUT_START_ZH] = (short)(tm.tm_min);
- buf[107 - REG_INPUT_START_ZH] = (short)(tm.tm_sec);
- }
- buf[1001 - REG_INPUT_START_ZH] = (unsigned short)(APPL.Tick);
- buf[1002 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].com_ap*10) >> 16;
- buf[1003 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].com_ap*10) & 0xFFFF;
- buf[1004 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].pos_ae*10) >> 16;
- buf[1005 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].pos_ae*10) & 0xFFFF;
- buf[1006 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].neg_ae*10) >> 16;
- buf[1007 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].neg_ae*10) & 0xFFFF;
- buf[1008 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].pf*10) >> 16;
- buf[1009 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].pf*10) & 0xFFFF;
- buf[1010 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].pos_active_dem*10) >> 16;
- buf[1011 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].pos_active_dem*10) & 0xFFFF;
- buf[1012 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].neg_active_dem*10)>> 16;
- buf[1013 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].neg_active_dem*10) & 0xFFFF;
- buf[1014 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].ua*10) >> 16;
- buf[1015 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].ua*10) & 0xFFFF;
- buf[1016 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].ub*10) >> 16;
- buf[1017 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].ub*10) & 0xFFFF;
- buf[1018 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].uc*10) >> 16;
- buf[1019 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].uc*10) & 0xFFFF;
- buf[1020 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].ia*10) >> 16;
- buf[1021 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].ia*10) & 0xFFFF;
- buf[1022 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].ib*10) >> 16;
- buf[1023 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].ib*10) & 0xFFFF;
- buf[1024 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].ic*10) >> 16;
- buf[1025 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].ic*10) & 0xFFFF;
- buf[1026 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].freq*10) >> 16;
- buf[1027 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].freq*10) & 0xFFFF;
- buf[1028 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].PT*10) >> 16;
- buf[1029 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].PT*10) & 0xFFFF;
- buf[1030 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].CT*10) >> 16;
- buf[1031 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].CT*10) & 0xFFFF;
- buf[1032 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].com_ap*10) >> 16;
- buf[1033 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].com_ap*10) & 0xFFFF;
- buf[1034 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].com_rap*10) >> 16;
- buf[1035 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].com_rap*10) & 0xFFFF;
- buf[1036 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].uab*10);
- buf[1037 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].ubc*10);
- buf[1038 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].uac*10);
- buf[1039 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].apA*10) >> 16;
- buf[1040 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].apA*10) & 0xFFFF;
- buf[1041 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].apB*10) >> 16;
- buf[1042 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].apB*10) & 0xFFFF;
- buf[1043 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].apC*10) >> 16;
- buf[1044 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].apC*10) & 0xFFFF;
- buf[1045 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].rapA*10) >> 16;
- buf[1046 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].rapA*10) & 0xFFFF;
- buf[1047 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].rapB*10) >> 16;
- buf[1048 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].rapB*10) & 0xFFFF;
- buf[1049 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].rapC*10) >> 16;
- buf[1050 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].rapC*10) & 0xFFFF;
- buf[1051 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].pfA*10);
- buf[1052 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].pfB*10);
- buf[1053 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[3].pfC*10);
- buf[1101 - REG_INPUT_START_ZH] = (short)APPL.Dtsd1352[3].CommState;
- memset(&tm,0,sizeof(struct tm));
- if(strptime(APPL.Dtsd1352[3].szLastUpdate,"%Y-%m-%d %H:%M:%S",&tm) == NULL)
- {
- //syslog(LOG_INFO,"Date conversion for Dtsd1352[3] failed\n");
- }
- else
- {
- buf[1102 - REG_INPUT_START_ZH] = (short)(tm.tm_year + 1900);
- buf[1103 - REG_INPUT_START_ZH] = (short)(tm.tm_mon + 1);
- buf[1104 - REG_INPUT_START_ZH] = (short)(tm.tm_mday);
- buf[1105 - REG_INPUT_START_ZH] = (short)(tm.tm_hour);
- buf[1106 - REG_INPUT_START_ZH] = (short)(tm.tm_min);
- buf[1107 - REG_INPUT_START_ZH] = (short)(tm.tm_sec);
- }
- // 储能电表
- buf[2001 - REG_INPUT_START_ZH] = (unsigned short)(APPL.Tick);
- buf[2002 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].com_ap*10) >> 16;
- buf[2003 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].com_ap*10) & 0xFFFF;
- buf[2004 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].pos_ae*10) >> 16;
- buf[2005 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].pos_ae*10) & 0xFFFF;
- buf[2006 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].neg_ae*10) >> 16;
- buf[2007 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].neg_ae*10) & 0xFFFF;
- buf[2008 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].pf*10) >> 16;
- buf[2009 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].pf*10) & 0xFFFF;
- buf[2010 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].pos_active_dem*10) >> 16;
- buf[2011 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].pos_active_dem*10) & 0xFFFF;
- buf[2012 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].neg_active_dem*10)>> 16;
- buf[2013 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].neg_active_dem*10) & 0xFFFF;
- buf[2014 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].ua*10) >> 16;
- buf[2015 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].ua*10) & 0xFFFF;
- buf[2016 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].ub*10) >> 16;
- buf[2017 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].ub*10) & 0xFFFF;
- buf[2018 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].uc*10) >> 16;
- buf[2019 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].uc*10) & 0xFFFF;
- buf[2020 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].ia*10) >> 16;
- buf[2021 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].ia*10) & 0xFFFF;
- buf[2022 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].ib*10) >> 16;
- buf[2023 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].ib*10) & 0xFFFF;
- buf[2024 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].ic*10) >> 16;
- buf[2025 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].ic*10) & 0xFFFF;
- buf[2026 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].freq*10) >> 16;
- buf[2027 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].freq*10) & 0xFFFF;
- buf[2028 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].PT*10) >> 16;
- buf[2029 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].PT*10) & 0xFFFF;
- buf[2030 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].CT*10) >> 16;
- buf[2031 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].CT*10) & 0xFFFF;
- buf[2032 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].com_ap*10) >> 16;
- buf[2033 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].com_ap*10) & 0xFFFF;
- buf[2034 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].com_rap*10) >> 16;
- buf[2035 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].com_rap*10) & 0xFFFF;
- buf[2036 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].uab*10);
- buf[2037 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].ubc*10);
- buf[2038 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].uac*10);
- buf[2039 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].apA*10) >> 16;
- buf[2040 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].apA*10) & 0xFFFF;
- buf[2041 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].apB*10) >> 16;
- buf[2042 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].apB*10) & 0xFFFF;
- buf[2043 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].apC*10) >> 16;
- buf[2044 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].apC*10) & 0xFFFF;
- buf[2045 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].rapA*10) >> 16;
- buf[2046 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].rapA*10) & 0xFFFF;
- buf[2047 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].rapB*10) >> 16;
- buf[2048 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].rapB*10) & 0xFFFF;
- buf[2049 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].rapC*10) >> 16;
- buf[2050 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].rapC*10) & 0xFFFF;
- buf[2051 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].pfA*10);
- buf[2052 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].pfB*10);
- buf[2053 - REG_INPUT_START_ZH] = (int)(APPL.Dtsd1352[1].pfC*10);
- buf[2101 - REG_INPUT_START_ZH] = (short)APPL.Dtsd1352[1].CommState;
- memset(&tm,0,sizeof(struct tm));
- if(strptime(APPL.Dtsd1352[1].szLastUpdate,"%Y-%m-%d %H:%M:%S",&tm) == NULL)
- {
- //syslog(LOG_INFO,"Date conversion for Dtsd1352[1] failed\n");
- }
- else
- {
- buf[2102 - REG_INPUT_START_ZH] = (short)(tm.tm_year + 1900);
- buf[2103 - REG_INPUT_START_ZH] = (short)(tm.tm_mon + 1);
- buf[2104 - REG_INPUT_START_ZH] = (short)(tm.tm_mday);
- buf[2105 - REG_INPUT_START_ZH] = (short)(tm.tm_hour);
- buf[2106 - REG_INPUT_START_ZH] = (short)(tm.tm_min);
- buf[2107 - REG_INPUT_START_ZH] = (short)(tm.tm_sec);
- }
- }
- // process 03
- static void prepareRegHoldingBuf_ZH(fmodbus_t* ctx,int iAddress)
- {
- }
- // 06
- static void onWriteRegHoldingBuf_ZH(fmodbus_t* ctx,USHORT* buf,int iAddress)
- {
- }
- eMBErrorCode eMBRegInputCB(fmodbus_t* ctx,UCHAR* pucRegBuffer,
- USHORT usAddress,USHORT usNRegs)
- {
- eMBErrorCode eStatus = MB_ENOERR;
- int iRegIndex;
- // struct chan_t* chan = &STA.chan[ctx->chanidx];
- // if (chan->mbsidx >= 1 && chan->mbsidx <= PCS_NBR_MAX)
- if(ctx->mbsidx == MBSIDX_CTN1)
- {
- // if ((usAddress >= REG_INPUT_START_PCS) && (usAddress + usNRegs <=
- // REG_INPUT_START_PCS + REG_INPUT_NREGS_PCS)) if ((usAddress >=
- // REG_HOLDING_START_ZH) && (usAddress + usNRegs <= REG_HOLDING_START_ZH +
- // REG_HOLDING_NREGS_ZH))
- }
- USHORT* buf = MBS_BUF[ctx->mbsidx];
- if((usAddress >= REG_INPUT_START_ZH) &&
- (usAddress + usNRegs <= REG_INPUT_START_ZH + REG_INPUT_REG_ZH))
- {
- // iRegIndex = (int)(usAddress - usRegInputStart_PCS[chan->mbsidx]);
- // syslog(LOG_INFO,"%s, usAddress:%d, usNRegs:%d",__func__,usAddress,usNRegs);
- onReadInputBuf_ZH(ctx,buf);
- iRegIndex = (int)(usAddress - REG_INPUT_START_ZH);
- while(usNRegs > 0)
- {
- *pucRegBuffer++ = (UCHAR)(buf[iRegIndex] >> 8);
- *pucRegBuffer++ = (UCHAR)(buf[iRegIndex] & 0xFF);
- iRegIndex++;
- usNRegs--;
- }
- }
- else
- {
- eStatus = MB_ENOREG;
- }
- return eStatus;
- }
- eMBErrorCode eMBRegHoldingCB(fmodbus_t* ctx,UCHAR* pucRegBuffer,
- USHORT usAddress,USHORT usNRegs,
- eMBRegisterMode eMode)
- {
- eMBErrorCode eStatus = MB_ENOERR;
- int iRegIndex;
- int i = 0;
- // struct chan_t* chan = &STA.chan[ctx->chanidx];
- // if( chan->dbg > 0 ){
- // log_dbg("%s, chanidx:%d, mbsidx:%d, mbsdevm:%d, mbsdevidx:%d,
- // usAddress:%d, usNRegs:%d, eMode:%d",
- // __func__,
- // ctx->chanidx,
- // chan->mbsidx,
- // chan->mbsdevm,
- // chan->mbsdevidx,
- // usAddress,
- // usNRegs,
- // eMode);
- // }
- // if( chan->en == 0 ){
- // return MB_EIO;
- // }
- USHORT* buf = MBS_BUF[ctx->mbsidx];
- if((usAddress >= REG_HOLDING_START_ZH) &&
- (usAddress + usNRegs <= REG_HOLDING_START_ZH + REG_HOLDING_NREGS_ZH))
- {
- iRegIndex = (int)(usAddress - REG_HOLDING_START_ZH);
- switch(eMode)
- {
- /* Pass current register values to the protocol stack. */
- case MB_REG_READ:
- prepareRegHoldingBuf_ZH(ctx,(usAddress- REG_HOLDING_START_ZH));
- while(usNRegs > 0)
- {
- *pucRegBuffer++ = (UCHAR)(buf[iRegIndex] >> 8);
- *pucRegBuffer++ = (UCHAR)(buf[iRegIndex] & 0xFF);
- iRegIndex++;
- usNRegs--;
- }
- break;
- /* Update current register values with new values from the
- * protocol stack. */
- case MB_REG_WRITE:
- while(usNRegs > 0)
- {
- buf[iRegIndex] = *pucRegBuffer++ << 8;
- buf[iRegIndex] |= *pucRegBuffer++;
- iRegIndex++;
- usNRegs--;
- }
- onWriteRegHoldingBuf_ZH(ctx,buf,(usAddress - REG_HOLDING_START_ZH));
- break;
- }
- }
- else
- {
- eStatus = MB_ENOREG;
- }
- return eStatus;
- }
- eMBErrorCode eMBRegCoilsCB(fmodbus_t* ctx,UCHAR* pucRegBuffer,
- USHORT usAddress,USHORT usNCoils,
- eMBRegisterMode eMode)
- {
- return MB_ENOREG;
- }
- eMBErrorCode eMBRegDiscreteCB(fmodbus_t* ctx,UCHAR* pucRegBuffer,
- USHORT usAddress,USHORT usNDiscrete)
- {
- return MB_ENOREG;
- }
- int mbs_start_ctn(int port,int mbsidx)
- {
- int ret = 0;
- const UCHAR ucSlaveID[] = { 0xAA, 0xBB, 0xCC };
- pthread_t xthrd;
- syslog(LOG_INFO, "%s, ++, %d %d",__func__,port,mbsidx);
- if(eMBTCPInit(&MB[mbsidx],port) != MB_ENOERR)
- {
- syslog(LOG_INFO,"%s, eMBTCPInit fail",__func__);
- ret = -1;
- }
- else if(eMBSetSlaveID(MB[mbsidx],0x34,TRUE,ucSlaveID,3) !=
- MB_ENOERR)
- {
- syslog(LOG_INFO,"%s, eMBSetSlaveID fail",__func__);
- ret = -2;
- }
- else
- {
- MB[mbsidx]->mbsidx = mbsidx;
- if(pthread_create(&xthrd,NULL,pvPollingThread,MB[mbsidx]) != 0)
- {
- syslog(LOG_INFO,"%s, pthread_create fail",__func__);
- ret = -3;
- }
- else
- {
- syslog(LOG_INFO,"%s, start ok, %d %d",__func__,port,mbsidx);
- }
- }
- return ret;
- }
|