Using RTDS's MODBUS communication protocol, we intend to communicate with Python using the pyModbusTCP library. The register was assigned by mapping the components of the system modelled by RTDS as follows
# RIR: Read Input Registers (16 bit word, read only- outputs from RTDS)
RIR: 1 P4_real
RIR: 2 Q4_real
RIR: 3 P5_real
RIR: 4 Q5_real
RIR: 5 Bus1Arms_real
RIR: 6 Bus1Brms_real
RIR: 7 Bus1Crms_real
RIR: 8 Bus2Arms_real
RIR: 9 Bus2Brms_real
RIR: 10 Bus2Crms_real
RIR: 11 Bus3Arms_real
RIR: 12 Bus3Brms_real
RIR: 13 Bus3Crms_real
RIR: 14 Bus4Arms_real
RIR: 15 Bus4Brms_real
RIR: 16 Bus4Crms_real
RIR: 17 Bus5Arms_real
RIR: 18 Bus5Brms_real
RIR: 19 Bus5Crms_real
RIR: 20 Bus1_RMS_real
RIR: 21 Bus2_RMS_real
RIR: 22 Bus3_RMS_real
RIR: 23 Bus4_RMS_real
RIR: 24 Bus5_RMS_real
RIR: 25 Station_frequency
RIR: 26 EV1_pcharge
RIR: 27 EV2_pcharge
RIR: 28 EV3_pcharge
RIR: 29 EV4_pcharge
RIR: 30 EV5_pcharge
RIR: 31 EV6_pcharge
RIR: 32 EV7_pcharge
RIR: 33 EV8_pcharge
RIR: 34 EV1_Pref
RIR: 35 EV2_Pref
RIR: 36 EV3_Pref
RIR: 37 EV4_Pref
RIR: 38 EV5_Pref
RIR: 39 EV6_Pref
RIR: 40 EV7_Pref
RIR: 41 EV8_Pref
RIR: 42 DBLK1
RIR: 43 DBLK2
# ROR: Read Output Registers (16 bit word, read/write - inputs to RTDS)
ROR: 1 EV1_Pref
ROR: 2 EV2_Pref
ROR: 3 EV3_Pref
ROR: 4 EV4_Pref
ROR: 5 EV5_Pref
ROR: 6 EV6_Pref
ROR: 7 EV7_Pref
ROR: 8 EV8_Pref
ROR: 9 DBLK1
ROR: 10 DBLK2
END
Reading the value of the component using read_input_register() was successful, but the value of the component did not change when using write_single_register(). How can we solve these problems?
import time
from pyModbusTCP.client import ModbusClient
try:
c = ModbusClient(host='172.27.206.104', port=502)
except ValueError:
print("Error with host or port params")
iter = 1
while True:
print(iter, "sec")
P4_real = c.read_input_registers(1)
Q4_real = c.read_input_registers(2)
P5_real = c.read_input_registers(3)
Q5_real = c.read_input_registers(4)
Bus1Arms_real = c.read_input_registers(5)
Bus1Brms_real = c.read_input_registers(6)
Bus1Crms_real = c.read_input_registers(7)
Bus2Arms_real = c.read_input_registers(8)
Bus2Brms_real = c.read_input_registers(9)
Bus2Crms_real = c.read_input_registers(10)
Bus3Arms_real = c.read_input_registers(11)
Bus3Brms_real = c.read_input_registers(12)
Bus3Crms_real = c.read_input_registers(13)
Bus4Arms_real = c.read_input_registers(14)
Bus4Brms_real = c.read_input_registers(15)
Bus4Crms_real = c.read_input_registers(16)
Bus5Arms_real = c.read_input_registers(17)
Bus5Brms_real = c.read_input_registers(18)
Bus5Crms_real = c.read_input_registers(19)
Bus5Crms_real = c.read_input_registers(19)
Bus1_RMS_real = c.read_input_registers(20)
Bus2_RMS_real = c.read_input_registers(21)
Bus3_RMS_real = c.read_input_registers(22)
Bus4_RMS_real = c.read_input_registers(23)
Bus5_RMS_real = c.read_input_registers(24)
Station_frequency = c.read_input_registers(25)
EV1_p = c.read_input_registers(26)
EV2_p = c.read_input_registers(27)
EV3_p = c.read_input_registers(28)
EV4_p = c.read_input_registers(29)
EV5_p = c.read_input_registers(30)
EV6_p = c.read_input_registers(31)
EV7_p = c.read_input_registers(32)
EV8_p = c.read_input_registers(33)
charge1 = c.read_input_registers(34)
charge2 = c.read_input_registers(35)
charge3 = c.read_input_registers(36)
charge4 = c.read_input_registers(37)
charge5 = c.read_input_registers(38)
charge6 = c.read_input_registers(39)
charge7 = c.read_input_registers(40)
charge8 = c.read_input_registers(41)
switch1 = c.read_input_registers(42)
switch2 = c.read_input_registers(43
if iter>=2:
c.write_single_register(1,0)
c.write_single_register(2,0)
c.write_single_register(3,0)
c.write_single_register(4,0)
c.write_single_register(5,0)
c.write_single_register(6,0)
c.write_single_register(7,0)
c.write_single_register(8,0)
It is expected that the value of the component will change in real time during the real-time simulation process of rtds using write_single_register.