注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控论坛 -- PLC论坛 -- 三菱PLC论坛 -- PLC应用

中国工控网搜索:

 登陆:密码:  注册  密码

搜索:

发表人:wjun7610 发表时间:2007/10/13 18:25:00  

 

 本栏论题: 三菱PLC FX系列PLC编程口通信协议动态链接库DLL  [9051]

    一、最新三菱PLC FX系列PLC编程口通信协议动态链接库DLL(以下简称DLL),是为满足工业通信需要,针对工业领域要求上位机对PLC实时采集与控制的组态编程而设计。本DLL是采用Delphi语言开发的标准串口通讯库,具有以下特点:
    1)、实时性、可靠性好,可根据通信数据量自行调整通信时间;
    2)、适用于多PLC联网和上位机通信,满足多方面的需要;
    3)、函数接口功能全,操作简单;
    4)、附加实用转换与读取函数,易于快速开发(VC等非RAD开发环境的开发);
    5)、支持USB、PC扩展卡等扩展串口号;
    6)、支持多种操作系统win9x/win2000/winXP;
    7)、可在多种编程环境下使用,例如VB、VC、Delphi等开发环境。
   
    二、DLL函数说明
   
    1、打开串口
    Function ComOpen(nport:longint;User:Pchar):longint;stdcall;
    参数:nport: 打开串口号,取值为1~8,代表COM1~COM8;
    User:DLL授权用户名;
    返回值:长整型,操作成功返回1,否则返回0;打开串口不成功即返回0时的原因:1)、串口不存在或被占用; 2)、DLL试用过期; 3)、DLL授权注册不正确。
   
    使用举例:
    ComOpen(1,'wjun') , 打开COM1口。
   
    2、关闭串口
    Function ComClose(nport:longint):longint;stdcall;
    参数:nport: 串口号,取值为1~8,代表COM1~COM8;
    返回值:长整型,操作成功返回1,否则返回0;
   
    使用举例:
    ComClose(1) ,关闭打开的COM1口。
   
    3、PLC存储器的预置(D)
    Function ComDWrite(nport,address:longint;sendstr:pchar):longint;stdcall;
    参数:
    nport: 串口号,取值为1~8,代表COM1~COM8;
    address: 寄存器地址,取值为0~4095(此值需根据不同的PLC操作选择合适的地址范围);
    sendstr: 给寄存器写入的值,该值为4个一组的16进制字符串组其取值为0000~FFFF(整数值为0~65535),当要写入多个寄存器值时依次排列即可。如给D0与D1写值100和1000,先将100转成16进制字符串0064、1000转成16进制字符串03E8,则sendstr=006403E8;一次最多写32个寄存器即字符串长应小于等于128;
    ---------- ---- ~ ---------
    写字符串序列如: | 0000 | FFFF | 0010 | 0064 | ~ | 0010 | 0064 |
    ---------- ---- ~ ---------
    返回值:长整型,操作成功返回1,否则返回0;
   
    使用举例:
    ComDwrite(1,0,‘006403E8’),由串口1预置值D0=100,D1=1000。
   
    4、PLC存储器的读取(C、D、T)
    Function ComDRead(nport,address,Count:longint;element:Pchar):Pchar;stdcall;
    参数:
    nport: 串口号,取值为1~8,代表COM1~COM8;
    address: 寄存器地址,取值为D区0~4095、C、T(定时器/计数器当前值)区0~255;
    Count: 读取寄存器个数,最多读取32个寄存器;DLL读取的越界会自动舍去
    element:元件名称,支持D、C、T;
    返回值:字符串数据,字符串数据的终止符为"@";
    使用举例:
    ComDRead(1,0,4,'D') ,由COM1读取D0~D3四个寄存器的值,如返回值为“0001006403E809F0@”,则表示D0=0001, D1=0064,D2=03E8,D3=09F0;
   
    ---------- ---- ---
    读字符串序列如: | 0001 | 0064 | 03E8 | 009F | | @ |
    ---------- ---- ---
    返回值为16进制字符串,可以将返回值如上四位一组再转换成“0~65535”的整数值。
   
   
    5、PLC的多线圈强置(C、M、S、T)
    Function ComEForce(nport,address:longint;element,sendstr:pchar):longint;stdcall;
    参数:
    nport: 串口号,取值为1~8, 代表COM1~COM8;
    address: 位单元地址,定时器C:0~255、M:0~2047、S:0~999、T:0~255、特M: M8000~M8255;
    element:元件名称,支持C、M、S、T;
    sendstr: 给多线圈写入的值,该值为2个一组的16进制字符串组其取值为00~FF(整数值为0~255),当要写入多个值时依次排列即可。例如: 字节地址C0'(实际由位地址位C0~C7)、字节地址C1'(实际由位地址位C8~C15),如给C0'赋值80、C1'赋值CF,则sendstr=80CF;一次最多写64个字节,即字符串长应小于等于128;
    ---------- - ~ ------
    写字符串序列如: | 00 | FF | 10 | 64 | ~ | 1F | 48 |
    ---------- - ~ ------
   
    实际字符串与位地址的数值应如下表:(将上例的字节C0'、C1'转换为位地址C0~C15由下表对应)
    ------------------------------------
    位地址: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
    ------------------------------------
    各位赋值: | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 |
    ------------------------------------
    16进制串: | 8 | 0 | C | F |
    ------------------------------------
   
    返回值:长整型,操作成功返回1,否则返回0;
   
    使用举例:
    ComEForce(1,0,‘C’ ,‘80CF’),DLL将按上表给相应位强置值,这里地址address赋值0~7都是给C0~C15的强置值,因实际字节地址=address div 8 (0~7 div 8 都等于0,即都是给C0'、C1'强置值)。
   
    字节地址如Mx' = address div 8 ,M、S、C、T都按此公式计算如何给实际的位地址强置值。
   
    6、PLC的多线圈读取(C、M、S、T、X、Y)
    Function ComERead(nport,address,Count:longint;element:Pchar):Pchar;stdcall;
    参数:
    nport: 串口号,取值为1~8,代表COM1~COM8;
    address: 位单元地址,定时器C:0~255、M:0~2047、S:0~999、T:0~255、X:0~177(8进制)、Y:0~177(8进制)、特M: M8000~M8255;
    Count: 读取字节个数,最多读取64个字节;
    element:元件名称,支持C、M、S、T、X、Y;
    位单元的字节组成按8个位一组,如56(16进制)则表示下表的位构造值。
    ----------------
    位地址: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
    ----------------
    各位赋值: | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 |
    ----------------
    16进制串: | 5 | 6 |
    ----------------
    使用举例:
    ComERead(1,0,1,‘M’),如返回56(16进制)则M0~M7的值为上表反应的结果。0~255的位地址映射成字节地址应为0~31。
    即:实际地址=address / 8 ,如ComERead(1,11,2,‘C’)相应都得是C8~C15与C16~C23组合的两个字节的值,例如返回值为“870A@”
    -----------------------------------------
    位地址:| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | @ |
    -----------------------------------------
    各位赋值:| 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | @ |
    -----------------------------------------
    16进制串:| 8 | 7 | 0 | A | @ |
    -----------------------------------------
   
    "@"为字符串数据的终止符。
   
    DLL还提供附加函数CinBin ,可以读出字节中相应位的值是1还是0。
   
    对于X、Y区线圈地址可以按8进制地址转换成10进制后再参照上表的地址映射关系。
   
   
    7、PLC的线圈置位(C、M、S、T)
   
    Function ComESet(nport,address:longint;element:Pchar):longint;stdcall;
    参数:
    nport: 串口号,取值为1~8,代表COM1~COM8;
    address: 位单元地址,定时器C:0~255、M:0~1023、S:0~999、T:0~255、X:0~177、Y:0~177及特M: M8000~M8255;
    element:元件名称,支持C、M、S、T;
    使用举例:
    ComESet(1,0,‘C’),由COM1给C0置位;
    ComESet(1,8010,‘M’), 由COM1给M8010置位;
   
   
    8、PLC的线圈复位(C、M、S、T)
    Function ComEReset (nport,address:longint;element:Pchar):longint;stdcall;
    参数:
    nport: 串口号,取值为1~8,代表COM1~COM8;
    address: 位单元地址,定时器C:0~255、M:0~1023、S:0~999、T:0~255、X:0~177、Y:0~177及特M: M8000~M8255;
    element:元件名称,支持C、M、S、T;
    使用举例:
    ComEReset(1,0,‘T’),给T0复位;
    ComEReset (1,810,‘S’),给S810复位;
   
    三、DLL附加函数说明
   
    1、串口打开状态的读取
    Function ComTrue(nport:longint):longint;stdcall;
    参数:
    noprt: 串口号,取值为1~8,代表COM1~COM8;
    返回值:长整型,串口打开返回1,否则返回0;
   
    2、整数转换成16进制字符串 (为VC等非RAD开发环境所增设)
    Function CIntToHex(Cint,Digits:Longint):Pchar;stdcall;
    参数:
    Cint: 待转换整数,取值为(0~65535);
    Digits: 转换的字符串位数,指定位数小于实际位数时按实际输出;
   
    使用举例:
    CIntToHex(200,2),则返回字符串“C8@”;
    CIntToHex(200,4),则返回字符串“00C8@”;
    CIntToHex(4500,4),则返回字符串“1194@”;
    CIntToHex(4500,3),则返回字符串“1194@”,因为“194”不足以表示4500这个数所以按实际输出字符串“1194@”;
   
    "@"为字符串数据的终止符。
   
    3、16进制字符串转

以下是关于《三菱PLC FX系列PLC编程口通信协议动态链接库DLL》论题的回复(共4篇)

回复人:WJMF1 

 回复时间:2009/5/27 17:49:00

支持(709) | 反对(676)

 

    您好!
       请教以下程序的含义
    LD X0
    MOVE D510 VO
    MOVE D1000VO D506
    谢谢!

回复人:oumanrai 

 回复时间:2012/2/21 10:30:00

支持(712) | 反对(720)

 

    学习了

回复人:0511xxb 

 回复时间:2019/6/26 20:31:00

支持(367) | 反对(435)

 

    学习了。

回复人:hsuchinchen 

 回复时间:2024/1/10 9:28:00

支持(91) | 反对(116)

 

    学习了。谢谢!

如果要回复本栏论题,请首先中国工控网www.chinakong.com

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码

关闭该窗口

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳