modbus(Altivar 212 S1A53844 and modicon m 340)

другие контроллеры
ROGNAROG
Posts: 74
Joined: Thu Oct 10, 2013 10:09 am

modbus(Altivar 212 S1A53844 and modicon m 340)

Post by ROGNAROG »

Привет всем.нужна ваша помощь.имеется частотник Altivar 212 S1A53844 и контролер который работает на процессоре modicon m 340 имеется связь контролера с частотником по каналу Mobdus.в данный момент запись и чтение реестров частотника идет по отдельности то есть так

Code: Select all

if z= 1 then
READ_VAR (ADDm('0.0.0.1'),'%MW',64001,0, Mngtwrite,RECV_BUFER);
END_IF;

if z=0  then
WRITE_VAR(ADDM('0.0.0.1'),'%MW',64001,0,SEND_BUFER,Mngtwrite); 
end_if;*)
вопрос в следующим как можно сделать так чтобы запись происходила сразу на несколько регистров и считались тоже несколько регистров???
полазил по вашему форуму почитал нашел что то похожее изменил под себя но что то не совсем могу понять что происходит.вроде записывает а куда не пойму.считать тоже не удается.
-------------------------------------------------------------------------------------------------------------------------
Hi, everybody. your help is necessary. there is a chastotnik of Altivar 212 S1A53844 and the controler who works at the modicon m 340 processor there is a communication of the controler with a chastotnik on the Mobdus.в channel this moment record and reading registers of a chastotnik goes separately that is so

Code: Select all

 if z = 1 then
READ_VAR (ADDm('0.0.0.1')', %MW', 64001,0, Mngtwrite, RECV_BUFER);
END_IF;

if z=0 then
WRITE_VAR (ADDM('0.0.0.1)'', %MW', 64001,0, SEND_BUFER, Mngtwrite); 
end_if; *) 
the question in the following as can be made so that record happened at once on some registers and some registers were considered too? ? ?
полазил on your forum I read I found something similar I changed under myself but something not absolutely I can understand that происходит.вроде writes down and where I won't understand. it isn't possible to consider too.
-----------------------------------------------------------------------------------------------------------------------

Code: Select all

(*if START_REQ then *) (*----------------inquiry start--------------*)
 (*SEND_BUFER[0]: = 16#0017 or 0 and 16#FF00 (*1bayt-adr the 1st рег readings (HI); 2bayt-function
 SEND_BUFER[1]: = 1 and 16#00FF (*3bayt-adr the 2nd рег readings (LO), 4bayt-quantity (HI) always = 0
 SEND_BUFER[2]: = 5 and 16#00FF or (*5bayt-quantity рег readings (LO)
   1 and 16#FF00 (*6bayt-adr the 1st рег for record (HI)
 SEND_BUFER[3]: = 1 and 16#00FF (*7bayt-adr the 1st рег for record (LO), a 8bayt-stake (HI) всегда=0
 SEND_BUFER[4]: = 5 and 16#00FF or (*9bayt-quantity рег for record (LO)
   5*2*16#100 (a *10bayt-stake of the subsequent bytes = кол_регистров*2 => in старш byte
        (*---------value of registers for record--------------
 for INDEX: = 0 to 5 do
  SEND_BUFER[INDEX+5]:=ROL ((EMIS_W[INDEX]) 8);  (*preobrazovany BIG/LITTLE ENDIAN 
 end_for;   

 GEST_RW [3]: = 5*2+10; (*в the last word of the table of parameters needs to be written down *)
    (a *kolichestvo of bytes given with inquiry, except for the address Slave *)   
(* 
WRITE_VAR (ADR:  =  ADDR_RW, 
OBJ:  =  ' MW %', 
NUM: = 1,
EMIS :=S END_BUFER,
GEST: = GEST_RW);
READ_VAR (ADR:  =  ADDR_RW, 
OBJ:  =  ' MW %', 
NUM: = 0,
NB: = 5,
gest: = GEST_RW,
RECP => RECV_BUFER); 
thanks wasted time on my question. also I apologize for the curve description of the problem. I hope for your help
-----------------------------------------------------------------------------------------------------------------------

Code: Select all

(*if START_REQ  then*) (*---------------- запуск запроса--------------*)
	(*SEND_BUFER[0]:= 16#0017 or 0 and 16#FF00(*1байт-адр 1-го рег чтения (HI);2байт-функция
	SEND_BUFER[1]:= 1 and 16#00FF  (*3байт-адр 2-го рег чтения (LO), 4байт-количество (HI) всегда = 0
	SEND_BUFER[2]:= 5 and 16#00FF or (*5байт-количество рег чтения (LO)
			1 and 16#FF00  (*6байт-адр 1-го рег для записи (HI)
	SEND_BUFER[3]:= 1 and 16#00FF  (*7байт-адр 1-го рег для записи (LO), 8байт-кол (HI) всегда=0
	SEND_BUFER[4]:= 5 and 16#00FF or (*9байт-количество рег для записи (LO)
			5*2*16#100	    (*10байт-кол последующих байт = кол_регистров*2 => в старш байт
        (*--------- значение регистров для записи --------------
	for INDEX:=0 to 5 do
		SEND_BUFER[INDEX+5]:=ROL ((EMIS_W[INDEX]),8); (*преобразование BIG/LITTLE ENDIAN 
	end_for;   
	
	GEST_RW [3]:= 5*2+10;(*в последнее слово таблицы параметров нужно записать*)
				(*количество передаваемых с запросом байт, за исключением адреса Slave*)   
(*	
WRITE_VAR(ADR:=ADDR_RW , 
OBJ:='%MW', 
NUM:=1,
EMIS :=SEND_BUFER,
GEST := GEST_RW);
READ_VAR(ADR:=ADDR_RW , 
OBJ:='%MW', 
NUM:=0,
NB:=5,
gest:=GEST_RW,
RECP => RECV_BUFER);
спасибо потраченное время на мой вопрос.и извиняюсь за свое кривое описание своей проблемы.надеюсь на вашу помощь
pupena_san
Posts: 392
Joined: Fri Dec 18, 2009 3:02 pm
Location: Киев

Re: modbus(Altivar 212 S1A53844 and modicon m 340)

Post by pupena_san »

Почитайте тут пример 2 и пример 5. Но судя по всему Вы уже это видели, тогда конкретизуйте вопрос.
Обратите внимание на пунтк Е3.2 в приложении Е (пример 5). Настройка частотного преобразователя для работы с Modbus RTU.
П.С. С altivar212 не работал. Но на сколько я знаю, с точки зрения управления по Modbus там все то же самое что у 71,61 и 31.
ROGNAROG
Posts: 74
Joined: Thu Oct 10, 2013 10:09 am

Re: modbus(Altivar 212 S1A53844 and modicon m 340)

Post by ROGNAROG »

Всем спасибо тема закрыта (tyou)