登录
首页 PLC论坛 三菱Mitsubishi
回帖 发帖
正文

主题:FX1N 地址如何换算

点击:1512 回复:8

哪位高人帮我, PLC是FX1N-24MR
我现在要用DELPHI通过串口(串口到FX1N圆形编程口)将D1,和D10两个寄存器赋1值和0值,
参照了一下 FX的通讯协议,还是搞不懂地址换算:
发送代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var s:string;
begin
 //  s:=#2'01FA004'#03'7F'; //返回 0000000083;
    S:=#02'010F604'#03'74';//读D123,D124的值,   返回  3412CDABD7
   comport1.WriteStr(s);
end;
#02 是STX
#03 报文结束符
我想向D1发送 '1'过去,S字串该是多少?
我想向D1发送 '0'过去,S字串该是多少?
我想向D10发送'1'过去S字串该是什么样?
我想向D10发送'0'过去S字串该是什么样?
我刚接触PLC,完全不懂,请高人指点,不胜感激.
07-12-27 11:43
读D区格式是:STX 0 address bytes ETX SUM
address=addr*2+0x1000再换成ASCII码
D0D1 address=(0*2)+0x1000=0x1000 ASCII 31 30 30 30
D100 address=(0x64*2)+0x1000=0x10C8 ASCII 31 30 43 38
bytes 字节数(FX1N是16位,一个D就是2个字节,2个D就是4个字节)
SUM 校验码自STX后到ETX包括ETX的和的低2位的ASC码
读D0D1的字符串是 STX 0 1000 04 ETX 88
07-12-27 12:39
感谢!
我试试看,不明白再麻烦您!
07-12-27 13:34
按照公式计算
Adress=Adress*2+1000H
D1的地址是为 (1*2)+1000H=1002   ASCII  31H 30H 30H 32H
D10的地址是 (10*2)+1000H=1020 ACSII  31H 30H 31H 34H
这样子算的对吗?
给D1寄存器赋值 1 则是
STX     W           Address               Byte     DATA     ETX     SUM
02H    31H     31H,30H,30H,32H      31H      31H      03H      59H
这样子对不对?
07-12-27 14:26
楼上的,您地址算的没错。
但是给D1赋1发送的字符您写错了。D1是一个十六进制寄存器,应该是两个字节,所以byte应该是2,而DATA也应该用两个字节来表示!
2楼说读D0D1发送的字符校验和算错了
07-12-27 20:50
那应该是这样:
STX     W           Address               Byte     DATA     ETX     SUM
02H    31H     31H,30H,30H,32H      32H      31H      03H      5AH
那么S字串为:
   #02'1100221'#03'5A'
但是我测试还是不行,d1值更本就未改变
07-12-27 23:00
S字串为:
   #02'11002020100'#03'1A'
07-12-28 09:02
感谢流客先生!,现在对D1赋1和0值都可以了,但是读D10值可以了,写D10值就不行,怪事,还得忙烦指点一下
d10 = 31H 30H 31H 34H
S:= #02'11014020100'#03'43' 但是不会改变D10的值
我读D10的值时
 S:=#02'0100202'#03'58';  就可读出D10值了,还请师傅点明!谢谢!
07-12-28 13:41
不好意思,刚才复制错了
读D10的值是:
S:=#02'0101402'#03'5B'; 可读出D10的值
07-12-28 13:43

工控新闻

更多新闻资讯