Modbus TCP & CT(Nidec)

jaden

Member
Join Date
Sep 2009
Location
Pleasant Dale, Nebraska
Posts
304
Has anyone interfaced a PLC with a Control Techniques drive Nidec 750 using Modbus TCP? I am attempting to do so using an Automation Direct Click. The Click setup is pretty straightforward, but the Nidec drive is a little vague. So far, no success.
 
I did this a while back for a test using a Siemens S7-1515 plc to read menu 18 parameter 11 from 3 nidec drives.



Code:
#ConnectData.InterfaceId := "Local~PROFINET_interface_1";
#ConnectData.ID := USINT_TO_WORD(#fbIPAddress.IPParam.IPAddress[3]);
#ConnectData.ConnectionType := 11;
#ConnectData.ActiveEstablished := True;
#Modbus.Mode := 103; //read only at present, use 116 to write

#ConnectData.RemoteAddress.ADDR[1] := #fbIPAddress.IPParam.IPAddress[0];
#ConnectData.RemoteAddress.ADDR[2] := #fbIPAddress.IPParam.IPAddress[1];
#ConnectData.RemoteAddress.ADDR[3] := #fbIPAddress.IPParam.IPAddress[2];
#ConnectData.RemoteAddress.ADDR[4] := #fbIPAddress.IPParam.IPAddress[3];
#ConnectData.RemotePort := 502;
#ConnectData.LocalPort := 0;

IF #ModbusSeq[#iDriveIndex] AND NOT #bStartEdgeStore THEN
    #ParamStateMachine.bStart := True;
END_IF;
#bStartEdgeStore := #ModbusSeq[#iDriveIndex];




CASE #ParamStateMachine.iState OF
    0:
        //modbus idle wait for start
        #Modbus.bREQ := False;
        #Modbus.bDISCONNECT := true;
        IF #ParamStateMachine.bStart THEN
            #iRetVal:=RD_SYS_T(#dtThen);
            #ParamStateMachine.iState += 1;
        END_IF;
        
    1:
        //skip if menu is -1
        IF #aParameterList[#iListIndex].iMenuNumber = -1 THEN
            #ParamStateMachine.iState := 100;
        ELSE
         #Modbus.bREQ := True;
         #Modbus.bDISCONNECT := False;
         #Modbus.diModbusAddress := 16384 + (100 * #aParameterList[#iListIndex].iMenuNumber) + (#aParameterList[#iListIndex].iParameterNumber - 1);
         IF (#Modbus.wStatus = 16#7000) OR (#Modbus.wStatus = 16#7004) OR (#Modbus.wStatus = 16#0) THEN
            #ParamStateMachine.iState += 1;
         END_IF;
 
     END_IF;
     IF #fbTimeOut.Q THEN
         #ParamStateMachine.iState := 100;
         #ParamStateMachine.iErrorState := #ParamStateMachine.iState;
         #aParameterList[#iListIndex].wErrorCode := 16#FFFF;
     END_IF;
        
    2: //read modbus data
        #Modbus.bREQ := TRUE;
        #Modbus.bDISCONNECT := False;
        IF #Modbus.bDone THEN
            #aParameterList[#iListIndex].diValue := #Modbus.aModbusData[1];
            #aParameterList[#iListIndex].wErrorCode := #Modbus.wStatus;
            #ParamStateMachine.iState += 1;
        ELSE
            //if error then skip to next
            IF WORD_TO_INT(#Modbus.wStatus) < 0 THEN
                #aParameterList[#iListIndex].wErrorCode := #Modbus.wStatus;
                #ParamStateMachine.iErrorState := #ParamStateMachine.iState;
                #ParamStateMachine.iState := 100;
            END_IF;
        END_IF;
        IF #fbTimeOut.Q THEN
            #ParamStateMachine.iState := 100;
            #ParamStateMachine.iErrorState := #ParamStateMachine.iState;
            #aParameterList[#iListIndex].wErrorCode := 16#FFFF;
        END_IF;
        
        
    3:
        #Modbus.bREQ := false;
        #Modbus.bDISCONNECT := False;
        IF WORD_TO_INT(#Modbus.wStatus) = 16#7004 THEN
            #ParamStateMachine.iState += 1;
        ELSE
            IF WORD_TO_INT(#Modbus.wStatus) < 0 THEN
                #ParamStateMachine.iState := 100;
                #ParamStateMachine.iErrorState := #ParamStateMachine.iState;
            END_IF;
        END_IF;
        IF #fbTimeOut.Q THEN
            #ParamStateMachine.iState := 100;
            #ParamStateMachine.iErrorState := #ParamStateMachine.iState;
            #aParameterList[#iListIndex].wErrorCode := 16#FFFF;
        END_IF;
        
    4,100:
        
        #iListIndex += 1;
        #bEndOfList := True;
        WHILE (#iListIndex <= #PARAM_LIST_SIZE) DO
            IF (#aParameterList[#iListIndex].iMenuNumber <> -1) THEN //if menu no = -1 then skip entry
                #bEndOfList := False;
                EXIT; //break out of while
            ELSE
                #iListIndex += 1;
            END_IF;
        END_WHILE;
        IF #bEndOfList THEN //all parameters read for current drive, move on to next drive
            #iRetVal := RD_SYS_T(#dtNow);
            #tParamReadTime := T_DIFF(IN1:=#dtNow, IN2:=#dtThen);
            #iListIndex := 1;
            #ParamStateMachine.bStart := False; //stop modbus client processing for this drive
            #ModbusSeq[#iDriveIndex] := False;
            IF #iDriveIndex = #iLastIndex THEN //if at last drive then start proccessing for first drive
                #ModbusSeq[1] := True;
            ELSE
                #ModbusSeq[#iDriveIndex+1] := True; //move on to next drive
            END_IF;
            #ParamStateMachine.iState := 0;
        ELSE
            #ParamStateMachine.iState := 1;
        END_IF;
    ELSE
        #ParamStateMachine.iState := 0;
        
END_CASE;

//timout if stuck in state machine
#fbTimeOut(IN := ((#ParamStateMachine.iState <> 0) AND (#ParamStateMachine.iState = #ParamStateMachine.iPreviousState)),
           PT := t#1s);
#ParamStateMachine.iPreviousState:=#ParamStateMachine.iState;
 

Similar Topics

I have a PH meter that I am trying to bring its data into 1756-L81. I have downloaded the Rockwell MODBUS AOI kit, but I am not sure if I need to...
Replies
5
Views
164
Hello gentlemen, Im working on a small project on TIA Portal, about establishing a Modbus TCP connection between my ET200SP plc and a socomec...
Replies
12
Views
310
If a device has Modbus RTU over serial and Modbus RTO over TCP and Modbus TCP then there is a difference between Modbus RTU over TCP vs Modbus TCP...
Replies
7
Views
482
Hi There. I have PC to get few tags from PLC into C# windows forms application. What is the best and fastest way? I could not find Omron in...
Replies
3
Views
281
I contacted Hach and bought a kit they recommended for a customer to add Modbus TCP capability to his Chlorine Analyzer with a SC4500 controller...
Replies
8
Views
230
Back
Top Bottom