|
|
@@ -3,7 +3,6 @@
|
|
|
#include "xlist.h"
|
|
|
#include "elog.h"
|
|
|
#include "paras.h"
|
|
|
-#include "modbus-rtu.h"
|
|
|
#include "cfg.h"
|
|
|
#include "sys.h"
|
|
|
#include "paras.h"
|
|
|
@@ -637,100 +636,7 @@ static inline GlobalDeviceInfo *get_dev(void)
|
|
|
{
|
|
|
return ¶s_get()->dev;
|
|
|
}
|
|
|
-static int mbus_init(cascade_handle_t *cas, char *path, int mode, int addr, uint32_t baud)
|
|
|
-{
|
|
|
- int r;
|
|
|
-
|
|
|
- cas->mb = modbus_new_rtu(path, baud, 'N', 8, 1);
|
|
|
- if(cas->mb == NULL)
|
|
|
- return -1;
|
|
|
-
|
|
|
- r = modbus_connect(cas->mb);
|
|
|
- if (r!=0) {
|
|
|
- LOGD("____modbus_connect failed, %s\n", modbus_strerror(errno));
|
|
|
- return -1;
|
|
|
- }
|
|
|
|
|
|
- //r = modbus_rtu_set_serial_mode(cas->mb, MODBUS_RTU_RS485);
|
|
|
- if (r != 0){
|
|
|
- LOGD("____modbus_rtu_set_serial_mode failed, %s\n", modbus_strerror(errno));
|
|
|
- return -1;
|
|
|
- }
|
|
|
-
|
|
|
- r = modbus_rtu_set_rts(cas->mb, MODBUS_RTU_RTS_NONE);
|
|
|
- if (r != 0) {
|
|
|
- LOGD("____modbus_rtu_set_rts failed, %s\n", modbus_strerror(errno));
|
|
|
- return -1;
|
|
|
- }
|
|
|
- r = modbus_set_error_recovery(cas->mb, MODBUS_ERROR_RECOVERY_PROTOCOL);
|
|
|
-
|
|
|
- //设置超时时间为2S
|
|
|
- modbus_set_response_timeout(cas->mb, 1, 5000);
|
|
|
- modbus_set_byte_timeout(cas->mb, 0, 50000);
|
|
|
-
|
|
|
- cas->addr = addr;
|
|
|
- if(mode==MODBUS_SLAVE) { //slave mode
|
|
|
- modbus_set_slave(cas->mb, addr);
|
|
|
- }
|
|
|
-
|
|
|
- r = pthread_mutex_init(&cas->mutex, NULL);
|
|
|
- if (r) {
|
|
|
- LOGD("____pthread_mutex_init failed\n");
|
|
|
- return -1;
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-static int mbus_deinit(cascade_handle_t *cas)
|
|
|
-{
|
|
|
- modbus_close(&cas->mb);
|
|
|
- modbus_free(&cas->mb);
|
|
|
- return 0;
|
|
|
-}
|
|
|
-static int mbus_read(cascade_handle_t *cas, int addr, uint16_t reg, uint16_t *data, int len)
|
|
|
-{
|
|
|
- int r=0;
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
- modbus_set_slave(cas->mb, addr);
|
|
|
- r = modbus_read_registers(cas->mb, reg, (len+len%2)/2, data);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
- return r ;
|
|
|
-}
|
|
|
-static int mbus_write(cascade_handle_t *cas, int addr, uint16_t reg, uint16_t *data, int len)
|
|
|
-{
|
|
|
- int r=0;
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
- modbus_set_slave(cas->mb, addr);
|
|
|
- r = modbus_write_registers(cas->mb, reg, (len+len%2)/2, data);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
- return r ;
|
|
|
-}
|
|
|
-static int mbus_write_read(cascade_handle_t *cas, int addr, uint16_t reg, uint16_t *wdata, int wlen, uint16_t *rdata, int rlen)
|
|
|
-{
|
|
|
- int r=0;
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
- modbus_set_slave(cas->mb, addr);
|
|
|
- r = modbus_write_and_read_registers(cas->mb, reg, (wlen+wlen%2)/2, wdata, reg, (rlen+rlen%2)/2, rdata);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
- return r ;
|
|
|
-}
|
|
|
-
|
|
|
-static int mbus_receive(cascade_handle_t *cas, uint8_t *req)
|
|
|
-{
|
|
|
- int r=0;
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
- r = modbus_receive(cas->mb, req);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
- return r ;
|
|
|
-}
|
|
|
-static int mbus_reply(cascade_handle_t *cas, uint8_t *req, int reqlen, modbus_mapping_t *map)
|
|
|
-{
|
|
|
- int r=0;
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
- r = modbus_reply(cas->mb, req, reqlen, map);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
- return r ;
|
|
|
-}
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
static int find_addr_fn(handle_t l, node_t *node, node_t *xd, void *arg, int *act)
|
|
|
{
|
|
|
@@ -961,26 +867,7 @@ static void* scan_thread(void *arg)
|
|
|
|
|
|
pthread_exit(NULL);
|
|
|
}
|
|
|
-static int mb_init(cascade_handle_t *cas)
|
|
|
-{
|
|
|
- int r;
|
|
|
- ModbusInfo_t *info=&get_dev()->_gmodbus_info;
|
|
|
|
|
|
- if(cas->inited) {
|
|
|
- mbus_deinit(&cas);
|
|
|
- }
|
|
|
- cas->inited = 0;
|
|
|
- r = mbus_init(cas, CASCADE_MODBUS_PORT, info->product_modbus_type,
|
|
|
- (info->product_modbus_type==MODBUS_MASTER)?0:info->product_modbus_addr,
|
|
|
- info->product_modbus_baud);
|
|
|
- if(r!=0) {
|
|
|
- LOGE("cascade modbus init error.\n");
|
|
|
- return -1;
|
|
|
- }
|
|
|
- cas->inited = 1;
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
|
|
|
|
|
|
int cascade_init(void)
|