一、最新三菱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  |